如何在python中实现这五类强大的概率分布

author author     2023-04-04     507

关键词:

参考技术A R编程语言已经成为统计分析中的事实标准。但在这篇文章中,我将告诉你在Python中实现统计学概念会是如此容易。我要使用Python实现一些离散和连续的概率分布。虽然我不会讨论这些分布的数学细节,但我会以链接的方式给你一些学习这些统计学概念的好资料。在讨论这些概率分布之前,我想简单说说什么是随机变量(random variable)。随机变量是对一次试验结果的量化。
举个例子,一个表示抛硬币结果的随机变量可以表示成

Python

1
2

X = 1 如果正面朝上,
2 如果反面朝上

随机变量是一个变量,它取值于一组可能的值(离散或连续的),并服从某种随机性。随机变量的每个可能取值的都与一个概率相关联。随机变量的所有可能取值和与之相关联的概率就被称为概率分布(probability distributrion)。
我鼓励大家仔细研究一下scipy.stats模块。
概率分布有两种类型:离散(discrete)概率分布和连续(continuous)概率分布。
离散概率分布也称为概率质量函数(probability mass function)。离散概率分布的例子有伯努利分布(Bernoulli distribution)、二项分布(binomial distribution)、泊松分布(Poisson distribution)和几何分布(geometric distribution)等。
连续概率分布也称为概率密度函数(probability density function),它们是具有连续取值(例如一条实线上的值)的函数。正态分布(normal distribution)、指数分布(exponential distribution)和β分布(beta distribution)等都属于连续概率分布。
若想了解更多关于离散和连续随机变量的知识,你可以观看可汗学院关于概率分布的视频。
二项分布(Binomial Distribution)
服从二项分布的随机变量X表示在n个独立的是/非试验中成功的次数,其中每次试验的成功概率为p。

E(X) = np, Var(X) = np(1−p)
如果你想知道每个函数的原理,你可以在IPython笔记本中使用help file命令。 E(X)表示分布的期望或平均值。
键入stats.binom?了解二项分布函数binom的更多信息。
二项分布的例子:抛掷10次硬币,恰好两次正面朝上的概率是多少?
假设在该试验中正面朝上的概率为0.3,这意味着平均来说,我们可以期待有3次是硬币正面朝上的。我定义掷硬币的所有可能结果为k = np.arange(0,11):你可能观测到0次正面朝上、1次正面朝上,一直到10次正面朝上。我使用stats.binom.pmf计算每次观测的概率质量函数。它返回一个含有11个元素的列表(list),这些元素表示与每个观测相关联的概率值。
您可以使用.rvs函数模拟一个二项随机变量,其中参数size指定你要进行模拟的次数。我让Python返回10000个参数为n和p的二项式随机变量。我将输出这些随机变量的平均值和标准差,然后画出所有的随机变量的直方图。

泊松分布(Poisson Distribution)
一个服从泊松分布的随机变量X,表示在具有比率参数(rate parameter)λ的一段固定时间间隔内,事件发生的次数。参数λ告诉你该事件发生的比率。随机变量X的平均值和方差都是λ。

E(X) = λ, Var(X) = λ
泊松分布的例子:已知某路口发生事故的比率是每天2次,那么在此处一天内发生4次事故的概率是多少?
让我们考虑这个平均每天发生2起事故的例子。泊松分布的实现和二项分布有些类似,在泊松分布中我们需要指定比率参数。泊松分布的输出是一个数列,包含了发生0次、1次、2次,直到10次事故的概率。我用结果生成了以下图片。
你可以看到,事故次数的峰值在均值附近。平均来说,你可以预计事件发生的次数为λ。尝试不同的λ和n的值,然后看看分布的形状是怎么变化的。
现在我来模拟1000个服从泊松分布的随机变量。

正态分布(Normal Distribution)
正态分布是一种连续分布,其函数可以在实线上的任何地方取值。正态分布由两个参数描述:分布的平均值μ和方差σ2 。

