首页 > 解决方案 > LSTM 在预测和基本事实之间具有系统偏移

问题描述

目前,我认为我在 LSTM 模型中遇到了预测值和真实值之间的系统偏移。从现在开始继续前进的最佳方法是什么?

模型架构以及预测和真实值如下所示。这是一个回归问题,其中目标的历史数据加上 5 个其他相关特征X用于预测目标y。当前输入序列n_input的长度为 256,其中输出序列n_out为 1。简而言之,前面的 256 个点用于预测下一个目标值。

X被归一化。均方误差用作损失函数。具有余弦退火学习率的 Adam 被用作优化器 ( min_lr=1e-7, max_lr=6e-2)。

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
cu_dnnlstm_8 (CuDNNLSTM)     (None, 256)               270336    
_________________________________________________________________
batch_normalization_11 (Batc (None, 256)               1024      
_________________________________________________________________
leaky_re_lu_11 (LeakyReLU)   (None, 256)               0         
_________________________________________________________________
dropout_11 (Dropout)         (None, 256)               0         
_________________________________________________________________
dense_11 (Dense)             (None, 1)                 257       
=================================================================
Total params: 271,617
Trainable params: 271,105
Non-trainable params: 512
_________________________________________________________________

增加 LSTM 层中的节点大小、添加更多 LSTM 层(使用return_sequences=True)或在 LSTM 层之后添加密集层似乎只会降低准确性。任何意见,将不胜感激。

在此处输入图像描述

图像的附加信息。y 轴是一个值,x 轴是时间(以天为单位)。NaNs 已被零替换,因为在这种情况下,ground truth 值永远不会达到零。这就是为什么数据中有奇怪的异常值。

编辑: 我对模型进行了一些更改,从而提高了准确性。架构是相同的,但是使用的功能发生了变化。目前仅使用目标序列本身的历史数据作为特征。随之而来的是,n_input改变了128。切换AdamSGD,均方误差与平均绝对误差,最后 NaN 已被插值,而不是被 0 替换。

对验证集的领先一步预测看起来不错:

在此处输入图像描述

但是,验证集上的偏移量仍然存在:

在此处输入图像描述

值得注意的是,这个偏移量也出现在 x < ~430 的训练集中: 在此处输入图像描述

标签: pythontensorflowkeraslstmrecurrent-neural-network

解决方案


看起来您的模型过度拟合,并且总是将最后一个时间步的值作为预测返回。您的数据集可能太小,无法让具有这么多参数的模型收敛。您将需要求助于对抗过度拟合的技术:激进的 dropout、添加更多数据,或者尝试更简单、更少过度参数化的方法。

这种现象(LSTM 返回输入的转换版本)一直是许多 stackoverflow 问题中反复出现的主题。那里的答案可能包含一些有用的信息:

Keras 中的 LSTM 序列预测只输出输入的最后一步

LSTM 模型只是在预测时间序列中重复过去

LSTM NN 产生“偏移”预测(低质量结果)

Keras 网络产生逆向预测

keras多层LSTM模型的股价预测收敛到一个恒定值

Keras LSTM 预测的时间序列被挤压和移位

LSTM 时间序列改变了对股市收盘价的预测

LSTM RNN 的有趣结果:训练和验证数据的滞后结果

最后,请注意,根据数据集的性质,您的数据中可能根本没有发现任何模式。你经常看到人们试图用 LSTM 预测股市(在 stackoverflow 上有一个关于如何预测彩票号码的问题)。


推荐阅读