【问题标题】:Time series forecasting model.predict()时间序列预测 model.predict()
【发布时间】:2019-09-20 22:53:51
【问题描述】:

我不明白model.predict(...) 如何解决时间序列预测问题。我通常将它与 CNN 一起使用,它非常简单,但对于时间序列,我不明白它会返回什么。

例如,我目前正在做一个练习,我必须使用 LTSM 根据数据预测功耗,我成功训练了我的模型,但是当我想知道明天的功耗是多少时(所以除了过去没有数据那些)我不知道要使用什么输入。

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

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

    对于顺序数据,例如与每个用户关联的定时事件流,还可以创建一个滞后的 2D 数据集,其中不同 ID 的不同特征的历史记录对齐到单行中,具有以下结构:

    这可能是一种很好的工作方式,因为一旦您的数据处于正确的形状,您就可以使用它快速设置和训练模型。然而,使用这种方法设计的特征的模型通常没有任何能力“学习”任何关于数据自然序列的东西。对于接收这种格式的基于树的集成模型,上例中时间 t 的特征 1 和时间 t-1 是完全独立处理的,这会严重限制模型的预测能力。

    有一些深度学习架构是专门为序列数据建模而设计的,称为循环神经网络 (RNN)。其中最流行的两个单元是长短期记忆(LSTM)和门控循环单元(GRU)。有一篇关于如何理解 LSTM 单元如何工作的好帖子here,但 TL;DR 是它们具有允许它们从数据序列中学习的结构。

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

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

    回到你原来的问题,当你想预测你的测试集中的东西时,你需要传递它所代表的序列,就像它被训练的序列一样(这通常是监督学习的一个相当好的规则) .例如,如果数据像上面最后一个示例一样进行训练,您需要为每个要对其进行预测的 ID 传递一个 2D 示例。

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

    【讨论】:

    • 好的,但是例如我的测试集是成形的 (22163, 1, 6) 并且这个测试集的预测是成形的 (22163, 1),那么这个预测意味着什么?这是什么?
    • 您的测试数据不应该是3D,它应该是2D,如果每个测试样本(即3D 测试集)都有一个2D 元素,您可能需要将其编码为尊重维度问题,例如sklearn.preprocessing.OneHotEncoder
    • @Mansmisterio 可能是您在 22163 个样本中的每个样本中有 1 个特征的序列中的 6 个事件流。传递给 LSTM 模型是合理的。预测是 22,163 个中每一个的单个 y 变量结果,可能是每个序列中的第 7 个事件,或者它可能是您需要分类的一些结果(这将取决于您的输出层是什么)。虽然很难准确地说出来,只是您需要通过充分探索数据集和问题来深入研究。
    • @sslloo 如果数据集编码一些信息序列,那么它是 3D 是完全合理的??
    • @fordy 你可以这样做,但不能直接使用 sklearn 标准 API
    猜你喜欢
    • 1970-01-01
    • 2020-10-05
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 2014-04-03
    相关资源
    最近更新 更多