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

LSTM预测代码中testPredict[-1]是否为未来值预测结果?

回答

核心结论

直接回应你的两个疑问:

  • testPredict = model.predict(Xtest)返回的不是序列的最后一个值,是测试集全部时序样本的预测结果数组,长度和你构造的测试集样本数一致。
  • 逆缩放后得到的last_value = testPredict[-1]不是未来预测结果,只是测试集范围内最后一个历史时间点的Close价格拟合值,属于对已知数据的回测输出,不涉及未来时间的外推。

代码逻辑拆解

你的数据集构造用的是典型的单步滑动窗口逻辑:

  1. 设定窗口大小n=24,即每一条样本的输入是连续24小时的Close、log_returns两个特征,预测目标是这24小时窗口结束后紧邻的下一小时的Close价格。
  2. 你构造Xtest时,所有输入窗口全都是从已下载的BTC历史数据的测试集切片里截取的,所有样本对应的预测目标点全都是已经存在的历史时间点,没有超出你拉取的20周60分钟数据的时间范围。
  3. testPredict的返回结果和Xtest的样本按时间顺序一一对应,最后一个元素testPredict[-1]对应的输入是测试集最后24个历史点的特征,输出的是测试集最后一个已知时间点的Close预测值,本质是模型对历史数据的拟合值,不是未来值。

单步未来预测的正确实现

如果要得到下一个未知小时的Close价格预测,需要按如下步骤构造输入:

  • 取整个预处理后数据集的最后24条[Close, log_returns]特征
  • 将特征reshape成模型要求的输入形状(1, 24, 2)
  • 调用model.predict()得到缩放后的预测值
  • 按照你现有逻辑给预测值补零凑成和scaler匹配的特征维度,调用scaler.inverse_transform()还原,得到的才是未来第一个时间点的Close预测值。

额外代码问题提醒

你代码里计算训练、测试RMSE的逻辑存在错误:
当前代码取[x[0][0] for x in Xtrain]作为真实值,这个值是每个输入窗口第一个时间点的Close价格,和模型预测的“窗口后第一个时间点的Close价格”完全不对应,计算出的RMSE没有参考意义,正确的真实值应该是做对应逆变换后的ytrain、ytest数组。


内容的提问来源于stack exchange,提问作者PetersServer1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.04 16:15:41