我正在使用 LSTM 神经网络(有状态)进行时间序列预测。
我希望有状态的LSTM能够捕获隐藏的模式并做出令人满意的预测(导致时间序列变化的物理定律尚不清楚)。
我有一个时间序列X
,长度为1500
(实际观测数据),我的目的是预测 future 的100
。
我认为预测下一个 10
比预测下一个 100
更有希望(对吗?)。
因此,我像这样准备训练数据(始终使用 100
值来预测下一个 10
;x_n
表示
元素):X
中的第 n 个
shape of trainX: [140, 100, 1]
shape of trainY: [140, 10, 1]
---
0: [x_0, x_1, ..., x_99] -> [x_100, x_101, ..., x_109]
1: [x_10, x_11, ..., x_109] -> [x_110, x_111, ..., x_119]
2: [x_20, x_21, ..., x_119] -> [x_120, x_121, ..., x_129]
...
139: [x_1390, x_1391, ..., x_1489] -> [x_1490, x_1491, ..., x_1499]
---
训练结束后,我想使用模型通过 [x_1400 - x_1499]
预测接下来的 10
个值 [x_1500 - x_1509]
>,然后使用 [x_1410 - x_1509]
预测接下来的 10
个值 [x_1510 - x_1519]
。
这是正确的方法吗?
经过大量阅读文档和示例后,我可以训练模型并进行预测,但结果似乎并不令人满意。
为了验证该方法,我假设最后的 100 (x_1400 - x_1499)
值未知,并将它们从 trainX
和 trainY
中删除>,然后尝试训练模型并预测它们。最后,将预测值与观测值进行比较。
如有任何建议或意见,我们将不胜感激。
最佳答案
你的问题确实很复杂。在我尝试回答这个问题之前,我将与您分享我的疑问,即使用 LSTM 来完成您的任务是否明智。您想要对看似相对简单的时间序列使用真正高级的模型(LSTM
能够学习真正复杂的模式)。而且 - 你的数据量非常小。老实说 - 我会首先尝试训练更简单、更容易的方法(例如 ARMA
或 ARIMA
)。
回答你的问题 - 如果你的方法很好 - 它似乎是合理的。其他合理的方法是预测所有 100
步或例如50
步两次。使用 10
步骤,您可能会遇到错误累积 - 但这仍然可能是一个好方法。
正如我之前提到的 - 我宁愿尝试更简单的 ML 方法来完成此任务,但如果您确实想使用 LSTM,您可以通过以下方式解决此问题:
- 定义元参数,例如您想要预测的前进步数、输入网络的输入大小。
- 尝试使用例如网格搜索以找到该元参数的最佳值。使用
k-fold
交叉验证评估每个设置。 - 使用最佳元参数设置重新训练最终模型。
您的数据量相对较少,因此您可以轻松找到超参数的最佳值。这还将告诉您您的方法是否良好 - 只需检查最佳解决方案提供的结果即可。
关于machine-learning - 这是使用状态 LSTM 神经网络预测时间序列的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42652526/