Диаграмма важности функций в нейронной сети с использованием 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)