Tuttavia, ciò che si sta cercando di ottenere è davvero piuttosto semplice e può essere fatto moltiplicando il valore medio standardizzato medio di ciascuna divisione di funzione su ogni classe, con l'elemento di matrice model._feature_importances
corrispondente. È possibile scrivere una semplice funzione che standardizza il set di dati, calcola la media di ogni suddivisione di funzionalità tra le previsioni di classe e fa moltiplicazioni a livello di elemento con l'array model._feature_importances
. Più grandi sono i valori risultanti assoluti, più importanti saranno le caratteristiche della loro classe prevista e, meglio ancora, il segno indicherà se sono importanti valori piccoli o grandi.
def class_feature_importance(X, Y, feature_importances):
N, M = X.shape
X = scale(X)
out = {}
for c in set(Y):
out[c] = dict(
zip(range(N), np.mean(X[Y==c, :], axis=0)*feature_importances)
)
return out
Esempio:
import numpy as np
import json
from sklearn.preprocessing import scale
X = np.array([[ 2, 2, 2, 0, 3, -1],
[ 2, 1, 2, -1, 2, 1],
[ 0, -3, 0, 1, -2, 0],
[-1, -1, 1, 1, -1, -1],
[-1, 0, 0, 2, -3, 1],
[ 2, 2, 2, 0, 3, 0]], dtype=float)
Y = np.array([0, 0, 1, 1, 1, 0])
feature_importances = np.array([0.1, 0.2, 0.3, 0.2, 0.1, 0.1])
#feature_importances = model._feature_importances
result = class_feature_importance(X, Y, feature_importances)
print json.dumps(result,indent=4)
{
"0": {
"0": 0.097014250014533204,
"1": 0.16932975630904751,
"2": 0.27854300726557774,
"3": -0.17407765595569782,
"4": 0.0961523947640823,
"5": 0.0
},
"1": {
"0": -0.097014250014533177,
"1": -0.16932975630904754,
"2": -0.27854300726557779,
"3": 0.17407765595569782,
"4": -0.0961523947640823,
"5": 0.0
}
}
Il primo livello di chiavi in result
sono etichette di classe, e il secondo livello di tasti da colonne indici, cioè dotate di indici. Ricorda che i valori assoluti di grandi dimensioni corrispondono all'importanza e il segno ti dice se sono piccoli (possibilmente negativi) o grandi valori importanti.
Per curiosità, perché includi la libreria panda? – tmthydvnprt