使用LSTM一步预测时间序列

时间:2020-04-08 20:56:49

标签: python tensorflow keras time-series prediction

我想使用LSTM预测股票价格。我已经成功训练了模型并保存了模型。现在,将其重新加载,如何使用model.predict()来预测数据集中没有对应值的股票价格,因为目前我只能“预测”数据集中已经存在的已知值。

Senario:我的模型已经过训练(具有足够的准确性),并且保存了它。我想应用我的模型(load_model())。我的时间步长设置为30天,因此我已经以适当的格式加载了30天的数据(例如3月9日至4月8日),但是显然我没有“预期的”输出。我将如何使用model.predict()来预测未来价值。还是我想念什么?

enter image description here

上图是当我使用model.predict()来预测数据集中已经存在的价格时(数据集具有1150个数据点)。该图在第1150天结束。我如何预计第1151天?

模型摘要

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (50, 60, 100)             42400     
_________________________________________________________________
dropout_1 (Dropout)          (50, 60, 100)             0         
_________________________________________________________________
lstm_2 (LSTM)                (50, 60)                  38640     
_________________________________________________________________
dropout_2 (Dropout)          (50, 60)                  0         
_________________________________________________________________
dense_1 (Dense)              (50, 20)                  1220      
_________________________________________________________________
dense_2 (Dense)              (50, 1)                   21        
=================================================================
Total params: 82,281
Trainable params: 82,281
Non-trainable params: 0

1 个答案:

答案 0 :(得分:1)

因此,假设您已经定义,训练并保存了如下模型:

# define model
model = Sequential()
model.add(LSTM(...))

# compile model
model.compile(...)

# fit model
model.fit(...)

# save model
model.save('lstm_model.h5')

要使用该模型预测新值,请加载模型并使用新的一组输入运行预测。例如,假设您基于X预测Y。它看起来类似于以下内容:

from keras.models import load_model
# load model
model = load_model('lstm_model.h5')

# define input
X = ...

# make predictions
yhat = model.predict(X, verbose=0)
print(yhat) 

您似乎正在处理序列回归问题,您在其中定义了时间步长,而LSTM预测了该值。因此,输入X只是进行预测yhat所必需的数据/序列。它不包括之前的所有训练数据。例如,如果您输入的训练LSTM在1...1500之间,则X将是1501

请记住,也要对推理数据使用您在训练数据上使用的任何数据准备过程。