机器学习笔记 - 何时进行特征缩放

一、什么是特征缩放

        特征缩放是一种用于标准化自变量或数据特征范围的方法。在数据处理中,也称为数据归一化,通常在数据预处理步骤中执行。

        举个例子——如果你有多个独立变量,比如年龄、薪水和身高;它们的范围分别为(18-100 年)、(25,000-75,000 欧元)和(1-2 米),特征缩放将帮助它们都处于同一范围内,例如以 0 为中心或在范围内(0,1) 取决于缩放技术。

        为了将上述内容可视化,让我们以 存放在 UCI 机器学习存储库中的“葡萄酒数据集”中的葡萄酒数据集中的酒精和苹果酸含量的自变量为例 。您可以在下面看到两种最常见的缩放技术(标准化和标准化)对数据集的影响。

标准化和规范化对 Wine 数据集的影响

二、缩放方法

1、Min-Max Normalization

        称为最小-最大缩放或最小-最大归一化,它是最简单的方法,这种技术重新缩放特征或观察值,分布值在 0 和 1 之间。

        归一化的一般公式如下:

        其中max(x) 和 min(x) 分别是特征的最大值和最小值。

        我们还可以对不同的区间进行归一化,例如选择将变量放置在任何 [a, b] 区间中,a 和 b 是实数。要重新调整任意一组值 [a, b] 之间的范围,公式变为:

2、Standardization

        特征标准化使数据中每个特征的值具有零均值和单位方差。一般的计算方法是确定每个特征的分布均值和标准差,并通过以下公式计算新的数据点。

        σ是特征向量的标准差,x̄是特征向量的平均值。

3、Scaling to unit length

        该方法的目的是缩放特征向量的分量,使得完整向量的长度为 1。这通常意味着将每个分量除以向量的欧几里得长度。

        除了上述 3 种广泛使用的方法外,还有一些其他方法可以缩放特征,即。Power Transformer、Quantile Transformer、Robust Scaler 等。

三、归一化还是标准化?

        这个问题并没有标准答案。但有一些通用的经验可以参考。

        1、当数据的分布不遵循高斯分布时,归一化很适合。它在不假设任何数据分布(如 K-最近邻)的算法中很有用。

        2、在需要 0-1 尺度数据的神经网络算法中,归一化是必不可少的预处理步骤。数据归一化的另一个流行示例是图像处理,其中必须对像素强度进行归一化以适应特定范围(即 RGB 颜色范围为 0 到 255)。

        3、在数据遵循高斯分布的情况下,标准化 可能会有所帮助。虽然这不一定是真的。由于标准化没有边界范围,因此,即使数据中存在异常值,它们也不会受到标准化的影响。

        4、在聚类分析中,标准化可以方便地根据某些距离度量比较特征之间的相似性。另一个突出的例子是主成分分析,我们通常更喜欢标准化而不是 Min-Max 缩放,因为我们对最大化方差的组件感兴趣。

        在决定是否需要标准化或标准化时,可以考虑一些要点

  • 当数据表示高斯分布时可以使用标准化,而标准化对于非高斯分布非常有用
  • 异常值的影响在标准化中非常高

        总而言之, 您始终可以从将模型拟合到原始、标准化和标准化数据开始,然后比较性能以获得最佳结果。

四、数据缩放的影响

1、基于梯度下降的算法

        如果算法使用梯度下降,那么特征范围的差异将导致每个特征的步长不同。为了确保梯度下降平稳地向最小值移动,并且梯度下降的步骤以相同的速率更新所有特征,我们在将数据输入模型之前对其进行缩放。具有相似规模的特征将有助于梯度下降更快地收敛到最小值。

        具体来说,在神经网络算法的情况下,特征缩放有利于优化:

  • 它使训练更快
  • 它可以防止优化陷入局部最优
  • 它提供了更好的误差表面形状
  • 可以更方便地进行权重衰减和贝叶斯优化

2、基于距离的算法

        KNN、K-means 和 SVM 等基于距离的算法受特征范围的影响最大。这是因为他们在幕后使用数据点之间的距离来确定它们的相似性,从而执行手头的任务。因此,我们在采用基于距离的算法之前对数据进行缩放,以便所有特征对结果的贡献相同。

3、使用 PCA 进行特征工程

        在 PCA 中,我们对使方差最大化的组件感兴趣。如果一个组成部分(例如年龄)由于它们各自的比例而变化小于另一个组成部分(例如薪水),如果这些特征没有按比例缩放,PCA 可能会确定最大方差的方向更接近于“薪水”轴。由于一岁的变化可以被认为比一欧元的工资变化重要得多,这显然是不正确的。

数据标准化对 PCA 的影响

 4、回归

        在回归中,通常建议对特征进行缩放,使预测变量的平均值为 0。当预测变量值设置为其平均值时,这使得截距项更容易解释为 Y 的预期值。

5、基于树的算法

        不需要进行特征缩放。

        基于树的算法对特征的规模相当不敏感。决策树仅基于单个特征拆分节点。决策树在增加节点同质性的特征上分割节点。一个特征上的这种分割不受其他特征的影响。因此,其余特征对拆分几乎没有影响。这就是使它们不受特征规模影响的原因。

五、特征缩放示例

1、数据集

Country Age Salary Purchased
France 44 72000 No
Spain 27 48000 Yes
Germany 30 54000 No
Spain 38 61000 No
Germany 40 Yes
France 35 58000 Yes
Spain 52000 No
France 48 79000 Yes
Germany 50 83000 No
France 37 67000 Yes

2、参考代码

# Python code explaining How to
# perform Feature Scaling

""" PART 1
	Importing Libraries """

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Sklearn library
from sklearn import preprocessing

""" PART 2
	Importing Data """

data_set = pd.read_csv('C:\\Users\\dell\\Desktop\\Data_for_Feature_Scaling.csv')
data_set.head()

# here Features - Age and Salary columns
# are taken using slicing
# to handle values with varying magnitude
x = data_set.iloc[:, 1:3].values
print ("\nOriginal data values : \n", x)


""" PART 4
	Handling the missing values """

from sklearn import preprocessing

""" MIN MAX SCALER """

min_max_scaler = preprocessing.MinMaxScaler(feature_range =(0, 1))

# Scaled feature
x_after_min_max_scaler = min_max_scaler.fit_transform(x)

print ("\nAfter min max Scaling : \n", x_after_min_max_scaler)


""" Standardisation """

Standardisation = preprocessing.StandardScaler()

# Scaled feature
x_after_Standardisation = Standardisation.fit_transform(x)

print ("\nAfter Standardisation : \n", x_after_Standardisation)

3、归一化结果

 [[ 0.33333333  0.86585366]
 [ 0.          0.57317073]
 [ 0.05882353  0.64634146]
 [ 0.21568627  0.73170732]
 [ 0.25490196  0.        ]
 [ 0.15686275  0.69512195]
 [ 1.          0.62195122]
 [ 0.41176471  0.95121951]
 [ 0.45098039  1.        ]
 [ 0.19607843  0.80487805]]

4、标准化结果

 [[ 0.09536935  0.66527061]
 [-1.15176827 -0.43586695]
 [-0.93168516 -0.16058256]
 [-0.34479687  0.16058256]
 [-0.1980748  -2.59226136]
 [-0.56487998  0.02294037]
 [ 2.58964459 -0.25234403]
 [ 0.38881349  0.98643574]
 [ 0.53553557  1.16995867]
 [-0.41815791  0.43586695]]

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/123627430