我正在尝试使用 LSTM 进行时间序列预测。数据每分钟流一次,但我想提前一个小时预测。我可以想到两种方法来解决这个问题:
- 将数据压缩为每小时数据,将每 60 分钟时间段的平均值作为一个数据点。
- 对于每个
(X, y)训练数据对,让X是从t - 120到的时间序列t - 60,让是从到y的时间序列。强制 LSTM 提前 60 个时间步进行预测,并将其作为预测。t - 60ty[-1]
有没有解决这个问题的最佳实践?
我正在尝试使用 LSTM 进行时间序列预测。数据每分钟流一次,但我想提前一个小时预测。我可以想到两种方法来解决这个问题:
(X, y)训练数据对,让X是从t - 120到的时间序列t - 60,让是从到y的时间序列。强制 LSTM 提前 60 个时间步进行预测,并将其作为预测。t - 60ty[-1]有没有解决这个问题的最佳实践?
有不同的方法
递归策略
一对多模型
prediction(t+1) = model(obs(t-1), obs(t-2), ..., obs(t-n))
prediction(t+2) = model(prediction(t+1), obs(t-1), ..., obs(t-n))
直接战略
多个多对一模型
prediction(t+1) = model1(obs(t-1), obs(t-2), ..., obs(t-n))
prediction(t+2) = model2(obs(t-2), obs(t-3), ..., obs(t-n))`
多输出策略
一对多模型
prediction(t+1), prediction(t+2) = model(obs(t-1), obs(t-2), ..., obs(t-n))`
混合策略
参考:多步时间序列预测
train = [[t-120,t-199...t,t+1...t+60],[...],[...]]
# fit an LSTM network to training data
def fit_lstm(train, n_lag, n_seq, n_batch, nb_epoch, n_neurons):
# reshape training into [samples, timesteps, features]
X, y = train[:, 0:n_lag], train[:, n_lag:]
X = X.reshape(X.shape[0], 1, X.shape[1])
# design network
model = Sequential()
model.add(LSTM(n_neurons, batch_input_shape=(n_batch, X.shape[1], X.shape[2]), stateful=True))
model.add(Dense(y.shape[1]))
model.compile(loss='mean_squared_error', optimizer='adam')
# fit network
for i in range(nb_epoch):
model.fit(X, y, epochs=1, batch_size=n_batch, verbose=0, shuffle=False)
model.reset_states()
return model