在机器学习中,标准化(Standardization)和归一化(Normalization)是两种常用的数据预处理技术,它们都属于特征缩放.
目的是调整数据分布或范围,使其更适合模型训练。虽然两者都涉及对数据的缩放,但它们的操作方式和适用场景有所不同。
1. 标准化(Standardization)
操作方式
标准化通过调整数据分布,使其均值为0、标准差为1。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
示例:
假设某特征的原始数据为 [10, 20, 30, 40, 50],计算均值为30,标准差为14.14。
标准化后数据为:
[-1.41, -0.71, 0, 0.71, 1.41]。
为什么要标准化?
- 消除量纲影响:
不同特征之间的量纲可能差异巨大(如年龄范围0-100,收入范围0-100万)。标准化使所有特征处于同一尺度,避免模型被大范围特征主导。 - 加速模型收敛:对梯度下降类算法(如逻辑回归、神经网络),特征尺度统一后,优化过程更稳定高效。
- 适配模型假设:许多模型(如线性回归、支持向量机)假设输入数据服从标准正态分布。
适用场景
- 数据分布近似正态分布(或对称分布)。
- 模型对特征尺度敏感(如线性模型、距离类模型KNN、SVM)。
- 数据中存在异常值时,标准化比归一化更稳健(因为均值和标准差受异常值影响较小)。
2. 归一化(Normalization)
操作方式
归一化将数据缩放到固定范围(通常是 [0, 1] 或 [-1, 1])。
常用方法为最小-最大缩放(Min-Max Scaling):
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data)
示例:
原始数据为 [10, 20, 30, 40, 50],最小值为10,最大值为50。
归一化后数据为:
[0, 0.25, 0.5, 0.75, 1]。
为什么要归一化?
- 统一特征范围:将不同量纲的特征压缩到相同范围(如0-1),便于模型公平对待每个特征。
- 适用于非正态分布:对数据分布没有强假设,尤其适合稀疏数据或分布未知的情况。
- 可视化需求:数据缩放到固定范围后,更易于可视化和解释。
适用场景
- 数据分布未知或明显非正态(如图像像素值0-255)。
- 需要输出在固定范围内的模型(如神经网络输出层用Sigmoid激活时)。
- 树模型(如决策树、随机森林)通常不需要归一化,因为它们不依赖特征尺度。
3. 标准化 vs 归一化对比
| 特性 | 标准化 | 归一化 |
|---|---|---|
| 目标 | 数据分布均值为0,标准差为1 | 数据缩放到固定范围(如0-1) |
| 公式 | ( (x - \mu)/\sigma ) | ( (x - x_{\text{min}})/(x_{\text{max}} - x_{\text{min}}) ) |
| 对异常值的鲁棒性 | 较敏感(均值和标准差受异常值影响) | 非常敏感(极值会压缩正常数据的范围 |
| 适用模型 | 线性模型、距离类模型(SVM、KNN) | 神经网络、需要固定输入范围的模型 |
| 数据分布假设 | 无严格假设,但对正态分布更友好 | 无分布假设 |
4. 为什么需要这些操作?
-
提升模型性能:
例如,在逻辑回归中,未标准化的特征可能导致梯度下降收敛缓慢或震荡;在KNN中,大范围特征会主导距离计算。 -
增强模型鲁棒性:
消除量纲差异后,模型权重可更公平地反映特征重要性。 -
加速训练过程:
标准化后的数据梯度下降路径更平滑,迭代次数减少。 -
适配算法需求:
如PCA(主成分分析)依赖方差计算,标准化能确保各特征方差可比。
5. 实际应用注意事项
-
划分数据集后再操作:
应先拆分训练集和测试集,仅用训练集计算均值和标准差(或最小/最大值),再将其应用于测试集,避免数据泄漏(Data Leakage)。 -
树模型通常不需要:
树模型(如随机森林、XGBoost)基于特征划分而非距离计算,因此对特征尺度不敏感。 -
离散特征的例外:
二元特征(0/1)或计数特征(如点击次数)若范围差异不大,可不处理;但若与其他特征量纲差异显著(如收入 vs 点击次数),仍需缩放。
示例场景
- 图像处理:
归一化像素值到[0,1](如除以255),便于神经网络训练。 - 金融风控:
标准化收入、负债等连续特征,消除量纲差异。 - 自然语言处理:
对TF-IDF值进行归一化,避免高频词主导模型。
总结
标准化和归一化是数据预处理的核心步骤,通过调整数据分布或范围,使模型更高效、稳定地学习规律。
选择哪种方法需结合数据分布、模型类型及业务需求,实践中常通过交叉验证对比效果。