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


12

我一直在尝试了解如何使用Keras(或TensorFlow)来表示和塑造数据以进行多维多变量时间序列预测,但是在阅读了许多有关如何在Web站点中呈现数据的博客文章/教程/文档后,我仍然不清楚。正确的形状(大多数示例略少一些)

我的数据集:

  • 几个城市
  • 我有关于温度,汽车通行性,湿度的信息
  • 可以说最近2年(每天1条记录)

我想做的事情: 我想使用温度,汽车通行和湿度的滞后版本来预测每个城市明年的平均气温(当然会有更多功能,但这只是一个思想示例)。

我感到困惑的是: 如果我有2个城市,并且在365天内记录了3个要素。我应该如何调整我的输入,以便模型可以输出这两个城市365天的预报(即365天的2个时间序列的温度)?

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

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

哦,而且,我想我可以对每个城市进行独立的培训和预测,但是我敢肯定,每个人都会同意有可能要学习的东西并不是每个城市所独有的,只有在考虑其中的几个时才能看到,因此,为什么我认为在模型中对其进行编码很重要。


1
这是一个关于这个主题的不错的教程:tensorflow.org/beta/tutorials/text/time_series
CubeBot88

Answers:


13

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它们放在顶层。这意味着您将结合每个城市的学习功能,然后将这些功能组合到更高的抽象水平。这是我从搜索引擎获得的第一张图片,它勾勒出了这个想法。


非常感谢您抽出宝贵的时间回答这么清楚!现在这很有意义。但是,的确,我担心的是,执行您所解释的第一个解决方案将无法进行太多概括。滑动窗口方法是否真的可以在整个城市中进行广泛推广?
巴斯蒂安'18

别客气!深网总是受益于更多数据。我上面的建议将包含很多参数-仅365点,您冒着过度拟合这些城市的风险(即没有概括性)!您可以尝试进行数据扩充- 如何取决于您的数据。如果您有足够的数据,则可以很好地概括一下-我可以想象一个Word2Vec类型的结果(在文本分析/ NLP中很常见),其中变量之间的关系可以解释。查看此以获取信息,并获取更多的直觉/乐趣。您的结果可能会绘制气象图!
n1k31t4

是的,这是有道理的,因此,如果我理解您的意思,那么在一些滚动窗口上工作会有点“更多数据”的窍门?
巴斯蒂安'18

假设您根据最近的100天预测明天,那么与一年前(不使用滚动窗口)相比,自昨天(如果进行滚动窗口)以来,系统的状态就不会发生太大变化。从技术上讲,它确实会创建更多样本,但您并不是在创建新的数据点,而是在预测允许模型一次专注于较小的块。与对所有数据进行一次拟合和进行一次预测相比,这种较高的粒度将使您可以对结果做出更好的(更平滑的)统计报表。您可以减少结果的不确定性。
n1k31t4 '18年

同意!滚动窗口是否完全不会阻止存储单元学习长期的依赖关系?
巴斯蒂安
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.