几张图帮助快速了解内容
https://blog.csdn.net/weixin_40040404/article/details/83025039
在机器学习和深度学习中,我们经常要对输入的数据做归一化或者在隐藏层使用Batch-Normlization(BN)操作,将数据范围缩放到[0,1]或者[-1, 1]之间,主要作用:可以加快神经网络训练速度,防止过拟合。然而无论做归一化还是BN处理,虽然将数据的均值变为0,方差变为1,但是数据的整体分布并不一定服从标准的正态分布(实际数据大部分时候都不会是),做归一化和BN时,我们求出来的均值和方差,并不能说明我们数据是服从正态分布的。
我们在进行机器学习/深度学习训练的时候,往往希望数据越接近正态分布越好,这样对于训练效果会有明显的提升。
————————————新更分割线————————————
这里想讨论两点:为什么要用正态分布转换,以及什么情况下做正态分布转换。
正态分布转换有个大前提:你要做回归预测、你的学习模型涉及到联合分布概率或者参数距离的概念。
那我解释一下,
1. 如果是分类预测,你的特征-标签联合分布是一簇一簇的,没意义。另外分类中特征为正态分布,不太适合做有效特征(相关性很小的,几乎没有贡献)。
2. 如果是Tree model,对数据正态分布转换没有意义,他本质是划分特征,根据数据分布,不断去划分数据,最终得到各个叶节点,机器自己给你划分。你做了正态分布转换,只是让机器好划分一些。。。
回到提出的两个问题:
为什么要用正态分布转换
1. 首先有些模型的应用条件就是要求你的数据满足正态性分布的,比如说贝叶斯、逻辑回归、KNN、Kmean等涉及到概率分布、参数距离比较等,转换为正态分布,模型条件更充足。但并不意味着你的模型结果会更好一点。(很玄学吧,您接着看)
2. 其次正态分布,数据的泛化性高。因为自然界很多事物的概率密度很大是正态分布,你一个偏态分布(这叫数据不均衡,我这再抛个砖),会导致机器学歪了,然后用这个“歪”模型测试数据会很靠谱吗?
3. 从目标分布来说,偏态分布会导致label数据的MSE出现误导,或许结果看着很小,但实际结果很大,你可以考虑纠正一下分布正态性。(这个您自己想像,但是这个说服力不够,可以不当回事吧)
什么情况下做正态分布转换
满足大前提之后!!!再看啥时候用,小宝贝~
1. 也不是说所有分布都要转换为正态分布的,因为你不能保证正态分布就很有效,其次不是所有数据分布都类似于正态分布,可能是其他乱七八槽的分布,又或许是大数定理下的分布渐进正态性。(比如泊松分布、卡方分布等),针对这些非正态分布你就别动它啦。————什么情况下不做正态转换
2. 所以我们认为偏态分布最好纠正,或许有用(理论上有用,实际上可能没用,因为数据量的分布限制)。这就好比于“你打个喷嚏可以吃板蓝根,或许有用,或许没用,但绝对不会导致你喷嚏更加严重”,就是说针对偏态分布,你可以正态化一下,肯定不会有影响哈哈哈。这叫“不妨正态化”的说法,PS:这个不是我提的,是我一个USC的同学和我谈到了这个名词“不妨正态化”,有点意思。————什么情况下做正态分布转化
其实生活中很多都是正态分布的,最常见就是残差,比如你测量误差不满足正态分布,或者是偏态分布的,那极大可能是你的仪器测量出毛病了。
今天对正态化需不需要做了一次讨论,那么归一化和离散化需不需要呢?我这抛个砖哈(其实你可以看我的其他博客,里面有过一次讨论,默认你看不到)
我不太喜欢一些人直接上来就用模型,其实什么时候聚类、分类、离散化、归一化、正态化、相关度、特征工程都是有一套统计挖掘思想的。
————————————新更分割线————————————
我们判断数据分布与标准正态分布之间的差别主要根据两个统计量:偏度(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为基数的对数(其纠偏力度最强,有时会矫枉过正,将正偏态转换成负偏态)正偏就用两lg
另外,在计量经济学中广泛使用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.在SPSS中:
在转换-计算变量里面点进去,就可以把一个变量进行各种变换,就和计算器类似
不过最好的方法是把数据标准化,
分析——描述统计——描述,有个选项是将标准化得分另存为变量
这样你的变量都符合正态性了
或者在SPSS上的操作方法:工具栏transform-Rank cases,将左边你要进行正态化的变量拖入右边“变量”框中;点选rank types对话窗,选中normal scores选项(共四种计算方法,系统默认的是bloom计算方法,可根据你的需要进行改进),点击continue,ok。
spss会在数据观察表中生成两列新变量,其中N总分变量就是你想要的正态化结果。
7. 等频归一化
通过对训练数据的分析,我们发现不同维度特征的取值分布、相同维度下特征值的差异都很大。例如距离、价格等特征的数据服从长尾分布,体现为大部分样本的特征值都比较小,存在少量样本的特征值非常大。常规的归一化方法(例如 min-max, z-score)都只是对数据的分布进行平移和拉伸,最后特征的分布仍然是长尾分布,这就导致大部分样本的特征值都集中在非常小的取值范围内,使得样本特征的区分度减小;与此同时,少量的大值特征可能造成训练时的波动,减缓收敛速度。此外也可以对特征值做对数转化,但由于不同维度间特征的分布不同,这种特征值处理的方式并不一定适用于其他维度的特征。在实践中,我们参考了Google的Wide & Deep Model[^6]中对于连续特征的处理方式,根据特征值在累计分布函数中的位置进行归一化。即将特征进行等频分桶,保证每个桶里的样本量基本相等,假设总共分了n个桶,而特征x 属于其中的第b (b ∈ {0, …, n - 1})个桶,则特征x 最终会归一化成 b /n。这种方法保证对于不同分布的特征都可以映射到近似均匀分布,从而保证样本间特征的区分度和数值的稳定性。
补充:
box-cox:https://blog.csdn.net/sinat_26917383/article/details/77864582
https://wenku.baidu.com/view/96140c8376a20029bd642de3.html
优势:
- 线性回归模型满足线性性、独立性、方差齐性以及正态性的同时,又不丢失信息,此种变换称之为Box—Cox变换。
- 误差与y相关,不服从正态分布,于是给线性回归的最小二乘估计系数的结果带来误差
- 使用Box-Cox变换族一般都可以保证将数据进行成功的正态变换,但在二分变量或较少水平的等级变量的情况下,不能成功进行转换,此时,我们可以考虑使用广义线性模型,如Logistics模型、Johnson转换等。
- Box-Cox变换后,残差可以更好的满足正态性、独立性等假设前提,降低了伪回归的概率
其中:
在一些情况下(P值<0.003)很难实现正态化处理,所以优先使用Box-Cox转换,但是当P值>0.003时两种方法均可,优先考虑普通的平方变换。
- 此时的检验步骤为:先对数据进行正态性检验 -> 观察检验的P值 -> 根据P值挑选合适的box-cox转换函数
常规的经济学转换方式:
log,对数转换,是使用最多的(数据必须大于0) log1p
还有:
Box-Cox变换的正态变换:
代码: 利用llf获得优化后的lambda