ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

boxcox1p

2021-08-16 12:00:40  阅读:302  来源: 互联网

标签:boxcox1p 偏度 尾部 变换 数据 正态分布


大多数机器学习模型对非正态分布的数据的效果不佳,因此,我们对数据进行变换boxcox1p
https://zhuanlan.zhihu.com/p/53288624

搭建模型,特别是线性模型是希望数据符合正态分布的,但现实中的数据并不符合。

今天讲讨论其中的一种情况。

长跑比赛中,跑得最快的几个人之间相差的时间很短。而最慢的跑步者之间,跑步完成时间差异将非常大。这种现象被称为“异方差性”。在这个例子中,变异量取决于平均值(完成时间短的差异小,完成时间长的差异大)。

画出分布图可以看到,这显然不是正态分布的钟形曲线。为了解决这个问题,就需要转化数据使之符合正态分布。但开始之前,我们需要衡量上图的这种“偏离”程度。于是我们引入“偏度”这个概念。

偏度skewness,表征分布函数曲线相对于平均值的不对称程度。直观看来就是分布函数曲线尾部的相对长度。
正态分布的偏度为0,则:两侧尾部长度对称;
偏度为负,即负偏离(左偏离),则:数据位于平均值左边的比右边的少,直观表现为左边的尾部相对于右边的尾部要长。
偏度为正,即正偏离(右偏态),则:数据位于平均值右边的比左边的少,直观表现为右边的尾部相对于左边的尾部要长。
右偏时:平均数>中位数>众数,左偏时:众数>中位数>平均数。正态分布三者相等。

代码:

Box-Cox转换
解决这个问题的一个方法是使用Box-Cox转换将数据转换为正态。

这里λ是一个待定变换参数。对不同的λ,所做的变换自然就不同。它包括了对数变换(λ=0),平方根变换(λ=1/2)和倒数变换(λ=-1)等常用变换。那么怎么去确定呢,这里使用的方法是假设经过转换后的因变量就是服从正态分布的,然后画出关于[公式]的似然函数,似然函数值最大的时候[公式]的取值就是这里的值。##因此会结合boxcox_normmax进行使用,比如 features[column] = boxcox1p(features[column], boxcox_normmax(features[column] + 1))

如果对图二分布进行对数变换,较小数据之间的差异将会变大(因为对数函数的斜率很小),而较大数据之间的差异将减少(因为该分布中较大数据的斜率很小)。如果你拓展了左尾的差异,减少了右尾的差异,结果将是方差恒定、形状对称的正态分布(无论均值大小如何)。

from scipy.special import boxcox1p
all_data[feat] = boxcox1p(all_data[feat], lam)

标签:boxcox1p,偏度,尾部,变换,数据,正态分布
来源: https://www.cnblogs.com/pyclq/p/15147058.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有