Диаграмма важности функций в нейронной сети с использованием Keras в Python
Я использую python (3.6) anaconda (64-разрядный) spyder (3.1.2). Я уже установил модель нейронной сети, используя keras (2.0.6) для проблемы регрессии (один ответ, 10 переменных). Мне было интересно, как я могу создать диаграмму важности важности так:
![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)
Ответы
Ответ 1
Недавно я искал ответ на этот вопрос и нашел кое-что, что было бы полезно для того, что я делал, и подумал, что было бы полезно поделиться. В итоге я использовал модуль важности перестановок из пакета eli5. Это наиболее легко работает с моделью 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())
Ответ 2
В настоящее время Keras не предоставляет никаких функций для извлечения важности функций.
Вы можете проверить этот предыдущий вопрос: Keras: Есть ли способ получить значение переменной?
или связанная GoogleGroup: важность функции
Спойлер: В GoogleGroup кто-то объявил проект с открытым исходным кодом, чтобы решить эту проблему..
Ответ 3
Я написал пост на эту тему (с реализацией Python)