首页 > 解决方案 > 使用 LSTM 从时间序列数据的多步预测中获取重复模式

问题描述

我们LSTM用来学习时间序列数据的序列。Ask 是使用经过训练的模型进行多步预测。我们正在使用标准的多层Sequential模型。

该模型很好地学习了模式,并且可以紧密地重播整个训练数据。但是,在进行多步提前预测时,它似乎陷入了某种重复模式。(请看 Colab notebook 中的第二张图)

进行多步超前预测的想法是:

  1. 获取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

  2. 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

  3. 通过相同的循环运行这个新X的,直到我们得到future_steps所需的预测。

问题是这种技术会生成重复模式,如 colab notebook 中的第二张图所示。

这是进行多步预测的正确方法吗?

其他解决方案是训练模型以提供更多数量的future_predictions. 但我们的要求是预测未来的许多时间步长,我们不确定这是否是正确的方法。

Colab 链接到工作示例:https ://colab.research.google.com/drive/1ImLBSmM875OouCLoCwh6JeFKFCmwLbby

请注意:colab 笔记本的训练集有限。在实际生产中,我们训练了 10000 到 50000 个样本,但仍然发现问题。

标签: tensorflowmachine-learningtime-serieslstmrecurrent-neural-network

解决方案


在分析了您的代码之后,我认为问题在于您为模型构建输入以对其进行测试的方式。您使用涉及不同随机函数的不同过程。

作为另一个观察...您试图预测的数据是完全随机的...输入和输出之间没有关系。必须有一种方法来关联输入和输出(对吗?)。否则你在建模什么?

我为您创建了一个替代数据集和问题公式。它是相关的,您可以在这里查看


推荐阅读