标准化(Standardization)是将数据按比例缩放,使其具有特定的统计特征,通常是将数据的均值调整为0,标准差调整为1。标准化是一种常见的数据预处理技术,特别是在进行机器学习时,通常会使用标准化来确保各个特征(变量)的尺度一致,以避免某些特征对模型产生过大或过小的影响。
标准化的目标
通过标准化,数据的每个特征都会转换成零均值和单位方差的标准正态分布(或接近标准正态分布),使得所有特征的尺度一致,避免一些特征在模型训练中占主导地位。
标准化公式:
标准化是通过以下公式进行的:
[
z = \frac{x - \mu}{\sigma}
]
其中:
- ( x ) 是原始数据点,
- ( \mu ) 是该数据集的均值,
- ( \sigma ) 是该数据集的标准差,
- ( z ) 是标准化后的数据点。
步骤:
- 计算均值((\mu)):数据集中的所有值的平均值。
- 计算标准差((\sigma)):数据集的标准差,用来度量数据的分布范围。
- 标准化:每个数据点减去均值,并除以标准差,从而将数据转换成标准正态分布。
示例:
假设我们有一个数据集:[ 10, 20, 30, 40, 50 ]
-
计算均值:
[
\mu = \frac{10 + 20 + 30 + 40 + 50}{5} = 30
] -
计算标准差:
[
\sigma = \sqrt{\frac{(10 - 30)^2 + (20 - 30)^2 + (30 - 30)^2 + (40 - 30)^2 + (50 - 30)^2}{5}} = \sqrt{\frac{400 + 100 + 0 + 100 + 400}{5}} = \sqrt{200} \approx 14.14
] -
标准化每个数据点:
- 对于10:
[
z = \frac{10 - 30}{14.14} = \frac{-20}{14.14} \approx -1.41
] - 对于20:
[
z = \frac{20 - 30}{14.14} = \frac{-10}{14.14} \approx -0.71
] - 对于30:
[
z = \frac{30 - 30}{14.14} = 0
] - 对于40:
[
z = \frac{40 - 30}{14.14} = \frac{10}{14.14} \approx 0.71
] - 对于50:
[
z = \frac{50 - 30}{14.14} = \frac{20}{14.14} \approx 1.41
]
- 对于10:
标准化后的数据集为:[ -1.41, -0.71, 0, 0.71, 1.41 ]
为什么要进行标准化?
-
尺度一致性:在机器学习中,如果不同特征的尺度差异较大,某些特征可能会对模型的训练产生过大的影响,特别是在基于距离的算法(如K近邻、支持向量机)中。标准化可以消除这种影响,使得每个特征对模型贡献的权重一致。
-
梯度下降优化:在一些优化算法(如梯度下降)中,标准化后的数据能够加速收敛过程。若数据未经标准化,某些特征的梯度值可能会非常大,而某些特征的梯度值可能很小,导致收敛速度慢或优化过程不稳定。
-
提高模型的准确性:某些模型(如逻辑回归、K-means聚类、PCA等)对数据的尺度敏感,标准化可以提高这些模型的性能。
标准化与归一化的区别:
- 标准化(Standardization)是将数据转换为均值为0、标准差为1的分布,适用于大部分机器学习模型。
- 归一化(Normalization)是将数据缩放到某个固定范围,通常是[0, 1]。归一化通常用于神经网络和一些需要特定数据范围的算法。
总结起来,标准化的主要作用是将数据的尺度统一,避免不同特征间因量纲不一致而带来的问题,并有助于提升许多机器学习算法的性能。