Как я могу использовать лайм для классификации моих временных рядов - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть упрощенная модель, которая выглядит следующим образом:

model = Sequential()
model.add(LSTM(12, input_shape=(1000,12)))
model.add(Dense(9, activation='sigmoid'))

Мои тренировочные данные имеют форму:

(900,1000,12)

Как видно из выходного слоя, у меня 9 выходов Таким образом, каждый сигнал (длиной 1000) будет классифицирован на один или несколько из этих выходов (это многолинейная классификация)

Я тренирую свою модель следующим образом:

history = model.fit(X_train,y_train, batch_size=32, epochs=10,validation_data=(X_val,y_val),verbose=2)

Так что все пока все в порядке, но теперь я хочу использовать Lime для объяснения классификации

explainer = lime_tabular.RecurrentTabularExplainer(X_train, training_labels=y_train,feature_names=['1','2','3','4','5','6','7','8','9','10','11','12'],
                                                   discretize_continuous=True,
                                                   class_names=['a','b','c','d','e','f','g','h','i'],
                                                   discretizer='decile')

Я не получаю никакой ошибки при определении моего объяснителя, но когда я пытаюсь запустить приведенный ниже код, он запускается для долгое время, прежде чем дать мне ошибку

exp=explainer.explain_instance(data_row=X[0].reshape(1,1000,12),classifier_fn= model)
exp.show_in_notebook()
NotImplementedError: LIME does not currently support classifier models without probability scores. 
If this conflicts with your use case, please let us know: https://github.com/datascienceinc/lime/issues/16

Может кто-нибудь распознать эту ошибку или увидеть, что не так?

1 Ответ

0 голосов
/ 30 апреля 2020

сигмоид в вашем последнем слое не гарантирует, что ваши оценки вероятности в сумме до 1 между классами. Попробуйте изменить его с помощью softmax

model = Sequential()
model.add(LSTM(12, input_shape=(1000,12)))
model.add(Dense(9, activation='softmax'))
...