人工智能基础知识笔记九:数据规范化技巧
1、简介
Data Normalization Techniques 中文翻译成 数据标准化技术,它是一系列数据预处理方法,用于将数据集中不同特征(列)的数值转换到一个统一的尺度或范围内,或者调整其分布特性。数据标准化将特征转换为通用尺度,而不会失真。它的主要目的是解决以下问题:
- 量纲差异 (Scale Differences):不同特征的单位和取值范围可能相差巨大(比如年龄是 0-100,收入是 0-1000000)。这会导致:
-
依赖于距离计算的算法(如 KNN、K-Means、SVM)被取值范围大的特征所主导。
-
基于梯度的优化算法(如神经网络、逻辑回归)收敛速度慢或不稳定。
-
- 分布特性:某些算法假设数据符合特定的分布(如高斯分布),标准化可以帮助满足或接近这些假设。
核心目标: 在保留数据原有信息(如相对大小、排序、分布形状部分方法保留)的同时,消除量纲差异带来的不良影响,提高模型的性能、稳定性和可解释性。
常见的数据标准化技术有:Min-Max 缩放、Z-Score 标准化 、Max-Abs 缩放、鲁棒标准化 (Robust Scaling)、单位向量归一化 (Unit Vector Scaling / L2 Normalization)等。
2、Max-Abs (Scaling)缩放
Max-Abs Scaling 是一种数据预处理技术,用于将数值特征(特征)的每个值缩放到范围 [-1, 1] 之间。它通过将每个特征中的每个值除以该特征的绝对值最大的那个值来实现。
2.1、计算步骤:
对于一个特征列(假设有 n
个样本):
-
找到该特征的绝对值最大值(
max_abs
):计算该列中所有数值的绝对值,然后找出这些绝对值中的最大值。max_abs = max(|x₁|, |x₂|, ..., |xₙ|)
-
缩放每个值:将该列中的每一个值(
xᵢ
)除以这个max_abs
。x_scaledᵢ = xᵢ / max_abs
2.2、关键特性:
-
范围: 结果值严格落在 [-1, 1] 区间内。
-
保留符号: 原始数据中的正负号(符号)被完全保留下来。正值缩放到 (0, 1],负值缩放到 [-1, 0),零值仍然是零。
-
保留稀疏性: 如果原始数据中有很多零(稀疏数据),缩放后这些零仍然保持为零。
-
不移动中心: 与 Min-Max Scaling 不同,Max-Abs Scaling 不会移动数据的中心点(比如均值或中位数)。它只是根据数据的最大绝对值进行缩放。如果数据原本是以零为中心的,缩放后仍然以零为中心。
-
对异常值敏感: 如果某个特征中存在一个绝对值非常大的异常值,那么这个异常值就会成为
max_abs
。缩放后,其他所有值都会被压缩到一个非常小的区间(接近零),异常值本身会变成 ±1。这可能会削弱其他数据的信息量。
2.3、适用场景
当你需要将数据缩放到一个有限范围([-1, 1]),并且同时满足以下一个或多个条件时,Max-Abs Scaling 是一个不错的选择:
-
数据已经(或应该)以零为中心: 例如,表示差异、变化量、收益率等数据。
-
需要保留原始数据的符号(正负): 负值代表损失、低温、亏损等,正值代表收益、高温、盈利等,这种符号信息对模型很重要。
-
数据是稀疏的(有很多零值): Max-Abs Scaling 能完美保留这些零值。
-
不想移动数据的中心点: 与 Min-Max Scaling 不同,它不会因为减去最小值而改变数据的分布中心(如均值、中位数)。
3、Min-Max (Scaling)缩放
Min-Max Scaling(最小-最大缩放) 是一种数据标准化技术,通过线性变换将原始数据等比例压缩到指定的数值范围(通常是 [0, 1] 或 [-1, 1])。
3.1、计算公式
3.2、关键特性:
-
固定范围:结果严格落在指定区间(如 [0, 1])。
-
保留原始分布形态:不改变数据间的相对关系(仅缩放位置和比例)。
-
对异常值敏感:若存在极大或极小异常值,会导致正常数据被压缩到狭窄区间
3.3、适用场景
-
需要固定范围的数据:如图像像素值(必须为 [0, 255] 或 [0, 1])。
-
神经网络输入层:要求输入值在统一区间(如 [0, 1])以加速梯度下降收敛。
-
距离敏感型算法:如 KNN、SVM(确保所有特征权重相等)。
-
💡 重要提示:若数据存在异常值,优先选择 Z-Score 标准化或 Robust Scaling(抗异常值缩放)
4、 Z-Score 标准化
Z-Score 标准化(又称标准差标准化)是一种数据预处理技术,通过将数据转换为均值为 0、标准差为 1 的标准正态分布(或接近)。它不改变数据的原始分布形态,但消除量纲差异,使不同特征可比。
4.1、计算公式
4.2、关键特性
-
中心化 + 缩放:
-
减去均值 (μ) → 数据中心移动到 0。
-
除以标准差 (σ) → 数据波动范围统一为 1 个单位标准差。
-
-
保留分布形态:不改变原始数据的偏度、峰度等分布特征(仅平移和缩放)。
-
抗异常值:相比 Min-Max 缩放,受极端值影响较小(标准差对异常值敏感度低于极差)。
-
经验法则:标准化后,约 68% 数据落在 [−1,1],95% 落在 [−2,2],99.7% 落在 [−3,3](若数据服从正态分布)。
4.3、适用场景
-
跨特征比较:
(例如:身高(cm)和体重(kg)标准化后可直接对比重要性)。 -
假设数据服从高斯分布的算法:
-
线性回归、逻辑回归、SVM(使用 RBF 核)、PCA 等。
-
-
梯度下降优化:
-
加速神经网络、线性模型的收敛速度。
-
-
聚类分析(如 K-Means):
-
确保所有特征在距离计算中权重相等。
-
5、 Robust Scaling 鲁棒缩放
Robust Scaling(鲁棒缩放) 是一种针对异常值具有强鲁棒性的数据标准化技术。它使用中位数(Median) 和四分位距(IQR) 替代均值与标准差,避免异常值对数据转换造成扭曲。
5.1、计算公式
5.2、关键特性
-
抗异常值:
-
中位数(Median)不受极端值影响(均值会被异常值拉偏)。
-
IQR = Q3−Q1Q3−Q1 仅反映中间50%数据的离散度,忽略异常值。
-
-
保留主体数据分布:对非异常值区间的缩放更合理。
-
结果无固定范围:转换后数据集中在0附近,但范围不固定(通常大部分值在 [−3,3][−3,3] 内)。
5.3、适用场景
数据包含显著异常值、非正态分布(偏态分布)、需要稳健的预处理时。
6、 单位向量归一化 (Unit Vector Scaling / L2 Normalization)
单位向量归一化(Unit Vector Scaling / L2 Normalization) 是一种按样本(行)进行缩放的技术,它将每个样本的特征向量转化为长度为1的单位向量,从而保留特征间的比例关系,但忽略原始数值的绝对大小。其核心是方向重于幅度,适用于依赖角度相似性的场景(如余弦相似度计算)。
6.1、计算公式
6.2、关键特性
-
保留特征比例:
缩放后,特征间的相对大小比例不变(如原始向量中 x1:x2=2:3x1:x2=2:3,归一化后仍为 2:32:3)。 -
方向信息优先:
强调特征间的夹角关系(如余弦相似度),忽略绝对数值差异。
6.3、适用场景
文本分类(TF-IDF向量)、图像特征匹配、基于余弦相似度的推荐系统。
7、总结
方法 | 优点 | 缺点 | 典型应用场景 |
Min-Max | 范围固定 ([0,1]),直观 | 对异常值敏感 | 图像像素值,已知边界且无异常值,需要固定范围 |
Z-Score | 对异常值较鲁棒,中心化数据 | 范围不固定 | 最通用:PCA, 聚类, SVM, 回归, 神经网络等 |
Max-Abs | 保留符号和零点,适合稀疏数据 | 对极大绝对值异常值敏感 | 以零为中心的数据,稀疏数据 (如 TF-IDF) |
鲁棒缩放 | 对异常值高度鲁棒 | 结果分布可能不直观 | 包含显著异常值的数据 |
单位向量(L2) | 样本向量模长为1,适合余弦相似度 | 改变了特征尺度关系 | 文本挖掘,基于余弦相似度的推荐/聚类 |
关键考虑因素:
-
数据特性: 是否存在异常值?是否稀疏?分布如何?
-
算法需求:
-
距离/相似度计算 (KNN, K-Means, SVM RBF核):Z-Score, Min-Max, 鲁棒缩放, 通常更好。
-
梯度下降优化 (神经网络, 线性模型):Z-Score 最常用(中心化+稳定梯度)。
-
树形模型 (决策树, 随机森林, XGBoost):通常不需要标准化,因为它们基于特征划分而非距离。
-
基于角度的算法 (余弦相似度):L2 归一化是必需的。
-
-
模型解释: 有时需要保持特征在可解释的范围内(如 Min-Max 到 [0,1])。
代码示例:
# Import necessary libraries
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler, StandardScaler, MaxAbsScaler# Create a sample dataset with varying scales
data = {'Feature_1': [100, 200, 300, 400, 500], # Large range'Feature_2': [1, 2, 3, 4, 5], # Small range'Feature_3': [-50, -25, 0, 25, 50] # Negative to positive
}df = pd.DataFrame(data)
print("Original Data:\n", df)# ---- Min-Max Scaling ----
minmax_scaler = MinMaxScaler()
df_minmax = pd.DataFrame(minmax_scaler.fit_transform(df), columns=df.columns)
print("\nMin-Max Scaled Data:\n", df_minmax)# ---- Z-score Standardization ----
standard_scaler = StandardScaler()
df_standard = pd.DataFrame(standard_scaler.fit_transform(df), columns=df.columns)
print("\nZ-Score Standardized Data:\n", df_standard)# ---- Max-Abs Scaling ----
maxabs_scaler = MaxAbsScaler()
df_maxabs = pd.DataFrame(maxabs_scaler.fit_transform(df), columns=df.columns)
print("\nMax-Abs Scaled Data:\n", df_maxabs)
总结: 数据标准化是数据预处理的关键步骤,能显著提升许多机器学习模型的性能和稳定性。Z-Score 标准化 (Standardization) 是最通用和广泛推荐的方法。理解不同技术的原理和适用场景,根据你的具体数据和模型需求进行选择至关重要。在实践中,经常需要通过实验(如交叉验证)来确定哪种标准化方法效果最好。