特征处理之使数据分布逼近正态分布

前言

在机器学习和深度学习中,我们经常要对输入的数据做归一化或者在隐藏层使用Batch-Normlization(BN)操作,将数据范围缩放到[0,1]或者[-1, 1]之间,主要作用:可以加快神经网络训练速度,防止过拟合。然而无论做归一化还是BN处理,虽然将数据的均值变为0,方差变为1,但是数据的整体分布并不一定服从标准的正态分布(实际数据大部分时候都不会是),做归一化和BN时,我们求出来的均值和方差,并不能说明我们数据是服从正态分布的。

我们在进行机器学习/深度学习训练的时候,往往希望数据越接近正态分布越好,这样对于训练效果会有明显的提升。

判断数据是否服从正态分布的指标

我们判断数据分布与标准正态分布之间的差别主要根据两个统计量:偏度(skewness)和峰度(kurtosis)

1. 偏度(skewness)

偏度(skewness),是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。定义上偏度是样本的三阶标准化矩。

《特征处理之使数据分布逼近正态分布》
偏度定义中包括正态分布(偏度=0),右偏分布(也叫正偏分布,其偏度>0),左偏分布(也叫负偏分布,其偏度<0)。正偏态分布有以下特性:众数 < 中位数 < 平均数;对于负偏态单峰分布则恰恰相反,众数 > 中位数 > 平均数。在对称分布中,三值相等

《特征处理之使数据分布逼近正态分布》
《特征处理之使数据分布逼近正态分布》

2. 峰度

峰度(peakedness;kurtosis)又称峰态系数。表征概率密度分布曲线在平均值处峰值高低的特征数。直观看来,峰度反映了峰部的尖度。随机变量的峰度计算方法为:随机变量的四阶中心矩与方差平方的比值。

《特征处理之使数据分布逼近正态分布》
峰度包括正态分布(峰度值=3),厚尾(峰度值>3),瘦尾(峰度值<3)
《特征处理之使数据分布逼近正态分布》

峰度用于描述一个分布曲线形态的陡缓程度,通常以正态分布曲线的峰度为参照标准,来观察波峰是更“尖”还是更“平”。我们称正态分布曲线的峰度为常峰度,所有正态分布曲线(无论均值和方差为何值)峰度均为3。峰度大于常峰度的分布叫做尖峰分布(峰度 > 3),它拥有更陡峭的波峰和更厚的尾部,反之亦然,平峰分布拥有更平的波峰和更薄的尾部。

然而,一些工具将分布曲线的超额峰度(峰度减去常峰度3)定义为峰度,这样做的目的是让正态分布的峰度重新定义为0,便于分析比较,如Python的Scipy库就是这样处理的,以及Spark里计算峰度的函数(Spark分类专栏里有讲到)。

使数据分布逼近正态分布

如果高度偏态(如Skewness为其标准误差的3倍以上),则可以取对数,其中又可分为自然对数和以10为基数的对数。如以下是转换自然对数的指令:
以下是转换成以10为基数的对数(其纠偏力度最强,有时会矫枉过正,将正偏态转换成负偏态)
另外,在计量经济学中广泛使用Box-Cox转换方法。
通体来说,可以尝试一下几种方法:
1、对数变换 即将原始数据X的对数值作为新的分布数据:
X’=lgX
当原始数据中有小值及零时,亦可取X’=lg(X+1)
还可根据需要选用X’=lg(X+k)或X’=lg(k-X)
对数变换常用于(1)使服从对数正态分布的数据正态化。如环境中某些污染物的分布,人体中某些微量元素的分布等,可用对数正态分布改善其正态性。(2)使数据达到方差齐性,特别是各样本的标准差与均数成比例或变异系数CV接近于一个常数时。
2、平方根变换 即将原始数据X的平方根作为新的分布数据。
X’=sqrt(X)
平方根变换常用于:1)使服从Poission分布的计数资料或轻度偏态资料正态化,可用平方根变换使其正态化。2)当各样本的方差与均数呈正相关时,可使资料达到方差齐性。
3、倒数变换 即将原始数据X的倒数作为新的分析数据。
X’=1/X
常用于资料两端波动较大的资料,可使极端值的影响减小。
4、平方根反正旋变换 即将原始数据X的平方根反正玄值做为新的分析数据。
X’=sin-1sqrt(X)
常用于服从二项分布的率或百分比的资料。一般认为等总体率较小如<30%时或较大(如>70%时),偏离正态较为明显,通过样本率的平方根反正玄变换,可使资料接近正态分布,达到方差齐性的要求。
5. 计量经济学中常用的BOX-COX变换

6、等频归一化
通过对训练数据的分析,我们发现不同维度特征的取值分布、相同维度下特征值的差异都很大。例如距离、价格等特征的数据服从长尾分布,体现为大部分样本的特征值都比较小,存在少量样本的特征值非常大。常规的归一化方法(例如 min-max, z-score)都只是对数据的分布进行平移和拉伸,最后特征的分布仍然是长尾分布,这就导致大部分样本的特征值都集中在非常小的取值范围内,使得样本特征的区分度减小;与此同时,少量的大值特征可能造成训练时的波动,减缓收敛速度。此外也可以对特征值做对数转化,但由于不同维度间特征的分布不同,这种特征值处理的方式并不一定适用于其他维度的特征。在实践中,我们参考了Google的Wide & Deep Model[^6]中对于连续特征的处理方式,根据特征值在累计分布函数中的位置进行归一化。即将特征进行等频分桶,保证每个桶里的样本量基本相等,假设总共分了n个桶,而特征x 属于其中的第b (b ∈ {0, …, n – 1})个桶,则特征x 最终会归一化成 b /n。这种方法保证对于不同分布的特征都可以映射到近似均匀分布,从而保证样本间特征的区分度和数值的稳定性。

补充:

《特征处理之使数据分布逼近正态分布》

参考
  1. https://blog.csdn.net/xbmatrix/article/details/69360167
  2. https://baijiahao.baidu.com/s?id=1569732797373513&wfr=spider&for=pc
  3. http://blog.sina.com.cn/s/blog_1303cd95c0102vlwf.html
  4. https://blog.csdn.net/u013555719/article/details/78530879
    原文作者:Never-Giveup
    原文地址: https://blog.csdn.net/qq_36653505/article/details/86618648
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