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

标准化变量模型的样本外预测还原:原始尺度恢复方法问询

问题:标准化模型预测值的原始尺度还原方法

我正在使用经标准化(公式$x_i = \frac{{x_i - \text{mean}(x_i)}}{{\text{sd}(x_i)}}$)处理变量的模型开展预测工作,已保存变量的均值与标准差。现需将基于该标准化模型得到的目标变量样本外预测值还原为原始尺度,请问是否应采用样本内的$\text{Mean}(x_i)$和$\text{sd}(x_i)$,通过公式$\text{Re-scaled out-of-sample forecast} = \text{Scaled forecast} \times \text{sd}(x_i) + \text{mean}(x_i)$进行还原?正确的操作流程是什么?


回答

核心结论

是的,必须使用样本内(训练集)的均值和标准差来还原预测值,你提出的还原公式完全正确。绝对不能用测试集或新数据的统计量做逆标准化,否则会引入数据泄露,直接破坏模型的泛化能力。

正确操作流程

  1. 训练阶段:
    • 仅用训练数据拟合特征和目标变量的标准化器,得到训练集的均值、标准差并保存
    • 用标准化后的训练数据训练模型
  2. 预测阶段:
    • 对新输入特征,使用训练集拟合好的特征标准化器做转换(禁止重新拟合新数据)
    • 用训练好的模型得到标准化后的目标变量预测值
    • 使用训练集目标变量的均值和标准差,通过逆标准化公式还原预测值到原始尺度

完整Python示例(含预测与还原)

import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression

# 生成模拟数据
X = np.random.randn(100, 1) * 10 + 50  # 特征
y = 2 * X + 1 + np.random.randn(100, 1) * 5  # 目标变量
X_train, X_test = X[:80], X[80:]
y_train, y_test = y[:80], y[80:]

# 训练阶段:拟合标准化器并训练模型
scaler_X = StandardScaler()
scaler_y = StandardScaler()
X_train_scaled = scaler_X.fit_transform(X_train)
y_train_scaled = scaler_y.fit_transform(y_train)

model = LinearRegression()
model.fit(X_train_scaled, y_train_scaled)

# 预测阶段:标准化输入、预测、还原尺度
# 对测试特征用训练集的标准化器转换
X_test_scaled = scaler_X.transform(X_test)
# 得到标准化后的预测值
y_pred_scaled = model.predict(X_test_scaled)
# 逆标准化还原到原始尺度(内部自动执行你提到的公式)
y_pred_original = scaler_y.inverse_transform(y_pred_scaled)

# 验证尺度匹配
print("还原后的预测值示例:", y_pred_original[:3])
print("真实测试值示例:", y_test[:3])

关键注意点

  • 标准化器的fit方法只能在训练集上调用,预测时仅使用transform方法
  • scaler_y.inverse_transform()内部逻辑就是你给出的还原公式:标准化预测值 × 训练集标准差 + 训练集均值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:33:23