多维和多变量时间序列预测 (RNN/LSTM) Keras

数据挖掘 Python 喀拉斯 rnn lstm
2021-09-19 01:18:37

我一直在尝试了解如何表示和塑造数据以使用 Keras(或 TensorFlow)进行多维多变量时间序列预测,但在阅读了许多关于如何在正确的形状(大多数示例略少

我的数据集:

  • 几个城市
  • 我有关于温度、汽车交通、湿度的信息
  • 比如说过去 2 年(每天一条记录)

我想做什么: 我想使用可能滞后的温度、汽车交通和湿度来预测每个城市明年的温度(当然还有更多功能,但这只是一个思考的例子)。

我感到困惑的是: 如果我有 2 个城市,我为此记录了 365 天的 3 个特征。我应该如何塑造我的输入,以便模型可以输出这两个城市的 365 天预测(即 365 天的 2 个温度时间序列)?

直观地说,张量形状将是(?, 365, 3)365 天和 3 个特征。但是我不确定在第一个维度中要坚持什么,最重要的是,如果它必须是城市的数量,我会感到惊讶。但与此同时,我不知道如何在模型中指定它必须正确理解尺寸。

任何指针都会有所帮助。我对问题的其余部分非常熟悉(即如何在 Keras 中构建网络等,因为我已经为其他神经网络做过这个,但更具体地说,如何最好地为所需的输入编码序列。)

哦,还有,我想我可以为每个城市独立训练和预测,但我相信每个人都会同意,可能有一些东西需要学习,这些东西并不是任何城市特有的,但只有考虑其中几个才能看到,因此,为什么我认为在模型中对其进行编码很重要。

1个回答

LSTM 的输入形状必须是(num_samples, num_time_steps, num_features). 在您的示例中,将两个城市结合为输入,num_features将是 2x3=6。

如果将所有 365 个时间步集中到一个样本中,那么第一个维度将是 1 - 一个样本!您还可以使用数据点的总数进行完整性检查。您有 2 个城市,每个城市有 365 个时间步长和 3 个特征: 2x365x3= 2190 。这显然与 1x365x6 相同(正如我上面所说的) - 所以这是一种可能性(Keras 会运行) - 但它显然根本不会学习泛化,只给它一个样本。

看看我最近回答的这个相关问题。在那里我谈到了使用滚动窗口(查看答案的评论以获取更多信息)。如果您需要,这将为您购买更多样品。

如果你想用两个城市的数据作为输入来训练一个模型,那么在每个时间步对两个城市进行预测就像定义一个最终Dense层一样简单,它输出 2 个单位。您的验证/测试数据当然必须包含 (city1, city2) 的元组。

解决这个问题的一种可能更复杂的方法是在单个城市的基础上创建数据集,然后在每个城市上单独训练几个子模型(比如 5 层),然后Merge/Concatenate它们并在顶部放置几个进一步的层。这将意味着您正在结合每个城市的学习特征,而这些特征又被结合到更高级别的抽象中。这是我从搜索引擎得到的第一张图片,它勾勒了这个想法。