【问题标题】:Predicting weather data using LSTM neural nets with Keras使用带有 Keras 的 LSTM 神经网络预测天气数据
【发布时间】:2017-08-24 03:09:01
【问题描述】:

我花了几个月的时间阅读无数的帖子,但我仍然像最初一样感到困惑。希望有人可以提供帮助。

问题:我想使用时间序列来预测特定位置的天气数据。

设置:

X1X2 都是包含 10 年的每日指数值的向量(每个向量中的总值 3650)。

Y 是纽瓦克机场 (T) 的温度时间序列,持续 10 年(3650 天)。

有充分的理由证明X1X2 可以用作Y 的预测变量。因此,我将所有内容分解为 100 天的窗口并创建以下内容:

X1 = (3650,100,1)
X2 = (3650,100,1)

这样窗口 1 包含从 t=0t=99 的值,窗口 2 包含从 t=1t=100 的值等。(假设我最后有足够的额外数据,我们仍然有 3650窗户)。

我从其他教程中学到的是,要进入 Keras,我会这样做:

X = (3650,100,2) = (#_of_windows,window_length,#_of_predictors) 我通过合并 X1X2 得到。

然后我有这个代码:

model = Sequential()
model.add(LSTM(1,return_sequences=True,input_shape=(100,2)))

model.add(LSTM(4))
model.add(Dropout(0.2))

model.compile(loss='mean_square_error',optimizer='rmsprop',shuffle=True)
model.fit(X,Y,batch_size=128,epochs=2) # Y is shape (3650,)

predictions = model.predict(?????????????)

所以我的问题是,如何设置 model.predict 区域以获取 N 未来天数的预测?有时我可能需要 2 天,有时我可能需要 2 周。我只需要取回N 值(形状:[N,]),我不需要取回窗口或类似的东西。

非常感谢!

【问题讨论】:

  • 所以你的 Y 值是t=100 第一个输入...

标签: python machine-learning neural-network deep-learning keras


【解决方案1】:

您可以预测的唯一格式是您训练模型的格式。如果我理解正确,您对模型的训练如下:

您使用大小为 100 的窗口(即,有时为 T-99,T-98,...,T 的特征)来预测目标在时间 T 的值。

如果确实如此,那么您可以对模型做的唯一事情就是进行相同类型的预测。即你可以提供100天的特征值,让模型在这100天中预测最后一天的目标值。

如果您希望它能够预测 N 天,您必须相应地训练您的模型。也就是说,Y 中的每个元素都应该由 N 天的序列组成。 Here 是一篇博客文章,描述了如何做到这一点。

【讨论】:

  • 在开放模式下运行N天你觉得怎么样?
  • @user3684792 您也可以这样做,但是您需要提供适当的功能。也就是说,对于第一天,您需要在 T-99、T-98、...、T 时间提供功能(这里我用 T 表示第一天)。第二天,您需要在 T-98、T-97、...、T+1 时间提供功能。在 N 之前的每一天都是如此。输入的格式应该与您用于训练的格式相同。
  • 你对这个与重新训练的准确性有什么直觉吗?我想我预计情况会更糟
  • 如果“重新训练”是指用 Y 重新训练由大小为 N 的序列组成,那么我预计重新训练的准确性会更差(提前 N 天预测比预测更难)预测提前 1 天)。另一方面,再培训将使您能够进一步预测。也就是说,您将能够提前 N 天而不是提前 1 天进行预测(因此,如果 N=30,即使您的功能仅在 4 月底之前可用,您也可以对整个 5 月进行预测。您将拥有测试模型以查看预测是否良好)。
  • (继续)所以这真的取决于你的模型的目的。每种方法都有其优点和缺点。
猜你喜欢
  • 2011-01-14
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 2017-08-02
  • 2019-09-10
  • 1970-01-01
相关资源
最近更新 更多