Подтвердить что ты не робот

Есть ли способ получить переменную важность с Keras?

Я ищу правильный или лучший способ получить переменную важность в нейронной сети, созданной с помощью Keras. То, как я сейчас это делаю, - это просто взять весы (а не смещения) переменных в первом слое с предположением, что более важные переменные будут иметь более высокие веса в первом слое. Есть ли другой/лучший способ сделать это?

4b9b3361

Ответ 1

Поскольку все будет перемешано по сети, первый слой не сможет рассказать вам о важности каждого var. Следующие слои также могут увеличить или уменьшить их значение, и даже сделать один var повлиять на важность другого var. Каждый одиночный нейрон в первом слое сам по себе придаст каждому вару другое значение, так что это не то, что прямолинейно.

Я предлагаю вам сделать model.predict(inputs) с помощью входов, содержащих массивы нулей, в результате чего только переменная, которую вы хотите изучить, будет 1 во входном файле.

Таким образом, вы видите результат для каждого var. Хотя это все равно не поможет вам в случаях, когда один var увеличивает важность другого var.

Ответ 2

Все не так просто. Например, на более поздних стадиях переменная может быть уменьшена до 0.

Я бы посмотрел на ЛАЙМ (объяснения, основанные на локальной интерпретации модели). Основная идея состоит в том, чтобы установить некоторые входные данные на ноль, пропустить их через модель и посмотреть, если результат похож. Если да, то эта переменная может быть не такой важной. Но есть еще кое-что об этом, и если вы хотите узнать это, то вы должны прочитать газету.

Смотрите marcotcr/lime на GitHub.

Ответ 3

* Отредактировано, чтобы включить соответствующий код для реализации важности перестановки.

Я ответил на аналогичный вопрос в Feature Impance Chart в нейронной сети, используя Keras в Python. Он реализует то, что Teque5 упомянул выше, а именно, перетасовывает переменную между вашей выборкой или важностью перестановки, используя пакет ELI5.

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=basemodel, **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())

Ответ 4

Я написал пост на эту тему (с реализацией Python)