基于RNN的LSTM时间序列预测方法及股票预测代码疑问
LSTM时间序列预测入门与代码疑惑解答
一、LSTM做时间序列预测的基本步骤
- 数据预处理:对时间序列数据做归一化(LSTM对数据尺度敏感),然后构造输入输出对——比如用前N天的历史数据作为输入
x,第N+1天的数据作为对应输出y。 - 划分数据集:时间序列不能随机拆分,必须按时间顺序划分训练集和测试集,保证模型学习的是历史到未来的规律。
- 搭建LSTM模型:根据任务需求定义网络结构,比如设置合适的LSTM层数、神经元数量,搭配输出层完成预测任务。
- 训练模型:用训练集的输入输出对拟合模型,让模型学习时间序列的内在规律。
- 验证/预测:要么用测试集验证模型泛化能力,要么基于历史数据预测未来未知值。
二、教程代码的作用:模型验证而非未来预测
你提到的这段代码没有错误,只是它的作用是验证模型效果,不是预测未来未知值:
- 先明确
x_test和y_test的定义:在时间序列数据集里,x_test是测试集的输入序列(比如前60天的股价),y_test是这个输入序列对应的真实目标值(第61天的股价)。 model.predict(x_test)是让模型根据x_test的输入序列,预测对应的目标值,再和真实的y_test对比——这是评估模型在未见过的数据上预测能力的标准操作,用来判断模型是否过拟合、泛化能力好不好。- 后面的绘图代码是把预测值和真实值可视化,直观展示模型的预测精度,属于模型验证环节的常规步骤。
三、如何用LSTM做真正的未来值预测
如果要预测未来未知的股价,不能用x_test,而是要基于最新的历史数据循环预测:
- 先用全部历史数据训练好模型。
- 取最近N天的历史数据作为初始输入序列(比如最后60天的股价)。
- 循环预测:用模型输出下一天的股价,把这个预测值加入输入序列末尾,同时去掉序列最前面的旧数据,形成新的输入序列,再预测下下一天,以此类推得到未来多天的结果。
简单的伪代码示例:
# 预测未来7天股价 future_days = 7 # 取训练集最后一个完整输入序列(假设序列长度是60) last_sequence = x_train[-1] future_predictions = [] for _ in range(future_days): # 模型预测 pred = model.predict(last_sequence.reshape(1, -1, 1))[0][0] future_predictions.append(pred) # 更新输入序列:移除最旧的一天数据,加入刚预测的结果 last_sequence = np.append(last_sequence[1:], pred) # 反归一化得到真实股价数值 future_predictions = scaler.inverse_transform(np.array(future_predictions).reshape(-1, 1))
内容的提问来源于stack exchange,提问作者Anwesa Roy
相关产品推荐
相关产品推荐

