时间序列预测模型.predict()

时间:2019-05-02 12:05:00

标签: python tensorflow keras

我不了解model.predict(...)如何处理时间序列预测问题。我通常将其与CNN一起使用,这非常简单,但是对于时间序列,我不知道它会返回什么。

例如,我目前正在做一个练习,其中我必须使用LTSM基于数据预测功耗,我成功地训练了模型,但是当我想知道明天的功耗是多少时(因此过去没有数据)个)我不知道该使用什么输入。

1 个答案:

答案 0 :(得分:1)

您可能更习惯的传统ML算法通常期望数据采用2D结构,如下所示:

2D Data Structure

对于顺序数据,例如与每个用户相关的定时事件流,还可以创建一个滞后的2D数据集,其中具有不同ID的不同功能的历史记录通过以下结构排列为单行:

Lagged 2D example

这可能是一种很好的工作方式,因为一旦数据具有正确的形状,便可以快速使用它来建立和训练模型。但是,使用通过这种方法设计的功能的模型通常没有能力“学习”有关数据自然顺序的任何信息。对于像接收这种格式的基于树的集成模型一样,上面示例中的时间t和时间t-1处的特征1被完全独立地对待,这会严重限制模型的预测能力。

有几种专门用于建模序列数据的深度学习架构,称为递归神经网络(RNN)。其中最常用的两个单元是长期短期记忆(LSTM)和门控循环单元(GRU)。关于如何理解LSTM单元格here的文章不错,但是TL; DR的结构使得他们可以从数据序列中学习。

像LSTM这样的单元期望输入数据的3D张量。我们对其进行排列,以使一个轴沿其具有数据特征,第二轴具有序列步长(如时间刻度),而第三轴具有每个不同的示例,我们要预测沿其堆叠的单个“ y”值。使用与上面的滞后示例相同的数据集类型,看起来像这样:

3D data example

学习像这样的数据序列中的模式的功能对于自然排序的时间序列和文本数据特别有用。

要回到最初的问题,当您想要预测测试集中的某些内容时,您需要将其传递的序列传递给它,就像训练过的序列一样(这通常是监督学习的一个很好的规则) 。例如,如果像上面的最后一个示例那样对数据进行训练,则需要为要进行预测的每个ID传递2D示例。

您应该探索原始训练数据的表示方式,并确保您对它的理解,因为您需要创建相同形状的数据来进行预测。 X_train.shape是一个很好的起点,如果您将训练数据存储在pandas数据帧或numpy数组中,以查看维数,然后可以检查每个轴上的条目,直到对它包含的数据。