You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于RNN的LSTM时间序列预测方法及股票预测代码疑问

LSTM时间序列预测入门与代码疑惑解答

一、LSTM做时间序列预测的基本步骤

  • 数据预处理:对时间序列数据做归一化(LSTM对数据尺度敏感),然后构造输入输出对——比如用前N天的历史数据作为输入x,第N+1天的数据作为对应输出y。
  • 划分数据集:时间序列不能随机拆分,必须按时间顺序划分训练集和测试集,保证模型学习的是历史到未来的规律。
  • 搭建LSTM模型:根据任务需求定义网络结构,比如设置合适的LSTM层数、神经元数量,搭配输出层完成预测任务。
  • 训练模型:用训练集的输入输出对拟合模型,让模型学习时间序列的内在规律。
  • 验证/预测:要么用测试集验证模型泛化能力,要么基于历史数据预测未来未知值。

二、教程代码的作用:模型验证而非未来预测

你提到的这段代码没有错误,只是它的作用是验证模型效果,不是预测未来未知值:

  1. 先明确x_test和y_test的定义:在时间序列数据集里,x_test是测试集的输入序列(比如前60天的股价),y_test是这个输入序列对应的真实目标值(第61天的股价)。
  2. model.predict(x_test)是让模型根据x_test的输入序列,预测对应的目标值,再和真实的y_test对比——这是评估模型在未见过的数据上预测能力的标准操作,用来判断模型是否过拟合、泛化能力好不好。
  3. 后面的绘图代码是把预测值和真实值可视化,直观展示模型的预测精度,属于模型验证环节的常规步骤。

三、如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:54:18