概率分布与编程:二项式分布、泊松分布的原理,Python3如何实现

liftword5个月前 (02-08)技术文章94

在说二项式分布之前,先来复习一下排列组合的概念,尤其是组合(Combination) C。

排列的定义:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个不同的元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号

表示。

计算公式:


组合的定义:从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号 C(n,m) 表示。

计算公式:


举例:组合怎么算

1、比如C73,就是7开始的3个数相乘(7*6*5)再除以3开始到1之间所有的数(3*2*1)

2、比如C52,分子是从5开始递减的两个数字相乘,即5*4;分母为从2开始到1,即2*1;所以结果为5*4÷(2*1)=10;


那么,什么是二项分布呢?只要符合下面3个特点就可以判断某事件是二项分布了:

1)做某件事的次数(也叫试验次数)是固定的,用n表示。

(例如抛硬币3次,投资5支股票),

2)每一次事件都有两个可能的结果(成功,或者失败)

(例如每一次抛硬币有2个结果:正面表示成功,反面表示失败。

每一次投资美股有2个结果:投资成功,投资失败)。

3)每一次成功的概率都是相等的,成功的概率用p表示

(例如每一次抛硬币正面朝上的概率都是1/2。

你投资了5家公司的股票,假设每一家投资盈利成功的概率都相同)

4)你感兴趣的是成功x次的概率是多少。那么就可以用二项分布的公式快速计算出来了。


比如抛硬币是一个典型的二项分布。


在概率论和统计学中,二项分布是n个独立的成功/失败试验中成功的次数的离散概率分布,其中每次试验的成功概率为p。这样的单次成功/失败试验又称为伯努利试验。实际上,当n=1时,二项分布就是伯努利分布 [2]

一般地,如果随机变量

服从参数为

的二项分布,我们记为

。n次试验中正好得到k次成功的概率由概率质量函数给出: [2]

式中k=0,1,2,…,n,

二项式系数(这就是二项分布名称的由来),又记为

或者

。 该公式可以用以下方法理解:我们希望有k次成功(p)和n?k次失败(1 ?p)。并且,k次成功可以在n次试验的任何地方出现,而把k次成功分布在n次试验中共有

个不同的方法。


举个现实的例子:

经济学

在保险业务中,我们经常需要根据实际情况适当调整保费问题,以保证保险公司的利润达到一定要求,同时保险公司的业务量也达到要求,对于这一类问题,可以对已知实际情况做一定的概率分析。例如某保险公司有10000客户购买人身意外保险,该公司规定每人每年付公司120元 ,若遇意外死亡,公司将赔偿10000元。若每人每年死亡率为0.006,从而不难利用二项分布算出公司获利、亏本的各种情形了。实际上对于随机现象,了解其分布非常有意义,利用概率论讨论得到的结果对保险公司有一定的指导意义。

这里我二项式分布的公式也懒得套用了,直接Python交易。

上代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
# 绘制二项分布和泊松分布图
n = 10000
p=0.006
q=1-p
bino = stats.binom(n,p)
x = np.arange(0,n)
y1 = bino.pmf(x)
possion = stats.poisson(n*p)
y2 = possion.pmf(x)
plt.plot(x,y1,label="erxiang")
plt.plot(x,y2,label="bosong")
plt.legend()
plt.show()

结果生成的图是:


可以看出

挂几个人的概率最多也就刚超过0.05,然后挂的人数越多的概率就越趋于0了。

保险公司的钱来得是真轻松啊,赔付概率是很低的。


注:一般当n>=20,p<=0.05的时候,就可以用泊松分布近似替代二项分布了。


泊松分布的概率函数为:

泊松分布的参数λ是单位时间(或单位面积)内随机事件的平均发生次数。 泊松分布适合于描述单位时间内随机事件发生的次数。

泊松分布的期望方差均为

特征函数为



参考文献:

【1】百度百科的二项式分布

https://baike.baidu.com/item/%E4%BA%8C%E9%A1%B9%E5%88%86%E5%B8%83/1442377?fromtitle=%E4%BA%8C%E9%A1%B9%E5%BC%8F%E5%88%86%E5%B8%83&fromid=3565421&fr=aladdin

【2】百度百科的泊松分布

https://baike.baidu.com/item/%E6%B3%8A%E6%9D%BE%E5%88%86%E5%B8%83/1442110?fr=aladdin

【3】Python之二项分布、泊松分布

https://cloud.tencent.com/developer/article/1752135


扩展阅读:


【1】泊松分布的现实意义是什么,为什么现实生活多数服从于泊松分布? - 猴子的回答 - 知乎

https://www.zhihu.com/question/26441147/answer/208718584


【2】泊松分布的现实意义是什么,为什么现实生活多数服从于泊松分布? - 马同学的回答 - 知乎

https://www.zhihu.com/question/26441147/answer/429569625

相关文章

Python 循环的高阶写法:简洁与高效的代码技巧

在 Python 中,循环的高阶写法通常借助一些内置函数、生成器表达式以及高级的库,能够让代码更加简洁、优雅。以下是几种常见的高阶写法:1. 列表推导式(List Comprehension)列表推导...

原理 + 代码|手把手教你用Python实现智能推荐算法

推荐系统将成为未来十年里最重要的变革,社会化网站将由推荐系统所驱动。 --- John Riedl明尼苏达大学教授前言智能推荐和泛的营销完全不同,后者是将产品卖给客户作为最终目标;而智能推荐是以“客户...

零基础学习Python,看完这10个案例,让你快速上手掌握Python语言

文章前言今天给大家分享十个Python入门级别的小案例。案例一:排列组合 要求: 将4个数字可能组成的所有互不相同且无重复数字的排列组合列出。 分析: 排列就好了 代码:案例二:阶梯求和 要求: 企业...

2-1,0基础学Python之 break退出循环、 continue继续循环 多重循

用 for 循环或者 while 循环时,如果要在循环体内直接退出循环,可以使用 break 语句。比如计算1至100的整数和,我们用while来实现:sum = 0 x = 1 while True...

python算法基础之回溯_python 回测代码

回溯法定义回溯法是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条...

12岁男孩一个暑假卖NFT「表情包」赚了250万

梦晨 发自 凹非寺量子位 报道 | 公众号 QbitAI12岁男孩在暑假里画了一系列画,在区块链上以NFT的形式出售,赚到的虚拟货币价值相当于250万人民币!这些画倒也不是什么精致的艺术品,只是一系列...