常用离散型随机分布

本文介绍了Python中scipy.stats模块中常用的离散型随机变量分布,如贝努里、二项、泊松和几何分布,并详细阐述了随机变量的几个关键函数:概率质量函数(pmf)、累积分布函数(cdf)、生存函数(sf)和百分位数函数(ppf)。通过示例展示了如何使用这些分布及其函数,特别提到了在n很大且p很小时,泊松分布可以作为二项分布的近似。最后,通过代码比较了二项分布和泊松分布的差异,并给出了实际应用的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用的离散型随机变量分布及其相关函数

在第三方库scipy中, 包括了统计学中常用的分布. 主要在scipy.stats模块中, 因此在使用前, 除了要安装scipy外, 也要导入响应的分布.

scipy.stats中常用的离散分布

  • 贝努里分布(Bernoulli)
  • 二项分布(Binomial)
  • 泊松分布(Poisson)
  • 几何分布(Geometri)

二 随机变量共有的方法

  • Probability Mass Function(pmf) 概率质量函数, 直白点说,就是求给定一个样本点取值的概率.

p ( x k ) = P ( X = x k ) p(x_k)=P(X=x_k) p(xk)=P(X=xk)

  • Cumulative Distribution Function(cdf) 累积分布函数

    F ( x ) = P ( X ≤ x ) = ∑ x k ≤ x p ( x k ) F(x) = P(X\le x)=\sum_{x_k\le x}p(x_k) F(x)=P(Xx)=xkxp(xk)

  • Survival Function(sf) 生存函数

    S ( x ) = 1 − F ( x ) = P ( X > k ) S(x)=1-F(x)=P(X>k) S(x)=1F(x)=P(X>k)

  • Percent Point Function(ppf) 百分位数, ppfcdf的反函数

  • Inverse survival Function(isf) 生存函数的反函数.

三 Python中常用随机变量分布的使用

3.1 冻结一个分布

每一种分布都有固定的参数, 如果使用该分布时每次都传这些参数时, 显然比较麻烦. 因此可以首先传入相应的参数, 也就是冻结这个分布.

>>> from scipy import stats
>>> rv1 = stats.binom(100,0.05) # 冻结一个`n=100, p=0.05`的二项分布
>>> rv2 = stats.poisson(5)  # 冻结一个参数λ=5的泊松分布
>>> rv3 = stats. geom(0.5)  # 冻结一个参数p=5的几何分布

3.2 相关函数的使用

X ∼ B ( 10 , 0.05 ) X\sim B(10,0.05) XB(10,0.05) , 求 P ( x = 10 ) , P ( x ≤ 10 ) P(x=10), P(x\le10) P(x=10),P(x10)

>>> from scipy import stats
>>> rv1 = stats.binom(100, 0.05) # 冻结分布
>>> rv1.pmf(10) # 求随机变量给定取值的概率
0.016715884095931225
>>> rv1.cdf(10) # 求累积概率
0.9885275899325152

X ∼ P ( 5 ) X\sim P(5) XP(5), 求 P ( x = 10 ) , P ( x ≤ 10 ) P(x=10), P(x\le 10) P(x=10),P(x10)

>>> from scipy import stats
>>> rv2 = stats.poisson(5) # 冻结分布
>>> rv2.pmf(10)
0.018132788707821854
>>> rv2.cdf(10)
0.9863047314016171

四 二项分布和泊松分布比较

二项分布中, 当n很大, p小的情况下, 可以近似使用泊松分布来计算.

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

def binomAndpoisson(n, p):
    # 冻结分布
    lambda1 = n*p
    rv1 = stats.binom(n, p)
    rv2 = stats.poisson(lambda1)

    x = np.arange(n)
    width = .35

    pbs=rv1.pmf(x)
    pps = rv2.pmf(x)

    fig, ax = plt.subplots()
    rects1 = ax.bar(x-width/2, pbs, width, label="binom")
    rects2 = ax.bar(x+width/2, pps, width, label="poisson")

    ax.set_ylabel('Probability')
    ax.set_title("Compare binom(n={},p={}) with poisson({} )".format(n,p, n*p))
    ax.set_xticks(x)
    ax.legend()

    # ax.bar_label(rects1, padding=3)
    # ax.bar_label(rects2, padding=3)

    fig.tight_layout()
    plt.show()

 binomAndpoisson(5, 0.2)
# binomAndpoisson(50, 0.2)
# binomAndpoisson(100, 0.02)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KQHOsgku-1616908810491)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210328124354427.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-44uVtLRE-1616908810494)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210328130858423.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B7oDscno-1616908810496)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210328131430125.png)]

综述上试验可以看出, 当二项分布的n很大, p很小时, 可以用 λ = n p \lambda=np λ=np的泊松分布来近似计算.

908810494)]

[外链图片转存中…(img-B7oDscno-1616908810496)]

综述上试验可以看出, 当二项分布的n很大, p很小时, 可以用 λ = n p \lambda=np λ=np的泊松分布来近似计算.

欢迎访问Python与概率课程:https://www.bilibili.com/video/BV1sh411Q7mz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值