
4.3 数据的规范化
在统计学和统计学应用中,规范化可以有一系列含义。在最简单的情况下,评级的标准化意味着将在不同尺度上测量的值调整到概念上的共同尺度。在更复杂的情况下,规范化可以指更复杂的调整,其意图是使调整值的整个概率分布对齐。在教育评估中得分标准化的情况下,可能有意将分布与正态分布对齐。概率分布规范化的不同方法是分位数规范化,其中不同度量的分位数被对齐。
在统计学的另一种用法中,规范化是指创建统计的移位和缩放版本。其意图是在比较不同数据集的相应规范化值时,这些正则化值可以消除数据集差异。某些类型的规范化仅涉及缩放,以获得相对于某个大小变量的值。于是测量的对象变为数据变化比率,而不是针对标量进行测量。
在机器学习中,需要学习的数据样本存在多个维度,而这些维度性质各异,通常具有不同的量纲或者数量级。例如,样本的特征A的取值范围为0~1,而特征B的取值范围为100~200。当各种特征之间的水平相差很大时,如果直接用原始指标值进行分析,就会增加数值较高的特征在综合分析中的影响程度,同时,相对削弱数值水平较低特征的影响程度。因此,为了保证结果的可靠性,需要对原始指标数据进行规范化。
4.3.1 缩放规范化
缩放规范化,具体来讲,是将数据按照比例缩放,使之落入一个较小的特定区间,如[0,1]。在某些比较和评价的指标处理中经常会用到缩放规范化,用于去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或者量级的指标进行比较和加权。
先从最简单的缩放开始,如果特征之间的数值差异巨大,可以先从单个特征的最大值max和最小值min入手,将最大值和最小值作为控制缩放的因子。下面介绍两种方法——存在样本,其特征数为k,于是就有最小值-最大值缩放(Min-Max Scaling)及最大绝对值缩放(Max Absolute Scaling)。
最小值-最大值缩放将该样本每个特征下的最大值与最小值之差作为缩放倍数,实际上,每个特征下没有任何一个数会超过其最值之差,所以其作为分母;而分子则是每个特征下的值与最小值之差。当然,全为0的特征,其缩放后的值为0。故有如下公式:

经过最小值-最大值缩放之后的特征,其取值范围为0~1,从而使其转化为无量纲的纯数值,在之后的模型训练中,进一步提升模型的表现。其代码实现如下:

其输出结果如下:

最大绝对值缩放与最小值-最大值缩放类似,但是其执行效率更高。因为最大绝对值缩放在分子上减少了减法运算,分母上也仅仅采用特征的最大值的绝对值,具体的公式如下:

因为分子缺少对最小值的操作,所以其取值范围为-1~1,且数据分布是以0为中心的,整体上来说,分布更加稀疏、合理。其代码实现如下:

其输出结果如下:

对于缩放来说,或许读者会有一些特殊需求,如希望数据分布到特定的取值区间,而不仅仅是0~1或者-1~1,最小值-最大值缩放可以预先设置特定的范围,数据变化满足如下公式:

式中,x_scalei(k)表示设定最大值和最小值之后的缩放变换输出;max、min分别表示设定的最大值和最小值。
具体代码如下:

其输出结果如下:

当然,上述缩放方法并不完美,当存在新加入的样本时,如果样本中的某个特征的数值又恰好超出原有最大值或者最小值的界定边界,则会引发最大值或者最小值的更新;进一步讲,如果最大值和最小值存在不稳定的情况,其转化后的特征值也会存在不稳定的状况(假设对样本进行实时转化)。在上例代码的基础上,引入一个超出边界的数据,并观察其输出结果,具体代码如下:

其输出结果如下:

4.3.2 标准化
标准化(Standardization),又称标准差规范化或者Z标准化(Z-Score Normalization),对样本的每个特征分别进行计算使其满足正态分布——均值为0,标准差为1,具体公式如下:

