web-dev-qa-db-ja.com

Python=でKerasを使用したニューラルネットワークの機能重要度チャート

私はpython(3.6)anaconda(64ビット)スパイダー(3.1.2)を使用しています。すでに回帰問題(1つの応答、10個の変数)にkeras(2.0.6)を使用してニューラルネットワークモデルを設定しました。私はどのように機能重要度チャートを生成できるのだろうと思っていました:

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

私は最近、この質問に対する答えを探していましたが、自分がやっていることに役立つものを見つけ、共有することが役立つと考えました。最終的に 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())
14
Justin Hallas

現時点では、Kerasは機能の重要性を抽出する機能を提供していません。

この前の質問を確認できます: ケラス:変数の重要度を取得する方法?

または関連するGoogleGroup: 機能の重要度

ネタバレ:GoogleGroupで、誰かがこの問題を解決するためのオープンソースプロジェクトを発表しました。

5
paolof89