【问题标题】:Training & Validation LSTM Question: Precision & Recall Issue训练和验证 LSTM 问题:Precision & Recall 问题
【发布时间】:2020-12-11 14:44:10
【问题描述】:

我开发了一个 LSTM 编码器-解码器模型,用于基于 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')

欢迎任何建议。

谢谢。

【问题讨论】:

  • 看起来可能不是这样,但确实如此,我用来计算精度和召回率的包不正确。

标签: python tensorflow keras precision precision-recall


【解决方案1】:

如果你能给出你的混淆矩阵会更好。

但是,计算似乎有问题。

在数学上,**(准确率 + 召回率 >= 精度)

编辑: 这是mathematical identity

在你的情况下,31 + 33

我建议您使用this function。并获取报告,如果您能在问题中打印它的输出,我将不胜感激。

【讨论】:

  • 好吧,不,我现在不确定,因为这些是标准功能,当前的 keras 也有内置的 prec 和召回支持,metrics=[keras.metrics.Precision(), keras.metrics.Recall()]),类似的ques 被问到但没有回答。也许评论部分可以提供帮助。我的mathematical identity
  • 你能用 ```metrics=[keras.metrics.Precision(), keras.metrics.Recall()])` 代替 keras_metrics 并得到结果吗?
  • 你试过ac_model_1b.compile(loss='binary_crossentropy', optimizer='Adamax', metrics=['accuracy', keras.metrics.Precision(), keras.metrics.Recall()]) 吗?你也在使用 tf.keras 还是 keras?
  • 你能打印出整个错误吗? "ValueError: Shapes (None, 2, 1) and (None, 1, 1) are incompatible"我想看看这个错误是从哪里来的。
猜你喜欢
  • 2017-07-08
  • 2021-11-24
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
相关资源
最近更新 更多