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:
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)
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())
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.