转载自:https://blog.csdn.net/csdn_lzw/article/details/83387570
及:https://blog.csdn.net/sinat_26917383/article/details/77864582

一、何为数据的偏态分布?

频数分布有正态分布和偏态分布之分。正态分布是指多数频数集中在中央位置,两端的频数分布大致对称。

偏态分布是指频数分布不对称,集中位置偏向一侧。若集中位置偏向数值小的一侧,称为正偏态分布;集中位置偏向数值大的一侧,称为负偏态分布。

如果频数分布的高峰向左偏移,长尾向右侧延伸称为正偏态分布,也称右偏态分布;同样的,如果频数分布的高峰向右偏移,长尾向左延伸则成为负偏态分布,也称左偏态分布。

峰左移,右偏,正偏 偏度大于0

峰右移,左偏,负偏 偏度小于0

二、构建模型时为什么要尽量将偏态数据转换为正态分布数据?

数据整体服从正态分布,那样本均值和方差则相互独立。正态分布具有很多好的性质,很多模型假设数据服从正态分布。例如线性回归(linear regression),它假设误差服从正态分布,从而每个样本点出现的概率就可以表示成正态分布的形式,将多个样本点连乘再取对数,就是所有训练集样本出现的条件概率,最大化这个条件概率就是LR要最终求解的问题。这里这个条件概率的最终表达式的形式就是我们熟悉的误差平方和。总之, ML中很多model都假设数据或参数服从正态分布。

三:如何检验样本是否服从正态分布?

可以使用Q-Q图来进行检验
https://baike.baidu.com/item/Q-Q图

统计学里Q-Q图(Q代表分位数)是一个概率图,用图形的方式比较两个概率分布,把他们的两个分位数放在一起比较。首先选好分位数间隔。图上的点(x,y)反映出其中一个第二个分布(y坐标)的分位数和与之对应的第一分布(x坐标)的相同分位数。因此,这条线是一条以分位数间隔为参数的曲线。
如果两个分布相似,则该Q-Q图趋近于落在y=x线上。如果两分布线性相关,则点在Q-Q图上趋近于落在一条直线上,但不一定在y=x线上。Q-Q图可以用来可在分布的位置-尺度范畴上可视化的评估参数。

由于P-P图和Q-Q图的用途完全相同,只是检验方法存在差异。要利用QQ图鉴别样本数据是否近似于正态分布,只需看QQ图上的点是否近似地在一条直线附近,而且该直线的斜率为标准差,截距为均值.

举例:

from 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()

四 :如果不是正态分布怎么办?

数据右偏的话可以对所有数据取对数、取平方根等,它的原理是因为这样的变换的导数是逐渐减小的,也就是说它的增速逐渐减缓,所以就可以把大的数据向左移,使数据接近正态分布。
如果左偏的话可以取相反数转化为右偏的情况。

举例:

#用对数化解决偏态 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()

五、Box-Cox

https://blog.csdn.net/lcmssd/article/details/80179102?utm_source=blogxgwz0
参加kaggle比赛过程中,看到很多人在预处理阶段会对某些特征X做如下操作 Y = log(1+X), 说是可以把这个特征的分布正态化, 使其更加符合后面数据挖掘方法对数据分布的假设

