tensorflow - 使用 LSTM 从时间序列数据的多步预测中获取重复模式
问题描述
我们LSTM
用来学习时间序列数据的序列。Ask 是使用经过训练的模型进行多步预测。我们正在使用标准的多层Sequential
模型。
该模型很好地学习了模式,并且可以紧密地重播整个训练数据。但是,在进行多步提前预测时,它似乎陷入了某种重复模式。(请看 Colab notebook 中的第二张图)
进行多步超前预测的想法是:
获取
timestep_count
现有序列,predict()
在其上运行并获取y_dimension
输出:X t-9 , X t-8 , X t-7 , X t-6 , X t-5 , X t-4 , X t-3 , X t-2 , X t-1 , X t ==>型号 ==> P t+1 , P t+2 ,...P t+m
取
y_dimension
预测值 (P
) 并将它们推到X
.X t-7 , X t-6 , X t-5 , X t-4 , X t-3 , X t-2 , X t-1 , X t , P t+1 , P t+2 ==>型号 ==> P t+3 , P t+4 ,...P t+2+m
通过相同的循环运行这个新
X
的,直到我们得到future_steps
所需的预测。
问题是这种技术会生成重复模式,如 colab notebook 中的第二张图所示。
这是进行多步预测的正确方法吗?
其他解决方案是训练模型以提供更多数量的future_predictions
. 但我们的要求是预测未来的许多时间步长,我们不确定这是否是正确的方法。
Colab 链接到工作示例:https ://colab.research.google.com/drive/1ImLBSmM875OouCLoCwh6JeFKFCmwLbby
请注意:colab 笔记本的训练集有限。在实际生产中,我们训练了 10000 到 50000 个样本,但仍然发现问题。
解决方案
在分析了您的代码之后,我认为问题在于您为模型构建输入以对其进行测试的方式。您使用涉及不同随机函数的不同过程。
作为另一个观察...您试图预测的数据是完全随机的...输入和输出之间没有关系。必须有一种方法来关联输入和输出(对吗?)。否则你在建模什么?
我为您创建了一个替代数据集和问题公式。它是相关的,您可以在这里查看。
推荐阅读
- ruby-on-rails - 在rails中制作上传视频按钮但仍然不运行
- django - Django navigator.sendbeacon csrf 保护
- android - 在虚拟设备上安装 PhoneGap Developer App
- javascript - java.lang.String 类型的值无法转换为 JSONObject - React Native?
- c# - 使用所有存储的值创建一个实例的克隆
- ios - 如何让 Xcode 读取 UITextFields
- ios - 如何为 tableview 部分提供一个带有可选案例的枚举
- python - Python:如何将列表写入csv,每行有N个项目
- maple - 如何在maple中插入分页符?
- java - Android 应用程序在 Intent 处崩溃