数据归一化方法

最近看的书Python机器学习:预测分析核心算法介绍了归一化方法,刚好在另外的一个可视化项目中也用到了,所以就简单总结一下。

归一化(Normalization)

归一化把数据变为(0,1)之间的小数。主要是为了方便数据处理,因为将数据映射到0~1范围之内,可以使处理过程更加便捷、快速。
归一化把有量纲表达式变换为无量纲表达式,成为纯量。经过归一化处理的数据,处于同一数量级,可以消除指标之间的量纲和量纲单位的影响,提高不同数据指标之间的可比性。比如两个人体重差10KG,身高差0.02M,在衡量两个人的差别时体重的差距会把身高的差距完全掩盖,归一化之后就不会有这样的问题。

主要方法:

  1. 线性转换,即min-max归一化(常用方法)
    y=(x-min)/(max-min)
    如果要映射到[-1,1],y=(x-mean)/(max-min)
  2. 对数函数转换
    y=log10(x)/log10(max)
  3. 反余切函数转换
    y=atan(x)*2/PI

标准化(Standardization)

数据的标准化是将数据按比例缩放,使之落入一个小的特定区间。
主要方法:

  1. z-score标准化,即零-均值标准化(常用方法)
    y=(x-μ)/σ是一种统计的处理,基于正态分布的假设,将数据变换为均值为0、标准差为1的标准正态分布。但即使数据不服从正态分布,也可以用此法。特别适用于数据的最大值和最小值未知,或存在孤立点。
  2. 小数定标标准化
    y=x/10^j (j确保max(|y|)<1)
    通过移动x的小数位置进行标准化
  3. 对数Logistic模式
    y=1/(1+e^(-x))

正则化(Regularization)

用一组与原不适定问题相“邻近”的适定问题的解,去逼近原问题的解,这种方法称为正则化方法。如何建立有效的正则化方法是反问题领域中不适定问题研究的重要内容。通常的正则化方法有基于变分原理的Tikhonov 正则化、各种迭代方法以及其它的一些改进方法。
总的来说,归一化是为了消除不同数据之间的量纲,方便数据比较和共同处理,比如在神经网络中,归一化可以加快训练网络的收敛性;标准化是为了方便数据的下一步处理,而进行的数据缩放等变换,并不是为了方便与其他数据一同处理或比较,比如数据经过零-均值标准化后,更利于使用标准正态分布的性质,进行处理;正则化而是利用先验知识,在处理过程中引入正则化因子(regulator),增加引导约束的作用,比如在逻辑回归中使用正则化,可有效降低过拟合的现象。