使用 LSTM 进行时间序列预测

Posted

技术标签:

【中文标题】使用 LSTM 进行时间序列预测【英文标题】:Time Series Prediction using LSTM 【发布时间】:2017-10-03 06:19:49 【问题描述】:

我正在使用Jason Brownlee's tutorial (mirror) 在一些系统日志/网络日志数据上应用 LSTM 网络。他是高手!

我有过去 1 年每天的系统日志数据(特定事件),因此我使用 LSTM 网络进行时间序列分析。我正在使用 Keras 深度学习库中的 LSTM。

据我所知-

    关于Batch_size

一批数据是来自训练的固定大小的行数 定义在更新之前要处理多少模式的数据集 网络的权重。基于 batch_size 模型 从数据中随机抽取样本进行分析。对于时间序列 这是不可取的,因此 batch_size 应该始终为 1。

    关于随机播放值的设置

默认情况下,一个时期内的样本在暴露于网络之前会被打乱。这对于 LSTM 来说是不可取的 因为我们希望网络在学习时建立状态 观察序列。我们可以禁用洗牌 通过将“shuffle”设置为“False”来采样。

场景1 - 使用上述两个规则/指南 - 我用不同数量的神经元、时期大小和不同的层进行了几次试验,并从基线模型(持久性模型)中获得了更好的结果。

场景2- 在不使用上述指南/规则的情况下 - 我用不同数量的神经元、时期大小和不同的层进行了几次试验,得到了比场景 1 更好的结果。

查询 - 将时间序列的 shuffle 设置为 True 并将 Batch_size 值设置为 1。这是规则还是指南?

阅读教程认为时间序列的数据不应该被打乱似乎是合乎逻辑的,因为我们不想改变数据的顺序,但是对于我的数据,如果我让数据被打乱,结果会更好。 最后,我认为重要的是我如何通过跑步获得更好的预测。 我认为我应该尝试将“理论”置于具体证据之上,例如指标、肘部、RMSE 等。

请指教。

【问题讨论】:

【参考方案1】:

这在很大程度上取决于数据的大小,也取决于变量的数量,根据我的经验,减小批大小会产生更好的结果,因为更新更频繁,但在庞大的数据集中它非常昂贵。您必须权衡取舍(训练时间与结果)。

关于您的洗牌,可能是您的数据与过去没有那么相关,如果是这种情况,洗牌数据有助于网络学习并能够概括(如按标签排序)检查原因 7以下37 reasons your neural network not working

批量越大越难泛化(原因 11)。当数据明显依赖于过去时,您可以将 Keras 中的 LSTM 声明为有状态的,这意味着:根据 Keras API,“为一批中的样本计算的状态将被重用于下一批中的样本的初始状态”。希望这会有所帮助。

【讨论】:

以上是关于使用 LSTM 进行时间序列预测的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 LSTM 单元训练 RNN 以进行时间序列预测

如何使用 LSTM 对图像进行时间序列预测?

使用 LSTM 和 keras 进行时间序列预测的分类变量

使用 LSTM 进行预测

在Python中使用LSTM和PyTorch进行时间序列预测

使用 LSTM 进行多元二进制序列预测