问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

机器学习中的归一化方法详解

创作时间:
作者:
@小白创作中心

机器学习中的归一化方法详解

引用
CSDN
1.
https://m.blog.csdn.net/weixin_45862390/article/details/145168343

归一化是机器学习中数据预处理的重要步骤,它能够消除特征之间的量纲差异,使得所有特征在同一个尺度上进行计算。本文将详细介绍归一化的定义、常见方法、选择标准以及其重要性。

一. 归一化

归一化(Normalization)是数据预处理中的一种常用方法,主要用于将不同尺度的数据转换到一个统一的范围内,通常是将数据缩放到一个固定的区间,如 [0, 1] 或 [-1, 1]。归一化有助于消除特征之间的量纲差异,使得所有特征在同一个尺度上进行计算,避免某些特征对模型的训练过程产生过大影响。

二. 归一化的常见方法

1. 最小-最大归一化 (Min-Max Normalization)

最常见的归一化方法,将数据按比例缩放到指定的区间(通常是 [0, 1])。其公式为:

x' = \frac{x - \min(x)}{\max(x) - \min(x)}

其中:

  • x 是原始数据;
  • min(x) 是数据集中的最小值;
  • max(x) 是数据集中的最大值;
  • x' 是归一化后的数据。

优点:

  • 适用于数据范围已知且具有固定上下界的情况。
  • 结果数据范围固定,便于后续操作。

缺点:

  • 对于异常值非常敏感,异常值可能会拉大数据的范围,使得大部分数据集中在某一小范围内。

代码:

from sklearn.preprocessing import MinMaxScaler

# 1. 准备数据
data = [[90, 2, 10, 40],
        [60, 4, 15, 45],
        [75, 3, 13, 46]]

# 2. 初始化归一化对象
transformer = MinMaxScaler()

# 3. 对原始特征进行变换
data = transformer.fit_transform(data)

# 4. 打印归一化后的结果
print(data)

输出结果:

array([[1.        , 0.        , 0.        , 0.        ],
       [0.        , 1.        , 1.        , 0.83333333],
       [0.5       , 0.5       , 0.6       , 1.        ]])

2. Z-Score 归一化(标准化)

Z-Score 归一化将数据转换为具有零均值和单位方差的分布,常用于需要满足正态分布假设的机器学习算法中。其公式为:

x' = \frac{x - \mu}{\sigma}

其中:

  • x 是原始数据;
  • μ 是数据集的均值;
  • σ 是数据集的标准差;
  • x' 是标准化后的数据。

优点:

  • 对异常值不敏感,能保持数据的分布形态。
  • 保持数据的相对差异,适用于大多数机器学习算法,尤其是需要度量距离的算法。

缺点:

  • 对数据本身的分布要求较高,尤其是对于数据呈现非正态分布时,可能需要更多的处理。

代码:

from sklearn.preprocessing import StandardScaler

# 1. 准备数据
data = [[90, 2, 10, 40],
        [60, 4, 15, 45],
        [75, 3, 13, 46]]

# 2. 初始化归一化对象
transformer = StandardScaler()

# 3. 对原始特征进行变换
data = transformer.fit_transform(data)

# 4. 打印归一化后的结果
print(data)

输出结果:

array([[ 1.22474487, -1.22474487, -1.29777137, -1.3970014 ],
       [-1.22474487,  1.22474487,  1.13554995,  0.50800051],
       [ 0.        ,  0.        ,  0.16222142,  0.88900089]])

3. MaxAbs 归一化

将每个特征值除以其最大绝对值,使得数据的范围在 [-1, 1] 之间。这种方法在数据中没有负值时,尤其适用。

x' = \frac{x}{\max(|x|)}

优点:

  • 保留了稀疏矩阵的零值,适合处理稀疏数据。
  • 不改变数据的分布形态,适用于数据不含异常值的情况。

缺点:

  • 数据不一定遵循均值为0的分布,可能对一些算法(如线性回归)不太适用。

三. 归一化的选择

  • 如果数据的数值范围已知且有明确的上下限(如图像像素值通常在[0, 255]之间),使用最小-最大归一化比较合适。
  • 如果数据的分布较为均匀,且目标是让特征符合标准正态分布,使用Z-Score 归一化(标准化)更为合适。
  • 如果数据本身已经分布得很好,且不希望改变分布特性,可以选择MaxAbs 归一化

总之,归一化是对特征进行尺度调整的过程,选择合适的归一化方法能够显著提高模型的表现和训练效率。

四. 为什么要进行归一化

1. 消除量纲差异

不同特征可能有不同的单位或量纲,例如,某些特征可能是温度(单位是摄氏度或华氏度),而其他特征可能是收入(单位是人民币、美元等)。这些特征的数值范围可能相差很大。比如,温度可能在0到100之间,而收入可能在几千到几百万之间。如果不进行处理,这种量纲差异可能会导致某些特征在模型中占主导地位,影响模型的学习效果。

归一化:将数据缩放到一个固定的范围(如[0, 1])。这样可以消除量纲差异,让每个特征在同一尺度上进行处理。

标准化:通过去除均值并除以标准差,使数据具有零均值和单位方差。标准化后的数据使得每个特征的分布更加一致,便于算法进行处理。

2. 提高模型训练速度

许多机器学习算法,特别是基于梯度下降的算法(如线性回归、逻辑回归、神经网络等),对特征的尺度非常敏感。如果数据的尺度不一致,某些特征可能对梯度的更新产生较大影响,而其他特征则几乎没有影响。这样会导致优化过程收敛速度慢,甚至不收敛。

通过归一化或标准化,可以确保所有特征对模型的贡献大致相同,从而加快收敛速度,避免梯度爆炸或梯度消失问题。

3. 增强模型的稳定性

一些模型,如支持向量机(SVM)、K-近邻(KNN)和K-means聚类等,基于距离度量(如欧式距离、曼哈顿距离等)来进行预测或分类。如果特征的尺度差异较大,模型计算距离时,尺度较大的特征会主导距离计算,从而影响预测结果。通过归一化或标准化,特征尺度变得一致,能提高模型的稳定性和预测准确性。

4. 保证正则化项的有效性

在一些机器学习算法中,正则化项(如L2正则化)用于控制模型的复杂度,避免过拟合。如果特征的尺度差异较大,某些特征可能会对正则化项产生较大影响,导致模型偏向某些特征,进而影响模型的泛化能力。归一化或标准化后,正则化项会对所有特征产生更均衡的影响,有助于提高模型的鲁棒性。

5. 避免数值计算问题

在某些机器学习算法中,如果输入数据的数值范围过大,可能会导致计算中的数值稳定性问题。例如,在神经网络中,输入数据的数值过大可能导致梯度更新过程不稳定,进而影响训练过程。通过归一化或标准化,可以避免这种数值计算问题。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号