Обучение и проверка Вопрос LSTM: проблема точности и отзыва

У меня есть модель LSTM Encoder-Decoder, которую я разработал для классификации движения цен на основе модели Jump-Diffusion (по сути, проблема двоичной классификации).

Моя модель разделена на 75/25 между обучением и проверкой.

Моя проблема заключается в том, что после применения методов дисбаланса классов, таких как SMOTE, точность прогнозов моей модели очень высока как при обучении, так и при проверке (может все еще переобучаться). Но когда дело доходит до точности, отзыва и оценки f1, моя тренировочная модель снова работает хорошо, но со стороны проверки точность и отзыв значительно снизились. Это, очевидно, приводит к более низкому результату f1 на стороне валидации.

Кто-нибудь знает, почему точность проверки будет высокой, но точность и отзыв значительно снизились? Проблема в том, как моя модель вычисляет точность и отзыв на стороне валидации, или моя модель просто переоснащается, что приводит к более низким результатам валидации?

Сводку результатов модели см. На изображении ниже. При необходимости я могу предоставить ноутбук.

Изменить: включая соответствующий код

#%pip install keras-metrics

# Importing required packages
import keras_metrics as km

# LSTM Workings_Autoencoder Model

ac_model_1b = Sequential()
ac_model_1b.add(Bidirectional(LSTM(units=200, return_sequences = True,
                               input_shape = (n_timesteps, n_features), 
                                kernel_initializer='glorot_normal')))
ac_model_1b.add(LSTM(100))
ac_model_1b.add(Dropout(0.2))

ac_model_1b.add(RepeatVector(n_timesteps))

ac_model_1b.add(LSTM(100, return_sequences = True))
ac_model_1b.add(Dropout(0.2))
ac_model_1b.add(LSTM(200, return_sequences = True))
ac_model_1b.add(TimeDistributed(Dense(1, activation='sigmoid')))

ac_model_1b.compile(loss='binary_crossentropy', optimizer='Adamax', 
                 metrics=['accuracy', km.binary_precision(), km.binary_recall()])

results_ac_model_1b = ac_model_1b.fit(x_train, y_train, epochs=100, batch_size=32,
                        shuffle=True, validation_data=(x_valid, y_valid))

print(ac_model_1b.summary())

ac_model_1b.save('lstm_model_adamax.h5')

введите описание изображения здесь

Любые советы приветствуются.

Спасибо.


person Ian Murray    schedule 22.08.2020    source источник
comment
Может показаться, что это не так, но это так, пакет, который я использовал для расчета точности и отзыва, неверен.   -  person Ian Murray    schedule 22.08.2020


Ответы (1)


Было бы лучше, если бы вы предоставили свою матрицу путаницы.

Но, похоже, что-то не так с calc.

точность

Точность

Отзыв

математически ** (точность + отзыв ›= точность)

отредактировано: Вот математическая идентичность.

В вашем случае 31 + 33 ‹97

Я предлагаю вам использовать эту функцию. И получите отчет, я был бы признателен, если бы вы могли распечатать его в вопросе.

person Sayan Dey    schedule 22.08.2020
comment
Я добавил код, который использовал, функцию, которая вычисляет точность и отзыв, в раздел метрик. Значит, вы говорите, что в работе этой функции есть ошибка? Спасибо за вашу помощь. - person Ian Murray; 22.08.2020
comment
Что ж, сейчас я не уверен, потому что это стандартные функции, также в текущих keras есть встроенная поддержка предварительного и отзыва, metrics=[keras.metrics.Precision(), keras.metrics.Recall()]), аналогичный вопросы был задан, но не получил ответа. Может быть, раздел комментариев может помочь. Моя математическая личность - person Sayan Dey; 22.08.2020
comment
можно ли использовать metrics = [keras.metrics.Precision (), keras.metrics.Recall ()]) вместо keras_metrics и вернуться с результатами? - person Sayan Dey; 22.08.2020
comment
Когда я меняю его на упомянутый вами код, я получаю сообщение об ошибке ValueError: Фигуры (None, 2, 1) и (None, 1, 1) несовместимы, поэтому для начала я использовал альтернативный метод. Я не получаю никаких сообщений об ошибках, когда запускаю код, как описано изначально. - person Ian Murray; 22.08.2020
comment
Вы пробовали ac_model_1b.compile(loss='binary_crossentropy', optimizer='Adamax', metrics=['accuracy', keras.metrics.Precision(), keras.metrics.Recall()]) ? Вы также используете tf.keras или keras? - person Sayan Dey; 22.08.2020
comment
Да вот что я пробовал. Я только что импортировал сам керас - person Ian Murray; 22.08.2020
comment
Вы можете распечатать всю ошибку? "ValueError: Shapes (None, 2, 1) and (None, 1, 1) are incompatible" Я хочу увидеть, откуда взялась эта ошибка. - person Sayan Dey; 22.08.2020
comment
Я отредактировал вопрос с кодом ошибки, так как комментировать было слишком долго. Спасибо за вашу помощь кстати - person Ian Murray; 22.08.2020
comment
Давайте продолжим это обсуждение в чате. - person Sayan Dey; 22.08.2020