【问题标题】:Predict daily value with LSTM which has hourly timeseries as input使用具有每小时时间序列作为输入的 LSTM 预测每日价值
【发布时间】:2020-04-10 07:26:06
【问题描述】:

我正在训练一个编码如下的单层 LSTM:

model = keras.Sequential()

model.add(keras.layers.LSTM(units=64,
                            input_shape=(X_train.shape[1], X_train.shape[2])))

model.add(keras.layers.Dense(units=1,  activation='sigmoid'))

model.compile(
  loss='binary_crossentropy',
  optimizer = keras.optimizers.Adam(lr=0.0001),
  metrics=['acc']
)

我的 LSTM 的输入是每小时的时间序列。我想根据每小时系列预测每天的值。
目前我所做的是生成每小时预测,然后将第一个预测作为每天的预测。但是我想知道是否有一种方法可以每天生成相同的预测。
谢谢!

【问题讨论】:

  • 你想预测什么样的事情?您的每小时数据是否包含 24 小时,您想以某种方式为其分配一个有意义的分数,或者您是否还有更多小时可以预测某一天?您要预测的每日值是每小时(预测)值的总和,还是平均值、最大值或其他完全值?
  • 嗨,这是一个分类问题,所以每个小时的标签是 1 或 0,在一天内是恒定的。我想根据之前的输入来预测第二天是 1 还是 0。
  • 在这种情况下,您可以只使用每小时数据作为输入,并尝试预测第二天的单个值。例如,如果您将前两天用作输入,那么您将有 48 小时的输入作为目标。
  • 我如何预测第二天的单个值?

标签: python keras time-series lstm recurrent-neural-network


【解决方案1】:

一个选项是您也可以提供一个名为 batch_input_shape 的参数,而不是 input_shape。不同之处在于现在您必须提供固定的批量大小,并且您的输入数组形状将类似于 (24, X_train.shape[1], X_train.shape[2])

您还可以选择设置另一个参数return_sequences。此参数说明是否在每个时间步而不是最终时间步返回输出。当我们将 return_sequences 设置为 True 时,输出形状变为 3D 数组,而不是 2D 数组。

model = keras.Sequential()

model.add(keras.layers.LSTM(units=64,
                            batch_input_shape=(24, X_train.shape[1], X_train.shape[2])))

model.add(keras.layers.Dense(units=1,  activation='sigmoid'))

model.compile(
  loss='binary_crossentropy',
  optimizer = keras.optimizers.Adam(lr=0.0001),
  metrics=['acc']
)

【讨论】:

    【解决方案2】:

    我认为你有两个选择。

    1. 使用基于每日的训练数据集训练模型。在筛选出当天最适合的数据点时,您可以使用重复次数最多的数据点(模式)或平均值。

    2. 以每小时为基础的输出,但预测接下来 24 小时的 24 个输出,并获得这 24 个输出的平均值或模式作为当天的预测。

    最好的方法可能是第二种。它会非常准确。

    【讨论】:

      猜你喜欢
      • 2020-01-07
      • 1970-01-01
      • 2020-02-20
      • 2013-07-13
      • 1970-01-01
      • 2021-05-17
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多