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

为何MinMaxScaler会导致线性回归模型效果大幅下降?

问题:MinMaxScaler缩放后线性回归模型效果暴跌的原因?

我在包含分类变量的汽车数据集上应用线性回归模型预测价格,原本希望对特征进行缩放处理,但发现使用MinMaxScaler后,模型的RMSE超过1e15、R2分数低于-1e20,效果远差于未缩放时(RMSE约2700,R2约0.9)。

生成哑变量的代码:

y_target = data['price']
X_data = data.drop(['price'], axis=1)
X_dummies = pd.get_dummies(X_data, dtype=int)

使用缩放的完整代码:

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from time import time
import numpy as np

X_train, X_test, y_train, y_test = train_test_split(
    X_dummies, y_target, test_size=0.3, random_state=int(time()))
X_scaler = MinMaxScaler().fit(X_train)
X_train_scaled = X_scaler.transform(X_train)
X_test_scaled = X_scaler.transform(X_test)

lr_model = LinearRegression()
lr_model.fit(X_train_scaled, y_train)
y_pred = lr_model.predict(X_test_scaled)
print("RMSE:", np.sqrt(mean_squared_error(y_test, y_pred)))
print("R2 Score:", lr_model.score(X_test_scaled, y_test))

原因分析
  • 训练集中存在零方差特征:用pd.get_dummies处理分类变量后,如果训练集里某个分类特征只有单一取值,对应的哑变量列会全为0或全1(方差为0)。MinMaxScaler缩放公式是(x - min)/(max - min),此时分母为0,会导致该特征被缩放成无穷大或NaN。模型训练时这些异常值会让系数疯狂膨胀,最终预测结果完全失真,RMSE和R2指标彻底崩盘。
  • 随机种子导致的划分差异:你用int(time())作为随机种子,每次运行都会生成不同的训练/测试集划分。某次划分刚好让训练集出现零方差特征,就会触发上述问题;而未缩放时,线性回归对零方差特征的鲁棒性更强(该特征系数会趋近于0),所以表现正常。
  • 线性回归无需特征缩放:线性回归基于最小二乘法优化,特征缩放只会改变回归系数的数值大小,不会影响模型的预测精度和评估指标。你未缩放时的模型效果已经很好,完全没必要做MinMaxScaler缩放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:57:48