式中,为拥有k个特征样本i在通过标准化处理之后的样本;μ代表所有样本的均值;σ代表所有样本的标准差。
数据集的标准化是许多在Sklearn中实现的机器学习估计器的共同要求;如果单个特征没有呈现标准的正态分布——均值为0和标准差为1的分布,那么它们的表现可能很糟糕。在实际应用中,人们经常忽略分布的形状,只是将数据转换为中心,减去每个特征的平均值,然后将非常数特征除以它们的标准差。例如,在学习算法的目标函数中使用的许多元素(如支持向量机的RBF核或者线性模型的L1和L2调整器)都假定所有特征中心在0附近,且方差相同。如果一个特征的方差比其他特征大一个数量级,它可能支配目标函数,使估计器无法像预期的那样正确地学习其他特征。其代码实现如下:

其输出结果如下:

从输出结果可以发现,通过标准化转换之后,其均值为0,标准差为1,满足标准正态分布。
除此之外,所有的预处理方法都提供函数接口,之前展示的是类接口,函数调用的代码实现如下:

其输出结果如下:

4.3.3 范数规范化
在介绍范数规范化之前,应先了解什么是范数(Norm)。
范数是具有“长度”概念的函数。在线性代数、泛函分析及相关数学领域,范数是一个函数,其为向量空间内所有向量赋予非零的正长度或者大小。距离的定义是一个较为宽泛的概念,只要满足非负、自反、三角不等式就可以称为距离。范数是一种强化了的距离概念,它在定义上比距离多一条数乘的运算法则。
函数与几何图形往往具有对应的关系,特别是在三维以下的空间内,函数是几何图像的数学概括,而几何图像是函数的高度形象化,如一个函数对应几何空间中若干点组成的图形。
但当函数与几何超出三维空间时就很难直观地呈现出来,于是存在映射,映射表达的就是一个集合通过某种关系转为另外一个集合。
为了更好地在数学上表示这种映射关系(这里特指线性关系),我们引入矩阵。这里的矩阵用于表征上述空间映射的线性关系。通过向量表示上述映射中提到的集合,而人们通常所说的基就是这个集合的最一般关系。可以这样理解,一个集合(向量),通过一种映射关系(矩阵),得到另外一个集合(另外一个向量)。
向量的范数,就是表示这个原有集合的大小;矩阵的范数,就是表示这个变化过程的大小的一个度量。
范数L1或者L2实际表达的是什么?如果以更加概括的形式表达,都可以表现为L-P范数的形式,得到如下公式:

于是,可以得到如下范数并获悉其意义。
范数L0——实际上用于度量向量中非零元素的个数。

范数L1——其来源是曼哈顿的出租车司机在曼哈顿街道中由一点到另一点需要走过的距离,用于表示向量中元素的绝对值之和,可以度量两个向量间的差异,如绝对误差和(Sum of Absolute Difference,SAD),其公式如下:

范数L2——用于表示向量的距离,即所谓的欧氏距离(Euclidean Distance,ED),同样,L2也可以度量两个向量间的差距,如平方差和(Sum of Squared Difference),其公式如下:

到此为止,上述范数的意义还比较容易理解,但是范数并不止于L2,到最极端的情况,还有范数L∞,为了方便理解范数的P值的增长对范数本身意味着什么,应先了解L∞最终代表什么,其公式表示如下:

在向量元素的集合中,必然存在一个最大绝对值
,而这个最大绝对值在无穷大次方之后,其他元素的绝对值相对于最大绝对值
的无穷大次方趋近于0,当再进行
的开方之后,得到的是
,即

L1表示向量元素{xi}的绝对值之和[见图4-1(a)],L2表示向量元素{xi}的平方和的几何平均数[见图4-1(b)]。所以,同一组向量,随着范数P值的增加,其趋向于该向量元素中的最大值,图形更加“丰满”;相反,随着范数P值的减小,曲线越贴近坐标轴,最极端的情况,L0表示向量元素{xi}的个数。

图4-1 L1和L2的轮廓(假设二维向量)
如图4-2所示,从右到左,分别展示了不同范数升高时,其在超几何空间所呈现的超几何形态。

图4-2 不同的P值在超平面空间的轮廓
范数正则化的处理方式也十分简单,向量中每个元素除以向量的范数。若存在范数函数norm(x),则范数正则化变换公式为

从x到存在映射关系,而实现这种映射关系的过程就是范数正则化,如果对
进行与之对应的范数计算就会得到其值为1。关于范数规范化的代码实现如下。
函数化实现:

其输出结果如下:

类实现:

其输出结果如下:
