python-数值分析-归一化

归一化和标准化的本质都是缩放和平移,他们的区别直观的说就是归一化的缩放是 “拍扁” 统一到区间(0-1),而标准化的缩放是更加 “弹性” 和 “动态” 的,和整体样本的分布有很大的关系。
从输出范围角度来看, 归一化的输出结果必须在 0-1 间。而标准化的输出范围不受限制,通常情况下比归一化更广。

20200302_094105.png

线性函数归一化(Min-Max scaling)

线性函数将原始数据线性化的方法转换到[0 1]的范围,归一化公式如下:

20200302_093804.png

该方法实现对原始数据的等比例缩放,其中Xnorm为归一化后的数据,X为原始数据,Xmax、Xmin分别为原始数据集的最大值和最小值。

归一化

from sklearn import preprocessing
from sklearn.preprocessing import MinMaxScaler

scaler_mm = MinMaxScaler(feature_range=(0, 1)) # 自动将dtype转换成float64

# 需要二维数组,不改变数值
angle_standard = angle_standard.reshape(-1, 1)
value_standard = value_standard.reshape(-1, 1)

angle_standard_scale = scaler_mm.fit_transform(angle_standard)
value_standard_scale = scaler_mm.fit_transform(value_standard)

0均值标准化(Z-score standardization)

叫 z-score 标准化(也就是统计学中的标准分,或者叫Z分)
0均值归一化方法将原始数据集归一化为均值为0、方差1的数据集,归一化公式如下:
(输入数据-均值)/标准差

20200302_093837.png

其中,μ、σ分别为原始数据集的均值和方法。该种归一化方式要求原始数据的分布可以近似为高斯分布,否则归一化的效果会变得很糟糕。

  1. 标准化是通过特征的平均值和标准差,将特征缩放成一个标准的正态分布,缩放后均值为0,方差为1。但即使数据不服从正态分布,也可以用此法。特别适用于数据的最大值和最小值未知,或存在孤立点。
  2. 标准化是为了方便数据的下一步处理,而进行的数据缩放等变换,不同于归一化,并不是为了方便与其他数据一同处理或比较。

方法的选择

  1. 在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。
  2. 在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。
  3. 如果对输出结果范围有要求,用归一化。
  4. 如果数据较为稳定,不存在极端的最大最小值,用归一化。
  5. 如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响。
  6. 符合正态分布的使用标准化

总结来说,在算法、后续计算中涉及距离度量(聚类分析)或者协方差分析(PCA、LDA等)的,同时数据分布可以近似为正态分布,应当使用0均值的归一化方法。其他应用中更具需要选用合适的归一化方法。