ML基础 | 一文详解正态分布(附python实现)
正态分布简介
你听说过钟形曲线吗?它往往是全球人们讨论最多的话题之一。很长一段时间以来,钟形曲线决定了对员工的专业评估,可以是一个受人喜爱或令人恐惧的话题,而这取决于与谁交谈!
看看这张图片:
你认为曲线的形状意味着什么?作为一个数据科学家(或一个有抱负的科学家),你应该能够马上回答这个问题。在许多其他应用中,钟形曲线背后的思想是正态分布。
正态分布是统计学的核心概念,是数据科学的支柱。在进行探索性数据分析时,我们首先探索数据,而目的是找出其概率分布,对吗?猜猜看,最常见的概率分布是什么?就是正态分布。
看看这三个非常常见的正态分布示例:
你可以清楚地看到,出生体重、智商得分和股价回报率往往形成一个钟形曲线。同样,还有许多其他的社会和自然数据集遵循正态分布。
正态分布对数据科学家来说变得至关重要的另一个原因是中心极限定理,这个定理解释了数学的魔力,是假设检验的基础。
中心极限定理:https://www.analyticsvidhya.com/blog/2019/05/statistics-101-introduction-central-limit-theorem/?utm_source=blog&utm_medium=statistics-data-science-normal-distribution
在本文中,我们将了解正态分布的意义和不同性质,以及如何使用这些性质来检查数据的正态性。
目录
正态分布的性质
正态分布的经验法则
什么是标准正态分布?
熟悉偏态分布
左偏分布
右偏分布
如何检验分布的正态性
直方图
KDE图
Q_Q图
偏度
峰度
实现和理解正态分布的Python代码
正态分布的性质
我们称这条钟形曲线为正态分布,卡尔·弗里德里希·高斯发现了它,所以有时我们也把它称为高斯分布。
我们只需使用两个参数即可简化正态分布的概率密度:平均值????和????2。这条曲线是围绕平均值对称的,同样如你所见,对于这种分布,均值,中位数和众数都相同。
正态分布的一个更重要的现象是,它始终保持正态形状,不像其他概率分布在变换后改变了其性质。对于正态分布:
两个正态分布的乘积为正态分布
两个正态分布之和是正态分布
两个正态分布的卷积也是正态分布
正态分布的傅里叶变换也是正态分布
开始意识到这个不可思议的概念的力量了吗?
正态分布的经验法则
你听说过经验法则吗?这是统计学中常用的概念(在很多绩效评估中也是如此):
根据正态分布的经验法则:
68.27%的数据在平均值的1个标准差内
95.45%的数据在平均值的2个标准差内
99.73%的数据在平均值的3个标准差内
因此,几乎所有的数据都在3个标准差之内。此规则使我们能够检查异常值,在确定任何分布的正态性时都非常有用。
什么是标准正态分布?
标准正态分布是正态分布的特例,它的 ????=0 且 ????=1。对于任何正态分布,我们可以使用以下公式将其转换为标准正态分布:
为了理解将正态分布转换为标准正态分布的重要性,我们假设有两个学生:Ross和Rachel。Ross生物学考试得了65分,Rachel时装设计考试得了80分。
我们能断定Rachel的得分比Ross好吗?
不,因为人们在生物学中的表现可能不同于人们在时装设计中的表现,这里的可变性可能不一样。
所以,仅仅看分数直接比较是行不通的。
现在,假设生物学标志遵循正态分布,平均值为60,标准差为4。另一方面,服装设计得分服从正态分布,均值79,标准差2。
我们必须通过标准化这两种分布来计算z分数:
因此,Ross的标准差高于平均分1.25分,而Rachel的标准差仅高于平均分0.5分。因此我们可以说Ross的表现比Rachel好。
熟悉偏态分布
正态分布是对称的,这意味着它一侧的尾部是另一侧的镜像。但大多数数据集都不是这样。通常情况下,数据点在一侧聚集的次数多于另一侧,我们称这类分布为偏态分布。
左偏分布
当数据点在分布的右侧聚集时,则尾部在左侧较长,这是左偏分布的性质。尾部在负方向较长,所以我们也叫它负偏态分布。
在这里,Mode > Median > Mean
即,众数 > 中数 > 平均值
在正态分布中,平均值、中数和众数相等,但在负偏态分布中,我们将测量的中心趋势之间的一般关系表示为:
众数 > 中数 > 平均值
右偏分布
当数据点在分布的左侧聚集时,则尾部在右侧较长,这是右偏分布的性质。在这里,正方向的尾部更长,所以我们也叫它正偏态分布。
在正偏态分布中,我们将测量的中心趋势之间的一般关系表示为:
众数 < 中数 < 平均值
如何检验分布的正态性
大问题!为了检验数据的正态性,让我们举一个例子,我们有1000名学生的数学、英语和历史分数信息。你可以在下面的网址里找到数据。
https://drive.google.com/file/d/1YCFsz9DNc7X3uyYwqNDzjjcYo634ZruT/view?usp=sharing
你可以在本文后面部分找到代码。
让我们看看几种不同的方法来检验分布的正态性。
直方图
柱状图显示连续区间内数据的分布
直方图中的每个柱子表示每个区间的频率
简单地说,高度表示各个区间的频率
如你所见,数学分数服从正态分布,英语分数服从右偏态分布,历史分数服从左偏态分布。
KDE图
如果设置不同数量的区间,或者仅仅更改区间的起始值和结束值,直方图的结果可能会有很大的变化,为了克服这个问题,我们可以利用密度函数。
密度图是根据数据估计的直方图的平滑连续版本。最常见的估计形式是核密度估计(KDE),在这种方法中,在每个单独的数据点绘制一条连续曲线(核),然后将所有这些曲线加在一起,进行单次平滑密度估计。
Q_Q图
分位数是将概率分布的范围划分为具有相等概率的连续区间或以相同方式划分样本中的观测值的切点。
2分位数被称为中值
4分位数被称为四分位数
10分位数被称为十分位数
100分位数被称为百分位数
10分位数将正态分布分成10个部分,每个部分有10%的数据点。Q-Q图或分位数图是通过相互绘制两组分位数而创建的散点图。
这里,我们将绘制理论正态分布分位数,并将其与观测数据分位数进行比较:
对于数学分数,值基本沿着直线表示它们是正态分布的。另一方面,对于英文分数,正态分布中较大的值比预期的大,而正态分布中较小的值比预期的小,在右偏分布中也是如此。
而对于历史分数,较大的值并不像正态分布所期望的那么大,较小的值也比正态分布所期望的要小,在左偏分布中也是如此。
偏度
偏度也是另一种检查正态性的度量值,它告诉我们偏离数据点的数量和方向。偏度值的几种情况:
如果该值小于-0.5,我们认为分布是负偏或左偏的,其中数据点在分布的右侧聚集,而尾部在分布的左侧较长
如果该值大于0.5,我们认为分布是正偏或右偏的,其中数据点在分布的左侧聚集,而尾部在分布的右侧较长
最后,如果这个值在-0.5到0.5之间,我们认为这个分布是近似对称的
峰度
另一个检查正态性的数值方法是峰度。峰度给出了关于曲线尾部的信息,这基本上表明了沿尾部的数据分布。
对于对称分布类型,峰度值将接近于零。我们称这种分布为常峰态分布。其尾部与高斯分布相似。
如果数据中存在极值,则意味着更多的数据点将与尾部一起。在这种情况下,K的值将大于零。在这里,尾巴会更“肥”,分布也会更长,我们称这类分布为尖峰分布。我们在这里可以清楚地看到,与高斯分布相比,尾巴更肥更密:
如果与正态分布相比,极值的存在率较低,那么较少的数据点将位于尾部。在这种情况下,峰度值将小于零,我们把这种分布称为低峰态分布 。比起正态分布,它将有一个较薄的尾巴和较短的分布。
实现和理解正态分布的Python代码
下面是实现和理解正态分布如何工作的完整Python代码。
import numpy as npimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltimport statsmodels.api as sm
df = pd.read_csv('Marks.csv')
def UVA_numeric(data): var_group = data.columns size = len(var_group) plt.figure(figsize = (7*size,3), dpi = 400)#looping for each variable for j,i in enumerate(var_group):# calculating descriptives of variable mini = data[i].min() maxi = data[i].max() ran = data[i].max()-data[i].min() mean = data[i].mean() median = data[i].median() st_dev = data[i].std() skew = data[i].skew() kurt = data[i].kurtosis()# calculating points of standard deviation points = mean-st_dev, mean+st_dev#Plotting the variable with every information plt.subplot(1,size,j+1) sns.distplot(data[i],hist=True, kde=True)sns.lineplot(points, [0,0], color = 'black', label = "std_dev") sns.scatterplot([mini,maxi], [0,0], color = 'orange', label = "min/max") sns.scatterplot([mean], [0], color = 'red', label = "mean") sns.scatterplot([median], [0], color = 'blue', label = "median") plt.xlabel('{}'.format(i), fontsize = 20) plt.ylabel('density') plt.title('std_dev = {}; kurtosis = {};\nskew = {}; range = {}\nmean = {}; median = {}'.format((round(points[0],2),round(points[1],2)),
round(kurt,2),
round(skew,2),
(round(mini,2),round(maxi,2),round(ran,2)),
round(mean,2),
round(median,2)))
UVA_numeric(df)
尾注
在本文中,我们逐步的来理解正态分布的基本原理,了解了如何确定正态性的一些概念,如直方图、KDE、Q_Q图、偏度和峰度。
关于统计概念的更多细节,你也可以阅读这些文章:
每个数据科学专业人员都应该知道的6种常见的概率分布
https://www.analyticsvidhya.com/blog/2017/09/6-probability-distributions-data-science
中心极限定理导论
https://www.analyticsvidhya.com/blog/2019/05/statistics-101-introduction-central-limit-theorem
原文链接:https://www.analyticsvidhya.com/blog/2020/04/statistics-data-science-normal-distribution/
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文(无广告)。
↓扫描二维码添加小编↓
ML基础 | 一文详解正态分布(附python实现)相关推荐
- 【卷积神经网络结构专题】一文详解AlexNet(附代码实现)
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]本文是卷积神经网络结构系列专题第二篇文章,前面我们已经介绍了第一个真正意义 ...
- 计算机网络基础——一文详解IPv4与子网划分
IPv4地址概述 在因特网中,为了实现计算机之间的相互通信,通常需要为每台计算机分配一个IP地址.在互联网的发展过程中主要有两个版本的互联网协议,分别是IPv4(Internet Protocol v ...
- python 编辑距离_编辑距离(Levenshtein距离)详解(附python实现)
编辑距离定义: 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数. 许可的编辑操作包括:将一个字符替换成另一个字符,插入一个字符,删除一个字符. 例如 ...
- python训练手势分类器_使用Pytorch训练分类器详解(附python演练)
[前言]:你已经了解了如何定义神经网络,计算loss值和网络里权重的更新.现在你也许会想数据怎么样? 目录: 一.数据 二.训练一个图像分类器 使用torchvision加载并且归一化CIFAR10的 ...
- 干货| LeNet-5模型详解(附Python详细代码及注释)
LeNet-5模型是Yann LeCun教授与1998年在论文Gradient-based learning applied to document recognition中提出的,它是第一个成功应用 ...
- 剑指offer python实现_剑指Offer第2题详解(附Python、Java代码实现)
题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 这个题较为 ...
- Stacking 模型融合详解(附python代码)
向AI转型的程序员都关注了这个号
- 数字水印技术:LSB加密详解(附python代码)
概要 数字水印是一种将标识信息嵌入到载体当中,且不影响载体使用的一种技术,主要分为时域水印嵌入算法(将水印嵌入到时域采样数据中)和变换域水印嵌入算法(先对音频做变换,将水印嵌入到变换域系数中).本文主 ...
- 【特征描述】ORB详解(附python实例代码)
文章目录 特征描述 ORB ORB特征描述 ORB的基本思路 FAST角点检测的缺点 BRIEF的缺点 BRIEF ORB对BRIEF的改进 完整代码如下 特征描述 ORB ORB 算法创建的特征向量 ...
最新文章
- CVPR论文 | 所见所想所找:基于生成模型的跨模态检索
- [AWS vs Azure] 云计算里AWS和Azure的探究(5) ——EC2和Azure VM磁盘性能分析
- node.js学习笔记(21) express日志
- 使用Eclipsephp工具打开Thinkphp为什么会有红色的波浪线报警?
- 类型上限_类型或可成为影视市场下一红利点__枫筹网
- [转载] 手工制作Win7 OEM版
- 对keep-alive组件的理解
- 个人或公司微信公众号迁移转让流程,公证需要资料,订阅号服务号转移教程,怎么迁移
- python将xls格式转成xlsx格式
- 数字信号中的各种频率
- Foxmail登录网易邮箱提示LOGIN Login error user suspended
- CefSharp的ChromiumWebBrowser截出来的图片是空白
- English Summary~August
- DRF学习之短信验证的实现用户注册(十二)
- 智慧厕所厕位引导系统怎么建?中期科技zontree智慧公厕一探究竟
- python语言语句单词大全及读音_python单词怎么读
- [Error]cannot convert 'float'tot float for argument 1to floa
- C++57个入门知识点_17 类的访问权限及C语言模拟类的封装(类的私有权限突破方法:编译期进行权限检查,运行期通过指针修改类的私有成员变量;利用函数指针对结构体中成员变量进行修改;CPU大小尾排列)
- 魅族手机MX4 MX4 Pro 魅蓝note 无法连接USB调试,adb连不上问题的解决方案
- 花10分钟看一下少走30年弯路