web-dev-qa-db-fra.com

Feature Importance Chart dans un réseau de neurones utilisant Keras dans Python

J'utilise Python (3.6) anaconda (64 bits) spyder (3.1.2). J'ai déjà défini un modèle de réseau neuronal utilisant keras (2.0.6) pour un problème de régression (une réponse, 10 variables). Je me demandais comment puis-je générer un tableau d'importance des fonctionnalités comme suit:

feature importance chart

def base_model():
    model = Sequential()
    model.add(Dense(200, input_dim=10, kernel_initializer='normal', activation='relu'))
    model.add(Dense(1, kernel_initializer='normal'))
    model.compile(loss='mean_squared_error', optimizer = 'adam')
    return model

clf = KerasRegressor(build_fn=base_model, epochs=100, batch_size=5,verbose=0)
clf.fit(X_train,Y_train)
24
andre

Récemment, je cherchais la réponse à cette question et j'ai trouvé quelque chose qui était utile pour ce que je faisais et j'ai pensé qu'il serait utile de le partager. J'ai fini par utiliser un module importance de la permutation du module package eli5 . Cela fonctionne le plus facilement avec un modèle scikit-learn. Heureusement, Keras fournit un wrapper pour les modèles séquentiels . Comme indiqué dans le code ci-dessous, son utilisation est très simple.

from keras.wrappers.scikit_learn import KerasClassifier, KerasRegressor
import eli5
from eli5.sklearn import PermutationImportance

def base_model():
    model = Sequential()        
    ...
    return model

X = ...
y = ...

my_model = KerasRegressor(build_fn=base_model, **sk_params)    
my_model.fit(X,y)

perm = PermutationImportance(my_model, random_state=1).fit(X,y)
eli5.show_weights(perm, feature_names = X.columns.tolist())
14
Justin Hallas

Pour le moment, Keras ne fournit aucune fonctionnalité permettant d’en extraire l’importance.

Vous pouvez vérifier cette question précédente: Keras: Un moyen d'obtenir une importance variable?

ou le groupe Google associé: importance de la fonctionnalité

Spoiler: Dans GoogleGroup, une personne a annoncé un projet open source pour résoudre ce problème.

5
paolof89