【问题标题】:Predictors of different size for time series prediction using LSTM with Keras使用带有 Keras 的 LSTM 进行时间序列预测的不同大小的预测器
【发布时间】:2017-04-03 16:28:52
【问题描述】:

我想使用另一个时间序列YX 的过去值来预测时间序列值X。详细地说,我想使用 (@) 在时间 t (Xt) 预测 X 987654325@,...,Xt-1) 和 (Yt-p,...,Yt-1,Yt) 其中 p 是“回头看”的维度。 所以,我的问题是我的 2 个预测变量的长度不同。 让我们用一个例子更清楚。

如果我使用 2 的时间步长,我将有一个观察结果: [(Xt-p,Yt-p),...,(Xt-1,Yt-1),(??,Yt)] 作为输入,Xt 作为输出。我不知道用什么来代替??

我知道从数学上讲,我的预测变量需要具有相同的长度,因此我正在寻找一个值来替换缺失值。

我真的不知道这里是否有一个好的解决方案,如果我能做一些事情,所以任何帮助都将不胜感激。

干杯!

PS:你可以看到我的问题,就好像我想使用第二天的天气预测来预测一个城市提前一天销售的冰淇淋数量。 X 是冰淇淋的数量,Y 是温度。

【问题讨论】:

  • 至于你的PS,为什么不直接把Y定义为第二天的温度?
  • 是的,我当然可以。但如果我想预测多步头(例如 2),我会选择[(Xt-p,Yt-p+1,Yt-p+2),...,(Xt-2,Yt-1,Yt),(Xt-1,Yt,Yt+1)]。因此,在时间步之间,我会在网络中提供相同的特征,我觉得这不是学习的最佳方式。但我一定会尝试这个选项:)

标签: time-series keras lstm


【解决方案1】:

你可以例如执行以下操作:

input_x = Input(shape=input_shape_x)
input_y = Input(shape=input_shape_y)
lstm_for_x = LSTM(50, return_sequences=False)(input_x)
lstm_for_y = LSTM(50, return_sequences=False)(input_y)
merged = merge([lstm_for_x, lstm_for_y], mode="concat") # for keras < 2.0
merged = Concatenate([lstm_for_x, lstm_for_y])
output = Dense(1)(merged)

model = Model([x_input, y_input], output)
model.compile(..)
model.fit([X, Y], X_next)

其中X 是一个序列数组,X_forwardX p-提前一步,Y 是一个Ys 序列数组。

【讨论】:

  • 我对 LSTM 和 Keras 比较陌生,所以我不太明白你的意思。我知道您创建了一个具有 3 个 LSTM 层的网络,它有 2 个输出。然后您训练网络,以便您可以使用 X 作为输入预测 X_forward 并使用 X 预测 Y。对吗?我想使用 X 和 Y 预测 X_forward,所以不应该将 X 和 Y 作为输入,将 X_forward 作为输出?
  • 谢谢,它看起来更符合我的预期!我会试试这个网
猜你喜欢
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 2021-04-21
  • 1970-01-01
相关资源
最近更新 更多