Advertisement

【python 机器学习】sklearn 数据预处理——标准化

阅读量:

文章目录

基于Scikit-learn的数据预处理:标准化

本节将详细介绍数据归一化的相关知识及其在机器学习中的应用

内容概览

具体实施步骤

复制代码
  * 5\. 标准化的应用场景
  * 6\. 标准化和归一化的区别
  * 7\. 总结

sklearn 数据预处理——标准化

在机器学习中,默认的数据预处理是提升模型性能与效率的关键环节之一。默认化(Standardization)作为数据预处理的主要采用的方法之一,在很多场景下发挥着重要作用;该方法的核心思想在于将原始特征进行归一化处理后得到的新特征变量具有零均值与单位方差特性;经过该变换后的特征变量能够更好地满足统计建模的需求;这种变换方式对于绝大多数依赖于特定的数据分布特性的机器学习模型而言至关重要;本文旨在全面介绍如何利用scikit-learn库中的工具来实现这一常见的预处理技术。

1. 什么是数据标准化?

标准化是将数据转换为均值为 0,方差为 1 的分布。它通过以下公式进行计算:

[
X_{\text{scaled}} = \frac{X - \mu}{\sigma}
]

其中:

  • X 是原始数据,
  • μ 是特征的均值,
  • σ 是特征的标准差。

标准化的目标是消除不同特征间的量纲差异,在同一量纲水平下使各个特征对模型的影响具有可比性,并显著提升模型的预测精度和训练效率。

2. 为什么要进行数据标准化?

标准化有以下几个主要作用:

  • 提升训练效率:多种机器学习算法(如梯度下降法、支持向量机(SVM)、K近邻分类器(KNN))都需要处理数据尺度问题。当不同特征的数据范围差异较大时,在优化过程中可能需要更多迭代步骤才能达到收敛效果。通过数据标准化处理能够有效提升训练速度。
    • 防止某些特征对模型的影响过于突出:在实际应用中,不同维度的数据往往具有不同的数值范围(例如身高与体重)。较大的数值可能会导致其在模型中占据主导地位从而影响预测结果。而通过标准化处理可以使各特征在模型中的贡献趋于均衡。
    • 增强模型预测能力:对于依赖于样本间距离计算的方法(如K近邻分类器和核支持向量机),数据预处理显得尤为重要。因为这些方法对各维度之间的相对比例非常敏感,在未经标准化处理的情况下可能导致分类效果受到显著影响。

3. sklearn 中的数据标准化方法

sklearn 中,标准化过程通常采用 StandardScaler 类来执行。该类方法会对数据进行按列标准化处理,在这一过程中会使每列数据的均值被归零,并使方差被规范化为1。

4. 使用 StandardScaler 进行标准化

4.1 示例数据

假设我们有一组二维数据,每列代表一个特征,每行代表一个样本。

复制代码
    import numpy as np
    
    # 示例数据:二维数据,每行是一个样本,每列是一个特征
    data = np.array([[1, 2], [3, 4], [5, 6]])
    print("原始数据:\n", data)

输出:

复制代码
    原始数据:
     [[1 2]
      [3 4]
      [5 6]]
4.2 使用 StandardScaler 进行标准化
复制代码
    from sklearn.preprocessing import StandardScaler
    
    # 创建 StandardScaler 实例
    scaler = StandardScaler()
    
    # 使用 StandardScaler 对数据进行标准化
    standardized_data = scaler.fit_transform(data)
    
    # 输出标准化后的数据
    print("标准化后的数据:\n", standardized_data)
4.3 输出解释
复制代码
    标准化后的数据:
    [[-1.22474487 -1.22474487]
     [ 0.          0.        ]
     [ 1.22474487  1.22474487]]

经过标准化处理的数据每列的平均值趋近于0, 标准偏差趋近于1. 经过标准化后, 数据分布更加趋于均匀, 并减少了不同特征间的量纲差异.

4.4 查看每列的均值和标准差

标准化后的数据每列应当等于0(均值),并且标准差应当等于1。通过访问 mean_scale_ 属性, 我们可以获得标准化后的均值与标准差

复制代码
    # 查看每列的均值
    print("每列的均值:", scaler.mean_)
    
    # 查看每列的标准差
    print("每列的标准差:", scaler.scale_)

输出:

复制代码
    每列的均值: [3. 4.]
    每列的标准差: [1.63299316 1.63299316]

可以看到,标准化后每列的均值和标准差确实接近 0 和 1。

4.5 反向转换

StandardScaler 也具有一系列功能模块中的一种,即 inverse_transform 方法能够将标准化后的数据恢复至原始尺度。

复制代码
    # 还原标准化后的数据
    original_data = scaler.inverse_transform(standardized_data)
    print("还原后的数据:\n", original_data)

输出:

复制代码
    还原后的数据:
     [[1. 2.]
     [3. 4.]
     [5. 6.]]

5. 标准化的应用场景

标准化被广泛应用于多种机器学习模型中,在其中一些模型中会基于距离度量进行操作,在另一些模型中则假设数据服从均匀分布。常见的应用场景包括以下几种

  • 线性回归 :归一化处理通常能有效缩短梯度下降算法收敛所需的时间,并显著提升模型训练效率。
  • 逻辑回归 :归一化过程可防止不同尺度特征对模型学习产生的不均衡影响。
  • 支持向量机(SVM) :支持向量机通过最大化类别间 margins 进行分类。归一化对于保持数据分布的均匀性至关重要。
  • K 最近邻(KNN) :归一化确保了各特征在距离计算中的平等影响力;同时还能增强不同维度信息在模型中的表现能力。
  • 神经网络 :神经网络对于输入数据的比例缩放非常敏感。归一化不仅能缩短训练时间,在一定程度上还能增强其表示能力的同时还能防止梯度消失或爆炸的问题。

6. 标准化和归一化的区别

虽然标准化和归一化的目标都是调整数据的尺度,但它们之间有所不同:

  • 归一化(Min-Max Scaling):通过缩放数值使它们落入指定区间(通常[0,1])。这种技术特别适用于处理具有固定数值范围的数据,并且在神经网络等受限于固定范围算法中表现出色。
    • 标准化(Standardization):通过计算均值为0、标准差为1的方式对数据进行重新定位。该方法不进行数值缩放,并且尤其适用于那些假定输入服从正态分布的情况。

7. 总结

标准化是数据预处理中的核心技术之一,在基于距离度量且假定数据服从正态分布的机器学习模型中具有特殊应用价值。我们可以通过导入并应用 StandardScaler 来实现对数据进行标准化处理,在此过程中使每个特征变量使其均值变为 0 并使标准差达到 1 的目标状态。这种处理方式能够有效消除不同特征变量间的量纲差异性问题,在提升模型训练效率的同时也能显著增强其预测性能表现

通过本文的讲解,您已经学会使用sklearn的具体方法来实现数据标准化,并且了解了其重要性及应用领域.在实际操作中进行数据预处理时(即进行特征缩放),当不同特征具有不同的量纲时(即单位或范围差异显著),我们需要应用标准化处理.这一步骤有助于使各个特征对模型的影响趋于平衡.

全部评论 (0)

还没有任何评论哟~