参考1:可能是最全的数据标准化教程(附python代码) 参考2:数据标准化/归一化normalization

为什么要做数据归一化?

  • 加快梯度下降的收敛速度

  • 提高计算精度

    • 如果不进行归一化,不同的特征数值范围差异很大。如果直接使用这些原始特征进行分析,那些数值较高的特征会起主要作用。

    • 比如在 KNN 中,距离计算会取决于某些数值特别大的特征。

    • 在 LR 中,最后输出的每个特征的重要度(权重大小)也是不准确的,因为这些特征的数值范围不统一。

常用的数据规范化方法及其适用场景

线性归一化

  • 结果值映射到[0, 1]之间 数据规范化方法及其适用的场景 - 图1

  • 结果值映射到[-1, 1]之间 数据规范化方法及其适用的场景 - 图2

  • 适用场景

    • 在不涉及距离度量、协方差计算、数据不符合正太分布的时候适用
  • 缺点

    • 当有新数据加入的时候,可能会导致 max, min 发生改变,需要重新定义。

    • 适用线性变换之后,协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大。

    • 不能用于存在量纲的距离计算中

    • 最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。

标准差标准化(z-score)

  • 根据均值、标准差进行数据标准化,处理之后的数据服从0均值,标准差为1的分布

减均值,除以标准差数据规范化方法及其适用的场景 - 图3

  • 适用场景

    • 标准化的前提是假设样本服从正态分布

    • 在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。

    • 新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差1的正态分布,在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。

Q1:为什么方差归一之后,每个维度的量纲就等价了? A1:比如两个人的体重差是 10kg, 身高差是 0.1m,如果单从数值上面来说,体重差特别大,身高差特别小。这是因为这两个量纲根本就没有什么可比性,比如我要是把身高差改成厘米那就是 10cm 了。方差归一化之后能够把身高和体重的分布变成相同的分布,这样子只需要比较数值差就能够判断出不同特征的差距大小。

Q2:在 PCA 的计算中,并没有除以标准差这个操作? A2:

  • 在 PCA 的计算步骤中,第一步是进行中心化,并没有除以标准化的操作;

  • 在 sklearn 中并没有除以标准差的操作

```python self.mean = np.mean(X, axis=0) X -= self.mean

U, S, V = linalg.svd(X, full_matrices=False)

flip eigenvectors’ sign to enforce deterministic output

U, V = svd_flip(U, V) ```

  • 但是,我们这里所做的标准化指的并不是 PCA 计算的步骤,而是在 PCA 之前就要做的数据处理。也就是说,我们在 PCA 的零均值化步骤之前,就已经进行了标准化。这样能够避免不同量纲对结果的影响。

Q3:PCA为什么要进行零均值化? A3:主成分分析PCA算法:为什么要对数据矩阵进行均值化?

  • 中心化并不属于预处理,而是 PCA 本身流程的一部分。

  • PCA 的目标是最大可分性(最大化方差),所以中心化是必须的

  • 缺点

    • 此方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。该种标准化方式要求原始数据的分布可以近似为高斯分布,否则效果会变得很糟糕。

log 函数转换

  • 通过以10为底的log函数转换的方法同样可以实现归一下,具体方法如下:

    • 数据规范化方法及其适用的场景 - 图4
  • 看了下网上很多介绍都是数据规范化方法及其适用的场景 - 图5,其实是有问题的,这个结果并非一定落到[0,1]区间上,应该还要除以log10(max),max为样本数据最大值,并且所有的数据都要大于等于1。

atan 函数转换

  • 用反正切函数也可以实现数据的归一化:

    • 数据规范化方法及其适用的场景 - 图6
  • 使用这个方法需要注意的是如果想映射的区间为[0,1],则数据都应该大于等于0,小于0的数据将被映射到[-1,0]区间上,而并非所有数据标准化的结果都映射到[0,1]区间上。

Decimal scaling小数定标标准化

  • 通过移动数据的小数点位置来进行标准化。小数点移动多少位取决于属性A的取值中的最大绝对值。

  • 例如 假定A的值由-986到917,A的最大绝对值为986,为使用小数定标标准化,我们用每个值除以1000(即,j=3),这样,-986被规范化为-0.986。