【问题标题】:One step prediction of time series using LSTM使用 LSTM 一步预测时间序列
【发布时间】:2020-07-21 09:47:06
【问题描述】:

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

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

上图是我使用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

【问题讨论】:

  • 需要更多信息。如果您在训练数据上的准确率很高,但在非训练数据上的准确率很低,那么这听起来像是过拟合。如果您想引入一个新类别,您可能需要重新训练网络
  • 我的模型已经过训练(具有足够高的准确性)并且我已经保存了它。我已经加载了我的模型,现在我想应用我的模型。我的时间步长设置为 30 天,因此我以适当的格式加载了 30 天的数据(例如 3 月 9 日 - 4 月 8 日),但显然我没有“预期”的输出。我将如何使用 model.predict() 来预测未来价值。还是我错过了什么?
  • 没有看到模型我只能推测。您是否正确解码返回序列。您是否对相关输入数据进行标记/热编码。是的,predict() 或 predict_sequence() 使用经过训练或加载的模型运行推理。
  • 我已经更新了我的帖子。希望这能澄清我的问题

标签: python tensorflow keras time-series prediction


【解决方案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

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

【讨论】:

猜你喜欢
  • 2021-09-08
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多