1. Box-Cox变换
现实中的数据未必符合正态分布,如下图:
画出分布图可以看到,这显然不是正态分布的钟形曲线。为了解决这个问题,就需要转化数据使之符合正态分布。但开始之前,我们需要衡量上图的这种“偏离”程度。于是我们引入“偏度”这个概念。
偏度(skewness),表征分布函数曲线相对于平均值的不对称程度。
- 正态分布的偏度为0,则:两侧尾部长度对称;
- 偏度为负,即负偏离(左偏离),则:数据位于平均值左边的比右边的少,直观表现为左边的尾部相对于右边的尾部要长。
- 偏度为正,即正偏离(右偏态),则:数据位于平均值右边的比左边的少,直观表现为右边的尾部相对于左边的尾部要长。
右偏时:平均数>中位数>众数,左偏时:众数>中位数>平均数。正态分布三者相等。
使用Box-Cox变换可以将数据分布的偏度降下来。
boxcox变换定义如下:
参数λ, 输入X,输出Y
i
f
λ
!
=
0
,
Y
=
(
X
λ
−
1
)
/
λ
;
i
f
λ
=
0
,
Y
=
l
o
g
(
1
+
X
)
if λ!=0,Y=(X^\lambda−1)/λ;\\ifλ=0,Y=log(1+X)
ifλ!=0,Y=(Xλ−1)/λ;ifλ=0,Y=log(1+X)
如果对图二分布进行对数变换,较小数据之间的差异将会变大(因为对数函数的斜率很小),而较大数据之间的差异将减少(因为该分布中较大数据的斜率很小)。如果你拓展了左尾的差异,减少了右尾的差异,结果将是方差恒定、形状对称的正态分布(无论均值大小如何)。
from scipy.special import boxcox1p
all_data[feat] = boxcox1p(all_data[feat], lam)