python - 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
。切换Adam
为SGD
,均方误差与平均绝对误差,最后 NaN 已被插值,而不是被 0 替换。
对验证集的领先一步预测看起来不错:
但是,验证集上的偏移量仍然存在:
解决方案
看起来您的模型过度拟合,并且总是将最后一个时间步的值作为预测返回。您的数据集可能太小,无法让具有这么多参数的模型收敛。您将需要求助于对抗过度拟合的技术:激进的 dropout、添加更多数据,或者尝试更简单、更少过度参数化的方法。
这种现象(LSTM 返回输入的转换版本)一直是许多 stackoverflow 问题中反复出现的主题。那里的答案可能包含一些有用的信息:
最后,请注意,根据数据集的性质,您的数据中可能根本没有发现任何模式。你经常看到人们试图用 LSTM 预测股市(在 stackoverflow 上有一个关于如何预测彩票号码的问题)。
推荐阅读
- python - 如何在 Python 中返回整个字符串并从中提取一列?
- regex - Firefox 给出 SyntaxError: invalid regexp group
- angular - Ionic 3 open modal 出现未在入口组件中声明但已存在的错误
- c# - 如何在 C# 中的 ListView 上运行 Linq 查询?
- sql-server-2012 - Cakephp 3 与 SQL Server 2012
- rust - 为什么这个迭代器在不直接作为函数参数调用时会丢弃?
- python-3.x - 如何计算 3 通道图像中的黑色像素图像?
- css - 如何在 WordPress 网站上定义元素的粘性位置
- json - react-native:使用 async/await 和 setState
- c++ - 如何修复 CMake 错误:源目录