使用每小时时间序列作为输入的LSTM预测每日价值

时间:2019-12-17 18:38:27

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

我正在训练编码如下的单层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的输入是每小时的时间序列。我想根据小时序列预测每日水平的值。
目前,我要做的是生成每小时的预测,然后将第一个预测作为每天的预测。但是我想知道是否有一种方法可以每天生成相同的预测。
谢谢!

2 个答案:

答案 0 :(得分:0)

您有两种选择。

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

  2. 以小时为单位获取输出,但预测接下来24小时的24个输出,并获取这24个的平均值或众数作为当天的预测。

最好的方法可能是第二种方法。会很准确的。

答案 1 :(得分:0)

一个选择是,您也可以给一个名为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']
)