
2020-07-17
在数据处理过程中,经常会遇到偏态数据。我们都知道数据整体服从正态分布,那样本均值和方差则相互独立。因此大家都会希望数据事成正态分布的,但是现实情况却是:大多数情况下,数据都是偏态分布的,这时候就需要我们将偏态数据正态化。今天,小编跟大家分享的就是将偏态数据正态化的处理方法,希望对大家研究和学习偏态数据有所帮助。
一、正态分布和偏态分布
首先我们先来了解一下什么是正态分布,什么是偏态分布。
由图中可知,正态分布,两头低,中间高,整个形态是对称钟形的一个分布的状态。大量连续数据测量时,我们最希望的就是数据可以成这种状态,也就是正态分布,一个标准的正态分布是u(均值)=0.σ(标准差)=1.
横坐标代表随机变量X的一个取值,在均值(u=0)附近概率密度最大,越偏离均值,概率密度减小,不在(u-3σ,u+3σ)范围内的数据就属于统计学意义上的异常值了。
根据图中可以看出,偏态分布,分为两种情况,左偏又叫负偏态,以及右偏又叫正偏态,也可以用偏度来表示,偏度>0.也就是频数分布的高峰向左偏移,呈右(正)偏态分布;偏度<0.即频数分布的高峰向右偏移,呈左(负)偏态分布;|偏度|>1.呈高度偏态,0.5<|偏度|<1.呈中等偏态。
二、检验数据是否服从正态分布
rom scipy.stats import norm sns.distplot(train['SalePrice'],fit=norm) #均值和方差 (mu,sigma) = norm.fit(train['SalePrice']) print('\n mu = {:.2f} and sigma = {:.2f}\n'.format(mu, sigma)) plt.legend(['Normal dist. ($\mu=$ {:.2f} and $\sigma=$ {:.2f} )'.format(mu, sigma)], loc='best') plt.ylabel('Frequency') plt.title('SalePrice distribution') fig =plt.figure() res = stats.probplot(train['SalePrice'], plot=plt) plt.show()
三、偏态数据处理
如果检测到数据是呈偏态分布,我们需要将其其变换为正态分布,常用的几种变换方式为:
1、对数变换:即将原始数据X的对数值作为新的分布数据,适用于相乘关系的数据、高度偏态的数据
2、平方根变换:即即将原始数据X的平方根作为新的分布数据。适用于泊松分布(方差与均数近似相等)的数据、轻度偏态的数据
3、倒数变换1/x:即将原始数据X的倒数作为新的分析数据。适用于两端波动较大的数据
4、反正弦变换:即将原始数据X的平方根反正弦值做为新的分析数据。适用于百分比的数据、中度偏态的数据
#用对数化解决偏态 log(1+x) train['SalePrice'] = np.log1p(train['SalePrice']) sns.distplot(train['SalePrice'],fit=norm) (mu, sigma) = norm.fit(train['SalePrice']) print( '\n mu = {:.2f} and sigma = {:.2f}\n'.format(mu, sigma)) #Now plot the distribution plt.legend(['Normal dist. ($\mu=$ {:.2f} and $\sigma=$ {:.2f} )'.format(mu, sigma)], loc='best') plt.ylabel('Frequency') plt.title('SalePrice distribution') #Get also the QQ-plot fig = plt.figure() res = stats.probplot(train['SalePrice'], plot=plt) plt.show()
完 谢谢观看