1. 简介

在本教程中,我们将探讨不同的特征缩放方法如何影响线性回归模型的预测能力

我们会先介绍两种常用的特征缩放方法:归一化(Normalization)标准化(Standardization),然后将它们应用到一个示例数据集上,最后对比它们在模型训练中的表现。

✅ 特别提醒:虽然线性回归本身对特征缩放不敏感,但在一些实际场景中(如使用正则化的线性模型),特征缩放可能会对模型表现产生显著影响。


2. 特征缩放简介

特征缩放(Feature Scaling)是指将不同量纲的特征值映射到统一的数值范围内,以避免某些特征因数值范围大而对模型造成不必要的影响。

⚠️ 对于像 KNN、SVM、逻辑回归(尤其是带正则化)这类依赖特征之间距离或梯度的算法,特征缩放非常重要。但对于像决策树这样的规则型算法,影响不大。

2.1 归一化(Normalization)

又称最小-最大缩放(Min-Max Scaling),将每个特征的值缩放到 [0, 1] 区间内:

$$ z = \frac{x - \min(x)}{\max(x) - \min(x)} $$

✅ 适用于数据分布不均、但没有明显异常值的场景。

2.2 标准化(Standardization)

又称 Z-score 缩放,将特征转换为均值为 0,标准差为 1 的分布:

$$ z = \frac{x - \mu}{\sigma} $$

✅ 更适合数据中存在异常值或分布偏态明显的场景。

✅ 一般情况下,标准化比归一化更常用,尤其是在深度学习和回归模型中。


3. Python 中的特征缩放示例

我们以 Concrete Compressive Strength 数据集为例,来展示特征缩放的效果。

该数据集包含 8 个数值型特征(如水泥、水、粉煤灰等成分含量)和一个目标变量(混凝土抗压强度),共 1030 条记录。

我们首先绘制原始数据的箱型图(Boxplot):

concrete original

可以看到,各特征的取值范围差异很大,且部分特征存在明显的离群点。

3.1 归一化处理

使用 MinMaxScaler 对数据进行归一化:

from sklearn.preprocessing import MinMaxScaler

min_max_scaler = MinMaxScaler().fit(X_train)  # 仅用训练集拟合
X_norm = min_max_scaler.transform(X)  # 对整个数据集进行转换

归一化后的箱型图如下:

concrete normalized

✅ 所有特征都被压缩到 [0, 1] 范围内
❌ 但离群值的存在可能导致大部分数据被压缩到一个更小的区间,丢失了部分信息

3.2 标准化处理

使用 StandardScaler 对数据进行标准化:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler().fit(X_train)  # 仅用训练集拟合
X_std = scaler.transform(X)  # 对整个数据集进行转换

标准化后的箱型图如下:

concrete std

✅ 保留了离群值的信息
✅ 分布更集中,适合后续建模

3.3 归一化 vs 标准化对比

我们选取第 4 和第 5 个特征进行可视化对比:

concrete norm vs std

  • 蓝色点:原始数据
  • 红色点:标准化后的数据
  • 绿色点:归一化后的数据

可以看出,归一化将数据点压缩得更紧密,而标准化保留了更多原始分布的结构信息


4. 线性回归建模

接下来,我们使用线性回归模型来训练原始数据、归一化数据和标准化数据,并比较它们的表现。

4.1 模型训练代码

from sklearn import linear_model
from sklearn.metrics import mean_squared_error, r2_score

# 创建线性回归模型
regr = linear_model.LinearRegression()

# 训练模型
regr.fit(X_train, y_train)

# 预测
y_pred = regr.predict(X_test)

4.2 输出模型参数

print('Intercept: \n', regr.intercept_)
print('Coefficients: \n', regr.coef_)

输出示例:

Intercept: 
 -59.61868838556004
Coefficients: 
 [ 0.12546445  0.11679076  0.09001377 -0.09057971  0.39649115  0.02810985
  0.03637553  0.1139419 ]

4.3 性能评估指标

print('MSE: %.2f' % mean_squared_error(y_test, y_pred))
print('R^2: %.2f' % r2_score(y_test, y_pred))

输出示例:

MSE: 109.75
R^2: 0.59

4.4 不同缩放方法的对比结果

数据集类型 MSE
原始数据 109.75 0.59
归一化后的数据 109.75 0.59
标准化后的数据 109.75 0.59

✅ 线性回归本身对特征缩放不敏感,因此三种数据的模型性能一致
⚠️ 但如果是使用正则化的线性模型(如 Ridge、Lasso),特征缩放会影响模型表现


5. 结论

本文我们介绍了两种常见的特征缩放方法:归一化标准化,并通过 Concrete 数据集展示了它们在实际数据上的应用。

我们还训练了线性回归模型,并发现:

  • 特征缩放对线性回归模型的预测性能没有提升
  • 但这并不意味着特征缩放无用
  • 不同数据集和模型对特征缩放的敏感程度不同,应根据实际情况选择是否使用

✅ 小结建议:

  • 对于线性回归模型,特征缩放不是必须的
  • 但对于正则化模型、梯度下降类模型(如神经网络),特征缩放非常关键
  • 推荐优先使用标准化(StandardScaler)

📌 参考资料


原始标题:Normalization vs Standardization in Linear Regression