如何在python中使用LSTM预测每120分钟的值

数据挖掘 Python 时间序列 lstm
2021-09-15 18:54:49

我想使用 LSTM 模型连续每 120 分钟预测一次价值。在这里,我编写了预测代码。但我没有得到正确的预测值。从开始时间开始,我需要每 120 分钟预测一次值。

model = Sequential()
model.add(LSTM(4, return_sequences=True,input_shape=(x_train_n.shape[2])))  
# returns a sequence of vectors of dimension 32
model.add(LSTM(8, return_sequences=True))  # returns a sequence of vectors 
of dimension 32
model.add(LSTM(8))  # return a single vector of dimension 32
model.add(Dense(1))
batchsize = 1
model.compile(loss="mean_squared_error",optimizer="adam")
#model.compile(loss='mean_squared_error', optimizer='adadelta',metrics= ['accuracy'])
history = model.fit(x_train_n,y_train_n, batch_size = batchsize, 
nb_epoch=30,validation_data=(x_test_n, y_test_n),shuffle =True)\
model.reset_states()
pred1=model.predict(x_test_n)
pred2= model.predict(x_train_n)

#end of the sequences
model.reset_states()

#data=pd.DataFrame(fit1.predict(x_test))

pred1 = scaler_y.inverse_transform(np.array(pred1).reshape ((len(pred1), 1)))
real_test = scaler_y.inverse_transform(np.array(y_test_n).reshape 
((len(y_test_n), 1))).astype(int)
real = scaler_y.inverse_transform(np.array(y_train_n).reshape 
((len(y_train_n), 1))).astype(int)
pred1 = pred1[:,0]
real_test = real_test[:,0]

#predition in every 120 minutes

sequence_timestep = 120
last_sequence_train = x_train_n[-1]
pred1 = []
def sequence_constructor():
   if len(pred1) >= sequence_timestep:
     new_sequence = pred1[-dimension_seq:]
   else:
      splitter = sequence_timestep - len(pred1)
      part_1 = last_sequence_train[-splitter:]
      new_sequence = np.append(part_1,pred1) #Concatenate 2 list
  new_sequence = np.array(new_sequence)
  return new_sequence  
for i in range(1440):
new_sequence = sequence_constructor()
new_prediction = model.predict(new_sequence)
pred1.append(new_prediction)  

当我编写此代码时,错误即将到来,并且无法正确预测值。在这里,我也上传了我的 csv 文件,并写了我想要做的事情来预测我的价值。在我的两个输入中的我的 csv 文件 g 和 p 中。当每 120 分钟的预测值将成为我的 LSTM 的下一个输入时。根据我的 csv 文件 10/3/2018 开始时间 = 上午 6:00:00,预测每 120 分钟的 g 值。然后第二天的开始时间又是早上 6:00:00,从那个时间开始,每 120 分钟再次出现新的预测值。

在此处输入图像描述

1个回答

如果您想准确预测特定时间戳,并且您不想一次又一次地训练模型,那么您可以在 python 文件上运行 crontab 来加载模型并预测值,cron 作业从 6 开始AM & 每 120 分钟再次执行一次

即使您有连续不断的数据流,您也可以在这 120 分钟之间重新训练模型。