数据标准化与归一化 及其区别

文章目录

  • 前言
  • 一、数据标准化(Standardization)
    • 1.为什么使用数据标准化?
    • 2.数据标准化定义
    • 3.实现代码
  • 二、数据归一化
    • 1.MinMax归一化
    • 2.代码实现
    • 3.MaxAbs归一化
  • 三、标准化与归一化对比
    • 1.标准化与归一化的异同
    • 2.什么时候用归一化?什么时候用标准化?
    • 3.归一化与标准化的应用场景
  • 总结


前言

  数据一般都是有单位的,比如身高的单位有米、厘米等。需要对此类数值型特征进行无量纲化处理,即是使不同规格的数据转换到同一规格。常见的无量纲化方法有标准化归一化

主要参考:机器学习算法:特征工程


一、数据标准化(Standardization)

1.为什么使用数据标准化?

  • 某些算法要求样本具有0均值和1方差,即需要样本满足标准正态分布
  • 需要消除样本不同属性具有不同量级时的影响。例如,数量级的差异将导致量级较大的属性占据主导地位,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要);当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;依赖于样本距离的算法对于数据的数量级非常敏感。

2.数据标准化定义

数据标准化公式如下:
x ‾ = 1 n ∑ i = 1 n x i s t d ( x ) = ∑ i = 1 n ( x i − x ‾ ) 2 n − 1 \overline{x}=\frac{1}{n}\sum^n_{i=1}x_i \\std(x)=\sqrt{\frac{\sum^n_{i=1}(x_i-\overline{x})^2}{n-1}} x=n1i=1nxistd(x)=n1i=1n(xix)2
  标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。均值和标准差都是在样本集上定义的,而不是在单个样本上定义的。标准化是针对某个属性的,需要用到所有样本在该属性上的值。

3.实现代码

from sklearn.preprocessing import StandardScaler

#标准化,返回值为标准化后的数据
standardScaler  = StandardScaler().fit(X_train)
standardScaler.transform(X_train)

二、数据归一化

1.MinMax归一化

  区间缩放法利用了边界值信息,将属性缩放到[0,1]。计算公式如下:
x i − m i n ( x ) m a x ( x ) − m i n ( x ) \frac{x_i-min(x)}{max(x)-min(x)} max(x)min(x)ximin(x)
这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义;另外,MinMaxScaler对异常值的存在非常敏感

2.代码实现

from sklearn.preprocessing import MinMaxScaler

#区间缩放,返回值为缩放到[0, 1]区间的数据
minMaxScaler  = MinMaxScaler().fit(X_train)
minMaxScaler.transform(X_train)

3.MaxAbs归一化

  单独地缩放和转换每个特征,使得训练集中的每个特征的最大绝对值将为1.0,将属性缩放到[-1,1]。它不会移动/居中数据,因此不会破坏任何稀疏性。
x i m a x ( x ) \frac{x_i}{max(x)} max(x)xi

三、标准化与归一化对比

1.标准化与归一化的异同

  • 相同点:它们的相同点在于都能取消由于量纲不同引起的误差;都是一种线性变换,都是对向量X按照比例压缩再进行平移。
  • 不同点:一是目的不同归一化是为了消除纲量压缩到[0,1]区间标准化只是调整特征整体的分布。二是归一化与最大,最小值有关;标准化与均值,标准差有关。三是归一化输出在[0,1]之间标准化无限制

2.什么时候用归一化?什么时候用标准化?

  • 如果对输出结果范围有要求,用归一化。
  • 如果数据较为稳定,不存在极端的最大最小值,用归一化。
  • 如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响。

3.归一化与标准化的应用场景

  1. 在分类、聚类算法中,需要使用距离来度量相似性的时候(如SVM、KNN)、或者使用PCA技术进行降维的时候,标准化(Z-score standardization)表现更好
  2. 不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0, 255]的范围。
  3. 基于树的方法不需要进行特征的归一化。例如随机森林,bagging与boosting等方法。
  4. 基于参数的模型或者基于距离的模型需要归一化。因为基于参数的模型或者基于距离的模型,需要对参数或者距离进行计算,都需要进行归一化。
  5. 一般来说,建议优先使用标准化。对于输出有要求时再尝试别的方法,如归一化或者更加复杂的方法。很多方法都可以将输出范围调整到[0, 1],如果我们对于数据的分布有假设的话,更加有效的方法是使用相对应的概率密度函数来转换。
  6. 除了上面介绍的方法外,还有一些相对没这么常用的处理方法:RobustScalerPowerTransformerQuantileTransformerQuantileTransformer等。

总结

  需要特别注意,除了去除量钢化需要归一化或标准化,还需考虑基于参数的模型或者基于距离的模型,需要对参数或者距离进行计算,都需要进行归一化。

你可能感兴趣的:(特征工程,python,算法)