数据分析 - 使用boxcox将数据正态化 python版

 

box和cox在1964年提出的变换可以使线性回归模型满足线性性、独立性、齐方差性以及正态性,同时又不丢失信息。

在做线性回归的过程中,一般线性模型假定:

(线性性、独立性、齐方差性以及正态性)

真实数据往往不完美符合这四个特性,而大多数数据统计都要求数据为正态分布(比如pearson相关系数)。因此可以通过boxcox改变一下数据形式。

boxcox的数学原理:

逆变换公式:

数据分析 - 使用boxcox将数据正态化 python版_第1张图片

数据分析 - 使用boxcox将数据正态化 python版_第2张图片

boxcox的变换目标有两个:

1. 变换后,可以一定程度上减小不可观测的误差和预测变量相关性。

(主要操作是对因变量转换,使得变换后的因变量于回归自变量具有线性相依关系,误差也服从正态分布,误差各分量是等方差且相互独立。)

2. 用这个变换来使得因变量获得一些性质,比如在时间序列分析中的平稳性,或者使得因变量分布为正态分布。

 

#Check effect of Box-Cox transforms on distributions of continuous variables

fcols = 6
frows = len(cols_numeric)-1
plt.figure(figsize=(4*fcols,4*frows))
i=0

for var in cols_numeric:
    if var!='target':
        dat = df_all[[var, 'target']].dropna()
        
        i+=1
        plt.subplot(frows,fcols,i)
        sns.distplot(dat[var] , fit=stats.norm);
        plt.title(var+' Original')
        plt.xlabel('')
        
        i+=1
        plt.subplot(frows,fcols,i)
        _=stats.probplot(dat[var], plot=plt)
        plt.title('skew='+'{:.4f}'.format(stats.skew(dat[var])))
        plt.xlabel('')
        plt.ylabel('')
        
        i+=1
        plt.subplot(frows,fcols,i)
        plt.plot(dat[var], dat['target'],'.',alpha=0.5)
        plt.title('corr='+'{:.2f}'.format(np.corrcoef(dat[var], dat['target'])[0][1]))
 
        i+=1
        plt.subplot(frows,fcols,i)
        trans_var, lambda_var = stats.boxcox(dat[var].dropna()+1)
        trans_var = scale_minmax(trans_var)      
        sns.distplot(trans_var , fit=stats.norm);
        plt.title(var+' Tramsformed')
        plt.xlabel('')
        
        i+=1
        plt.subplot(frows,fcols,i)
        _=stats.probplot(trans_var, plot=plt)
        plt.title('skew='+'{:.4f}'.format(stats.skew(trans_var)))
        plt.xlabel('')
        plt.ylabel('')
        
        i+=1
        plt.subplot(frows,fcols,i)
        plt.plot(trans_var, dat['target'],'.',alpha=0.5)
        plt.title('corr='+'{:.2f}'.format(np.corrcoef(trans_var,dat['target'])[0][1]))

可以看到打印出的结果:

数据分析 - 使用boxcox将数据正态化 python版_第3张图片

 

参考:

https://zhuanlan.zhihu.com/p/36284359

 

 

你可能感兴趣的:(python,数据分析)