为何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
相关产品推荐
相关产品推荐

