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

Python实现LSTM时间序列预测时预测集输出维度重塑问题求解

你现在用的是seq2seq结构的LSTM,因为加了RepeatVector和TimeDistributed层,所以模型输出的是每个输入序列对应的完整长度为30的序列,所以维度是(样本数, 30, 1),你直接用reshape(-1,1)会把所有30个时间步的数值都展开,自然不符合预期。

正确处理步骤

  1. 提取单步预测值
    你构造标签时,每个输入序列对应的是序列结束后的下一个时间步的数值,所以只需要取每个预测样本的最后一个时间步的输出即可:
# 处理训练集预测:取每个样本最后一个时间步的结果,形状变为 (1023, 1)
trainPredict = trainPredict[:, -1, :]
# 同理处理测试集预测,处理后形状为 (测试样本数, 1)
testPredict = testPredict[:, -1, :]

如果你只是需要和训练集标签ytrain对齐的预测值来算精度,不需要补全其他位置,上面得到的trainPredict就已经是符合要求的二维数组,直接和ytrain计算指标即可。

  1. 补全前序缺失值拼接得到全量预测数组
    你需要的总长度1203 = 初始序列长度30 + 训练集预测样本数1023 + 测试集预测样本数150,所以要把前30个没有预测值的位置补齐,再拼接所有结果:
import numpy as np

# 前30个位置无预测值,可填充nan或者原始真实值,这里以填充nan为例
train_padding = np.full((seq_size, 1), np.nan)
# 拼接训练集部分:填充区 + 训练预测结果,形状为 (30 + 1023, 1) = (1053, 1)
full_train_predict = np.concatenate([train_padding, trainPredict], axis=0)
# 拼接全量预测结果:训练集全预测 + 测试集预测,形状为 (1053 + 150, 1) = (1203, 1)
full_predict = np.concatenate([full_train_predict, testPredict], axis=0)
  1. (可选)反归一化操作
    如果需要把预测值转回原始数值范围,直接把上面得到的二维数组传入scaler的反归一化方法即可:
full_predict_inv = scaler.inverse_transform(full_predict)

内容的提问来源于stack exchange,提问作者Giuseppe Luvarà

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:45:01