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

多元LSTM模型预测值如何执行inverse_transform逆变换还原?

问题原因及解决方案

错误根因说明

  • 第一次反归一化报错:你初始化MinMaxScaler时用的是包含5个特征的训练集拟合的,scaler默认要求输入反归一化的数据特征数必须和拟合时的特征数一致,你直接输入形状为(1000,1)的预测值,特征数不匹配,所以触发维度错误。
  • 第二次reshape报错:你的x_test形状为(1000, 50, 5),总元素数为1000505=250000,你尝试直接reshape为(1000,5)总元素数仅为5000,维度完全不匹配,自然报错。你参考的示例代码逻辑是需要取每个样本最后一个时间步的特征,而非直接对整个三维数组reshape。

正确实现代码

import numpy as np
from sklearn.metrics import mean_squared_error
from math import sqrt

# 1. 得到预测结果,形状为(1000, 1)
yhat = model.predict(x_test)
# 2. 提取x_test每个样本最后一个时间步的所有5个特征,形状变为(1000,5)
test_X_last = x_test[:, -1, :]
# 3. 拼接预测值和除目标特征外的其余4个特征,得到符合scaler要求的5维输入
inv_yhat = np.concatenate((yhat, test_X_last[:, 1:]), axis=1)
# 4. 反归一化后提取第一列即目标特征的真实预测值
inv_yhat = scaler.inverse_transform(inv_yhat)
inv_yhat = inv_yhat[:,0]

# 5. 对真实值做同样的反归一化处理
test_y = y_test.reshape((len(y_test), 1))
inv_y = np.concatenate((test_y, test_X_last[:, 1:]), axis=1)
inv_y = scaler.inverse_transform(inv_y)
inv_y = inv_y[:,0]

# 6. 计算RMSE
rmse = sqrt(mean_squared_error(inv_y, inv_yhat))
print('Test RMSE: %.3f' % rmse)

注意事项

如果你的目标特征不是第0列,只需要调整拼接时的列索引、以及反归一化后提取的列索引即可,保证拼接后的数据特征顺序和拟合scaler时的特征顺序完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:24:01