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

LSTM股票预测性能计算及预测结果绘制问题咨询

问题根因

你遇到的维度不匹配问题核心是输出层维度设置错误,同时流程里还有另外几处会影响预测效果的错误,修正方案如下:


1. 输出层维度错误

你当前定义Dense层时用了Dense(X_train.shape[1]),而X_train的第二维是时间步长n_steps=10,所以模型会输出10个值,自然和shape为(998,1)的y_test不匹配。你做的是单步预测,只需要输出下1个时间步的收盘价,所以这里改成Dense(1)即可。

2. 测试集归一化逻辑错误

你对测试集调用了scaler.fit_transform(df_test),相当于用测试集的分布重新训练了归一化器,这属于数据泄露,会导致评估结果虚高。正确做法是只在训练集上fit归一化器,测试集直接用训练好的scaler做transform:

# 修正后的归一化代码
from sklearn.preprocessing import MinMaxScaler    
scaler = MinMaxScaler(feature_range=(0, 1))
df_train_scaled = scaler.fit_transform(df_train)
df_test_scaled = scaler.transform(df_test) # 此处不要重新fit

3. 反归一化步骤变量名错误

你代码里写的predict_test=scaler.inverse_transform(forecast_test),但前面生成的预测结果变量名是predict_test,没有forecast_test这个变量,直接运行会报变量未定义错误,替换为predict_test即可。

4. 可选优化:LSTM激活函数适配

默认的LSTM激活函数是tanh,比relu更适合时序任务,你可以去掉activation='relu'的参数设置,用默认值会获得更稳定的训练效果。


修正后的核心代码

模型结构部分

model = Sequential()
model.add(LSTM(50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(50, return_sequences=False))
model.add(Dense(1)) # 输出维度改为1
model.compile(optimizer='adam', loss='mse')

反归一化部分

y_test = scaler.inverse_transform(y_test)
predict_test = scaler.inverse_transform(predict_test) # 修正变量名

修正后predict_test的shape就会变成(998,1),和y_test维度完全匹配,可以正常计算MSE、绘制对比曲线。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:36:05