E(X) = μ, Var(X) = σ2
正态分布的取值可以从负无穷到正无穷。你可以注意到,我用stats.norm.pdf得到正态分布的概率密度函数。
β分布(Beta Distribution)
β分布是一个取值在 [0, 1] 之间的连续分布,它由两个形态参数α和β的取值所刻画。

β分布的形状取决于α和β的值。贝叶斯分析中大量使用了β分布。
当你将参数α和β都设置为1时,该分布又被称为均匀分布(uniform distribution)。尝试不同的α和β取值,看看分布的形状是如何变化的。
指数分布(Exponential Distribution)
指数分布是一种连续概率分布,用于表示独立随机事件发生的时间间隔。比如旅客进入机场的时间间隔、打进客服中心电话的时间间隔、中文维基百科新条目出现的时间间隔等等。

我将参数λ设置为0.5,并将x的取值范围设置为 $[0, 15]$ 。
接着,我在指数分布下模拟1000个随机变量。scale参数表示λ的倒数。函数np.std中,参数ddof等于标准偏差除以 $n-1$ 的值。

结语(Conclusion)
概率分布就像盖房子的蓝图,而随机变量是对试验事件的总结。我建议你去看看哈佛大学数据科学课程的讲座,Joe Blitzstein教授给了一份摘要,包含了你所需要了解的关于统计模型和分布的全部。

如何在python中实现概率分布的合并?

】如何在python中实现概率分布的合并?【英文标题】:HowtoimplementConflationforprobabilitydistributioninpython?【发布时间】:2021-01-2810:26:09【问题描述】:我在网上寻找将几个连续概率分布组合成一个连续概率分布的方法。这种方法称为C... 查看详情

如何在 Python 中实现机会/概率? [复制]

】如何在Python中实现机会/概率?[复制]【英文标题】:HowcanIimplementchance/probabilityintoPython?[duplicate]【发布时间】:2021-04-0722:09:36【问题描述】:我想让Python在70%的情况下打印“是”,在30%的情况下打印“否”。我该怎么做呢?【... 查看详情

如何在 Scipy 中实现日志均匀分布?

】如何在Scipy中实现日志均匀分布?【英文标题】:HowtoimplementaloguniformdistributioninScipy?【发布时间】:2018-09-0708:27:00【问题描述】:我不明白如何在Scipy中实现对数均匀概率分布。根据thispost的cmets,可以通过只定义_pdf来实现。另... 查看详情

我将如何通过仿射变换在opencv中实现这一点?

】我将如何通过仿射变换在opencv中实现这一点?【英文标题】:HowwouldIachievethisinopencvwithanaffinetransform?【发布时间】:2017-08-1922:00:10【问题描述】:我想知道如何复制此图像中正在执行的操作:分解:使用dlib(绿点)获取面部特... 查看详情

如何在 Apache Spark Java 或 Scala 中实现这一点?

】如何在ApacheSparkJava或Scala中实现这一点?【英文标题】:HowdoIachievethisinApacheSparkJavaorScala?【发布时间】:2018-08-0102:14:44【问题描述】:汽车上的设备在行程开始时不会发送TRIPID,但会在行程结束时发送一个。如何将对应的TRIPIDS... 查看详情

我想在表 A 中提取一些在表 B 中没有条目的列。如何在 Hive 中实现这一点?

】我想在表A中提取一些在表B中没有条目的列。如何在Hive中实现这一点?【英文标题】:IwanttoextractsomecolumnsinatableAthatdonothaveanentryintableB.HowcanIachievethatinHive?【发布时间】:2019-10-3016:28:13【问题描述】:我想在表(A)中提取一些在... 查看详情

如何在 Python 中实现 KS-Test

