利用python实现泊松分布

前面我们学习了伯努利分布、二项分布和几何分布,传送门:
利用python实现伯努利分布和二项分布
利用python实现几何分布
今天我们来学习离散概率分布之泊松分布。

1、基本理论知识

  • 泊松分布适合描述在单位时间内随机事件发生的次数或概率。比如:某网站或app在单位时间内访问的人数,满足分布律: P ( X = k ) = λ k k ! e − λ P(X=k)=\frac{\lambda^k}{k!}e^{-\lambda} P(X=k)=k!λkeλ,其中 λ \lambda λ表示单位时间内随机事件平均发生的次数,P就代表单位时间内随机事件发生k次的概率。
  • 特点:
    • 事件独立;
    • 在任意相同的时间范围内,事件的发生概率相同;
    • 解决的问题是:在某段时间内,某件事情发生的概率。

2、python实现

numpy实现:np.random.poisson(lam, size) 参数(单位时间内事件平均发生次数,样本数即进行多少次实验)。
          得到的是size次实验中,每次实验中事件发生的次数,并非概率
stats实现:stats.poisson.pmf(k,lam)参数(需求的单位时间内事件的发生次数,单位时间内事件平均发生次数)。
          得到的是单位时间内事件发生的概率

stats运行结果始终是定值,而numpy运行结果每次都不一样,但误差较小。
我觉得numpy还是比较好的,因为可以改变试验次数,进行多次实验后进行平均值处理,可以得到更高的准确性吧。个人想法,如果不对,请指正。

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

plt.rcParams['font.sans-serif'] = 'SimHei'  # 解决画图不显示文字的问题
plt.rcParams['axes.unicode_minus'] = False  # 解决画图不显示负数的问题

"""
假定某航空公司预定票处平均每小时接到42次订票电话,那么10分钟内恰好接到6次电话的概率是多少
"""
lam = 42 / 6  # 一小时42次,那么每10分钟接到42/6次电话 单位时间内平均次数
size = 50000  # 进行50000次实验
print(np.random.poisson(lam,1)) # [10]  # 进行一次实验,结果是10分钟内接到了10次电话
x = np.random.poisson(lam, size)  # 进行50000次实验
print(x)  # [11 7 7... 6 2 13] # 结果是随机的,每次实验的结果都不一定一样,
print(np.sum(x == 6) / size)  # 0.1467  # 50000次实验中,10分钟内接到6次电话的结果次数 / 总实验数

plt.hist(x) 
plt.xlabel('随机变量:每十分钟接到订票电话的次数')
plt.ylabel('50000个样本中出现的次数')
plt.xticks([index + 0.6 for index in range(0,20)], range(0,20)) #设置x轴格式,使图形在刻度线正中间
plt.show()

x = stats.poisson.pmf(6, lam) # 直接求概率 
print(x) # 0.1490  
print(x*50000) #这样也可以得到50000次实验中,出现接到6次电话的次数
# 可以看出两种方法的结果是差不多的。

在这里插入图片描述

  • 从图中我们可以看出,50000次实验中,10分钟接到5—9次电话的概率是最大的。
  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值