私はpython(3.6)anaconda(64ビット)スパイダー(3.1.2)を使用しています。すでに回帰問題(1つの応答、10個の変数)にkeras(2.0.6)を使用してニューラルネットワークモデルを設定しました。私はどのように機能重要度チャートを生成できるのだろうと思っていました:
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)
私は最近、この質問に対する答えを探していましたが、自分がやっていることに役立つものを見つけ、共有することが役立つと考えました。最終的に eli5 package の 順列重要度 モジュールを使用しました。 scikit-learnモデルで最も簡単に機能します。幸いなことに、Kerasは シーケンシャルモデルのラッパー を提供します。以下のコードに示すように、それを使用することは非常に簡単です。
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())
現時点では、Kerasは機能の重要性を抽出する機能を提供していません。
この前の質問を確認できます: ケラス:変数の重要度を取得する方法?
または関連するGoogleGroup: 機能の重要度
ネタバレ:GoogleGroupで、誰かがこの問題を解決するためのオープンソースプロジェクトを発表しました。