】如何在Python中实现KS-Test【英文标题】:HowtoimplementaKS-TestinPython【发布时间】:2019-09-3019:55:48【问题描述】:scipy.stats.kstest(rvs,cdf,N)可以对数据集rvs执行KS-Test。它测试数据集是否遵循概率分布,其cdf在此方法的参数中指定。现... 查看详情

如何在内联汇编中实现这一点?

】如何在内联汇编中实现这一点?【英文标题】:Howtoimplementthisininlineassembly?【发布时间】:2014-06-0302:45:23【问题描述】:我在理解GNU内联汇编语法方面非常糟糕,所以我希望一个实际的例子能有所帮助。鉴于以下程序集(x86-64... 查看详情

在 Python 中实现类似列表的索引访问

...obj=MyClass()zeroth=obj[0]first=obj[1]这可能吗?如果是这样,您如何在相关的python类中实现这一点?【问题讨论】:显然,对于那些在谷歌上搜索的人来 查看详情

如何找到真实数据的概率分布和参数? (Python 3)

】如何找到真实数据的概率分布和参数?(Python3)【英文标题】:Howtofindprobabilitydistributionandparametersforrealdata?(Python3)【发布时间】:2016-09-2601:12:21【问题描述】:我有一个来自sklearn的数据集,我绘制了load_diabetes.target数据的分... 查看详情

java示例代码_我需要启用java(tm)插件,在浏览器中安装小程序。。如何在Web驱动程序中实现这一点

java示例代码_我需要启用java(tm)插件,在浏览器中安装小程序。。如何在Web驱动程序中实现这一点 查看详情

常见的8个概率分布公式和可视化

...b之间连续均匀分布的概率密度函数(PDF)如下:让我们看看如何在Python中对它们进行编码:高斯分布可能是最常听到也熟悉的分布。它有几个名字:有人称它为钟形曲线,因为它的概率图看起来像一个钟形,有人称它为高斯分布,... 查看详情

如何在 C++ 中实现强大的数据持久层?

】如何在C++中实现强大的数据持久层?【英文标题】:HowdoIimplementarobustDataPersistenceLayerinC++?【发布时间】:2016-07-2506:51:56【问题描述】:我第一次用C++为我的公司创建一个巨大的程序,我想创建一个很好的模式来连接到我的MySql... 查看详情

如何计算给定均值和标准差的正态分布中的概率?

】如何计算给定均值和标准差的正态分布中的概率?【英文标题】:Howtocalculateprobabilityinanormaldistributiongivenmean&standarddeviation?【发布时间】:2012-09-0622:22:52【问题描述】:如何在Python中计算给定均值、std的正态分布概率?我总... 查看详情

在 python 中实现 HMAC-SHA1

...网站的OAuth,它要求签名方法仅为“HMAC-SHA1”。我想知道如何在Python中实现这一点?【问题讨论】:【参考方案1】:伪代码:defsign_request():fromhashlibimportsha1importhmac#key= 查看详情

在 python 中实现 HMAC-SHA1

...网站的OAuth,它要求签名方法仅为“HMAC-SHA1”。我想知道如何在Python中实现这一点?【问题讨论】:【参考方案1】:伪代码:defsign_request():fromhashlibimportsha1importhmac#key= 查看详情

如何在拥抱脸模型中获得令牌的概率分布?

】如何在拥抱脸模型中获得令牌的概率分布?【英文标题】:Howtogetaprobabilitydistributionovertokensinahuggingfacemodel?【发布时间】:2022-01-1420:19:22【问题描述】:我正在关注this教程,了解如何对蒙面词进行预测。我使用这个的原因是因... 查看详情

在python中实现类接口的正确方法是啥

】在python中实现类接口的正确方法是啥【英文标题】:Whatistherightwaytoimplementaninterfacelikeclassinpython在python中实现类接口的正确方法是什么【发布时间】:2022-01-1712:16:01【问题描述】:什么是让继承自超类的每个类在python中具有相... 查看详情