本文整理自<数据预处理:标准化和归一化><特征归一化特性及其数学原理推导>
- 1. 主要方法及应用场景
- 2. 特征归一化的使用范围
- 3. 为什么需要对数值类型的特征做归一化?
- 4. 代码实现
- 5. 应用实例——基于股票数据
- 6. 数学原理推导
1. 主要方法及应用场景
对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内。最常用的方法主要有以下两种。
(1)线性函数归一化(Min-Max Scaling),又称极大极小归一化(Min-Max Normalization),或简称归一化。它对原始数据进行线性变换,使结果映射到[0, 1]的范围,实现对原始数据的等比缩放。归一化公式如下
其中,X为原始数据,Xmax、Xmin分别为数据最大值和最小值。
(2)零均值归一化(Z-Score Normalization),又称零均值标准化(Z-Score Standardization),或简称标准化。它会将原始数据映射到均值为0、标准差为1的分布上。具体来说,假设原始特征的均值为μ、标准差为σ,那么归一化公式定义为:
因为极大极小归一化的方法是,根据极值,将所有内部值压缩到[0,1]区间;而零均值标准化做的是,根据所有数值,将分布转为标准正态分布,均值为0,方差为1,取值[-1,1]。在实际使用过程中深有体会,当用极大极小归一化时,如果不是已经知道极值(比如0~255),一旦有新的数据(比如Haar特征)加入,根据固定的极值(当前数据最大最小值)去压缩,就可能产生超过1或者小于0的特征值,但是在处理上会方便许多;采用零均值标准化的话,由于可能取到负值,而且新进来的数据依然可能越界,其实都不好使……
那么,应该如何取舍归一化和标准化呢?
- 如果对输出结果有要求,或者数据比较稳定,用归一化。
- 如果存在一些异常值和噪音,数据符合正态分布,用标准化。
- 如果涉及距离度量计算相似性(比如KNN、Kmeans聚类)、或者PCA,用标准化。(这点我也疑惑,相似性计算是指什么?)
前面两个都好理解,数据稳定,用极值方便;有异常或噪音,用标准化保证整体数值分布。我们来仔细分析一下第三点,首先推导零均值标准化原理(及后续推导内容放在数学原理推导小节内)。
除了极大极小归一化、零均值归一化,还有一些非线性的归一化,比如log10、log2、tan等。归一化的好处真的非常之大,是机器学习入门必备的概念。
2. 特征归一化的使用范围
《百面机器学习》上说
在实际应用中, 通过梯度下降法求解的模型通常是需要归一化的,包括线性回归、逻辑回锅、支持向量机、神经网络等模型。但对于决策树模型则并不适用,以C4.5决策树为例,决策树在进行节点分裂时主要依据数据集D关于特征x的信息增益比,而信息增益比跟特征是否进行归一化是无关的,因为归一化并不会改变样本在特征x上的信息增益。
但其实,看一下C4.5的信息增益比公式,样本集合D,类别数N,某类样本子集Ci,Di中属于第n类的子集D(in),特征取值数K,||表示取元素个数,某特征X,其信息增益比为:
信息增益比相当于帮决策树进行了归一化。而且其实,决策树使用了归一化,也不会有太大的问题。
另一种补充观点:
那么是否任何情况都有必要进行标准化归一化呢?答案是否定的。我们所熟知的决策树、随机森林等概率模型,就不需要。因为它们并不关心变量的值,而是关心变量的分布和变量之间的条件概率。
3. 为什么需要对数值类型的特征做归一化?
通过一个形象的随机梯度下降例子来解释:
假设有两种数值型特征,x1的取值范围为 [0, 10],x2的取值范围为 [0, 3],于是可以构造一个目标函数符合图1.1(a)中的等值图。在学习速率相同的情况下, x1的更新速度会大于x2,需要较多的迭代才能找到最优解。如果将x1和x2归一化到相同的数值区间后,优化目标的等值图会变成图1.1(b)中的圆形, x1和x2的更新速度变得更为一致,容易更快地通过梯度下降找到最优解。
用人话来讲就是,归一化使得特征的变化更容易用统一标准去衡量了。
这个例子其实来源于斯坦福机器学习公开课的一节,课题是我们想要去预测房价,假设存在这样一个函数:
这个函数里的y是预测房价,x1是房间大小(1~100平方米),x2是房间数量(1~4间)。我们都知道房间越多、房间越大,房子越值钱,但不知道具体“50平方米2间房”和“60平方米1间房”哪个更值钱。所以现在有一批[房间大小, 房间数