LSTM - 我应该回顾多少次来预测接下来的六个小时 - 多元时间序列

数据挖掘 机器学习 Python 时间序列 喀拉斯 lstm
2022-03-10 08:26:38

LSTM在用于时间序列分析时,我仍然对回顾主题感到困惑。如果我有每小时数据并且我想用多个预测器预测接下来的 6 小时,我应该在准备训练集时回顾 6 小时吗?

或者

我是否应该回顾一小时(班次 1)然后预测下一小时并获取该预测值并将其反馈以预测下一个 6 小时之后的值?

这个概念对我来说还是有点模糊LSTM任何想法将不胜感激。

2个回答

第二个选项听起来很有趣,但最好不要这样做:错误会总结起来,而且更难追踪错误的来源。就像您在第一个小时有一些错误,将其反馈到网络中,预测第二个小时在那里会出现错误,并且无法真正判断其中有多少是由第一个小时的错误引起的。

除此之外,我还没有看到任何使用这种反馈机制的应用程序。

所以一时t我们想预测值yt+1取决于yt+6正确的?你应该使用x0取决于xt作为输入并使用 6 个值作为目标/输出。然后当你得到新信息时,你添加xt+1并使用它来更新 LSTM 的单元状态和隐藏状态并获得新的输出。喂食预测的问题是错误会累积,尽管序列生成模型(如 seq2seq)确实会发生这种情况。然后你要做的是在训练期间使用两种类型的训练,一种使用当前预测,另一种使用已知训练数据,两者都只占一小部分时间。这被称为“教师强迫”。

如果我们使用我的第一个建议,这里将解释如何准备数据。要训​​练你的模型,你需要使用滞后来准备你的目标。假设我们有x作为一维,我们试图预测接下来的 6 个值x,你会得到xy

| t | x   | y                     |
| 0 | 0   | [-1, 1, 2, 3, 2, 1]   |
| 1 | -1  | [1, 2, 3, 2, 1, 0]    |
| 2 | 1   | [2, 3, 2, 1, 0, -1]   |
| 3 | 2   | [3, 2, 1, 0, -1, -2]  |
| 4 | 3   | NaN                   |
| 5 | 2   | NaN                   |
| 6 | 1   | NaN                   |
| 7 | 0   | NaN                   |
| 8 | -1  | NaN                   |
| 9 | -2  | NaN                   |

最后六个步骤没有目标,因为它在我们的训练集中不可用。损失函数将是每个时间步长六个预测的(加权)均方误差。如果您真的不想丢弃数据,您可以创建一个自定义损失函数,该函数可以利用只有 4 个目标可用这一事实,因为我们已接近尾声,但这会使事情复杂化。

编辑:关于标题中的问题,你想尽可能地回顾过去,这基本上意味着你总是从t=0.