y={xλ−1λ,λ≠0log⁡x,λ=0y=\begin{cases}\frac{x^\lambda -1}{\lambda},& \lambda \neq 0 \\ \log x,& \lambda =0 \end{cases} y={λxλ−1​,logx,​λ̸​=0λ=0​

上图lambda取不同值时, (X,Y)的曲线, boxcox变换的工作原理就在这些曲线的斜率中: 曲线斜率越大的区域,则对应区域的X变换后将被拉伸, 变换后这段区域的方差加大; 曲线斜率越小的区域, 对应区域的X变换后将被压缩, 变换后这段区域的方差变小.
右图中看出lambda = 0时, 取值较小的部分被拉伸, 取值较大的部分被压缩; lambda > 1时则相反。

所以boxcox变换的应用必须先分析输入X的分布是哪一种偏斜: X分布左偏,则应该应用lambda = 0的变换; X分布又偏,则应该应用lambda > 1的变换.

http://onlinestatbook.com/2/transformations/box-cox.html

优势

  • 线性回归模型满足线性性、独立性、方差齐性以及正态性的同时,又不丢失信息,此种变换称之为Box—Cox变换。
  • 误差与y相关,不服从正态分布,于是给线性回归的最小二乘估计系数的结果带来误差
  • 使用Box-Cox变换族一般都可以保证将数据进行成功的正态变换,但在二分变量或较少水平的等级变量的情况下,不能成功进行转换,此时,我们可以考虑使用广义线性模型,如LOGUSTICS模型、Johnson转换等。
  • Box-Cox变换后,残差可以更好的满足正态性、独立性等假设前提,降低了伪回归的概率

其中

在一些情况下(P值<0.003)上述方法很难实现正态化处理,所以优先使用Box-Cox转换,但是当P值>0.003时两种方法均可,优先考虑普通的平方变换。

此时的检验步骤为:先对数据进行正态性检验 -> 观察检验的P值 -> 根据P值挑选合适的box-cox转换函数


常规的经济学转换方式

log,对数转换,是使用最多的(数据必须大于0)
还有:
平方根转换
倒数转换
平方根后取倒数
平方根后再取反正弦
幂转换

Box-Cox变换的正态变换

数据不比大于>0

没有Box-Cox变换的回归

Box-Cox变换之后的回归

数据预处理--对偏态数据相关推荐

  1. 地铁大数据挖掘之数据预处理——从原始一卡通数据提取城市地铁客流(一)

    这是很久以前写的一段代码,很简单很基础.最近突然用到,这里把它分享出来,希望可以为有需要的朋友提供帮助. 以及欢迎阅读这一系列第二篇:地铁大数据挖掘之客流数据预处理--从原始一卡通数据提取城市地铁客流 ...

  2. 地铁大数据挖掘之数据预处理——从原始一卡通数据提取城市地铁客流(二)

    关于初步处理,请参考地铁大数据挖掘之客流数据预处理--从原始一卡通数据提取城市地铁客流(一). 上一篇博客对数据进行了初步处理,得到结果如下图: "_10min"字段代表所处的时间 ...

  3. 数据预处理--噪声_为什么数据对您的业务很重要-以及如何处理数据

    数据预处理--噪声 YES! Data is extremely important for your business. 是! 数据对您的业务极为重要. A human body has five ...

  4. cnn对网络数据预处理_CNN中的数据预处理和网络构建

    cnn对网络数据预处理 In this article, we will go through the end-to-end pipeline of training convolution neur ...

  5. python数据预处理代码_Python中数据预处理(代码)

    本篇文章给大家带来的内容是关于Python中数据预处理(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.1.导入标准库import numpy as np import matp ...

  6. matlab主要数据预处理函数,Matlab 神经网数据预处理的函数

    Matlab 神经网数据预处理的函数 poststd 后处理由 PRESTD 预处理的数据 在 R2006a NNET 5.0 中已经过时最后用于 R2005b NNET 4.0.6 句法[p,t]= ...

  7. 3.4 数据预处理(一) - 数据集成(Data Integration)

    简介 数据集成(Data Integration)是一个数据整合的过程.通过综合各数据源,将拥有不同结构.不同属性的数据整合归纳在一起,就是数据集成.由于不同的数据源定义属性时命名规则不同,存入的数据 ...

  8. 系列文章(一):机器学习与深度学习——数据预处理(数值型数据)

    系列文章(一):机器学习与深度学习中的数据预处理(数值型数据) 目录 系列文章(一):机器学习与深度学习中的数据预处理(数值型数据) 一.引言 1.1 为何预处理(Why preprocessing? ...

  9. python数据预处理之将类别数据转换为数值的方法

    在进行python数据分析的时候,首先要进行数据预处理. 有时候不得不处理一些非数值类别的数据,嗯, 今天要说的就是面对这些数据该如何处理. 目前了解到的大概有三种方法: 1,通过LabelEncod ...

最新文章

  1. JavaScript之各种继承方式和优缺点
  2. jdk安装教程_在JDK 12精简数字格式中使用最小分数数字
  3. BJOI 2012 求和
  4. oracle表名最大长度6,Oracle中表名的最大长度是多less?
  5. ssh 双机互信配置记要
  6. sparksql 操作hive_Spark SQL 物化视图原理与实践
  7. 驱动人生安装驱动计算机无法启动,驱动人生打开时出错怎么办
  8. fgets,cin. getline被跳过
  9. 软件测试肖sir__简历模板制作
  10. 【xv6 RISC-V】xv6操作系统原理解析与源代码阅读报告
  11. imageJ 如何下载plugin_尺寸统计软件Nano measurer详细使用教程(附下载链接)
  12. 非对称加密算法RSA加密解密流程
  13. 怎么查询显卡hdmi接口版本_HDMI接口基础知识大扫盲
  14. Prisma(一)——基础
  15. 你是外包,麻烦不要偷吃零食。。注意素质!
  16. Reporting Services 配置工具
  17. 计算机一级更换桌面,2018自动替换壁纸工具
  18. 微信开发实战(2)—微信公众平台接口调试工具
  19. skycc营销软件奔向创意的天际
  20. 用 Python 做数学建模

热门文章

  1. 大连工业大学艺术学院计算机考试,大连工业大学艺术与信息工程学院
  2. Java第三十三天,IO操作(续集),字符转换流
  3. Oracle根据当前时间获取最近5年,最近6个月,最近30天的时间
  4. 机器学习笔记---从极大似然估计的角度看待Logistic回归
  5. 怎样修复计算机系统声音,电脑没声音了如何恢复?电脑突然没声音修复方法汇总...
  6. HD7刷android2.2全教程
  7. 高级计算机网络实验——c++实现ping工具
  8. 服务器优盘启动安装win7系统教程,晨枫u盘启动工具安装原版Win7的两种方法(32位64位系统通用)...
  9. H5活动邀请函用这个就可以了
  10. 第三届世界5G大会召开之前,我们来复习一下这本6G白皮书