偏态数据转换为正态分布

很多算法,例如线性回归,它的推导是基于一个基本的假设-数据服从高斯分布,如果数据不服从高斯分布,那么线性回归的推导根本就是空谈.不幸的是,现实中很少有数据完美的服从高斯分布.你拿到的数据可能是这样的:

image

上面是两个偏态分布,那么我们有没有办法纠正他们呢?

偏态的度量

首先我们需要找一个直观的方式观察偏斜程度.Q-Q图是一个不错的方式.

fig = plt.figure()
res = stats.probplot(train['SalePrice'], plot=plt)
plt.show()

image

图中的横轴坐标分布是标准正态分布的分位数与数据的分位数,当数据符合标准正态分布时,正好会落到对象线的直线上.

对数变换

X=lgX
当原始数据中有小值及零时,可取 X=lg(X+1 ,还可根据需要选用 X=lg(X+k) X=lg(k-X)

对数变换常用于:

  1. 使服从对数正态分布的数据正态化。如环境中某些污染物的分布,人体中某些微量元素的分布等,可用对数正态分布改善其正态性。
  2. 使数据达到方差齐性,特别是各样本的标准差与均数成比例或变异系数CV接近于一个常数时。

平方根变换

X=sqrt(X)
平方根变换常用于:

  1. 使服从Poission分布的计数资料或轻度偏态资料正态化,可用平方根变换使其正态化。
  2. 当各样本的方差与均数呈正相关时,可使资料达到方差齐性。

倒数变换

X=1/X

常用于资料两端波动较大的资料,可使极端值的影响减小。

平方根反正旋变换

X=sin-1sqrt(X)
常用于服从二项分布的率或百分比的资料。一般认为等总体率较小如<30%时或较大(如>70%时),偏离正态较为明显,通过样本率的平方根反正玄变换,可使资料接近正态分布,达到方差齐性的要求。


编程实现:
https://www.kaggle.com/swimmingwhale/skew-normal-to-normal


参考:
https://stackoverrun.com/cn/q/9980317

posted @ 2018-10-15 15:13:36
评论加载中...
发表评论