import numpy as np
import matplotlib.pyplot as plt
from numpy import power
from scipy.special import comb
相关知识
Bernoulli Experiment (伯努利试验)
对于一个试验(事件),如果重复发生的概率是独立的(互补影响),那么它是独立试验。特别的,如果这个试验只存在两种结果,则称其为伯努利试验。
Binomial Distribution (二项式分布)
对于重复n次的伯努利试验,我们可以计算成功k次的概率:
Pk=Cnkpk(1−p)n−k=(n−k)!k!n!⋅pk(1−p)n−k
def BinomialDist(n, k, p=.5):
return comb(n, k) * power(p, k) * power(1-p, n-k)
e.g. 假设我们抛一枚硬币,总共抛10次,求10次都是正面的概率?
解:P10=0.510
验证一下我们的函数:
BinomialDist(10, 10) == power(0.5, 10)
True
e.g. 假设我们抛一枚硬币,总共抛10次,分别求k=0,1,2,...,10次是正面的概率?
ks = np.linspace(0, 10, 11)
Plst = BinomialDist(10, ks)
plt.plot(Plst, '.')
plt.title(r'$P(X=k),\ X \sim B(10,0.5)$')
plt.show()
从上图可以看出,k=5时候最大,这符合我们的预期:抛10次硬币,正面朝上的次数最有可能为5。即随机变量ξ∼B(10,0.5),E(ξ)=np=5。
简单证明一下E(ξ)=np:
-
预备公式:kcnk=ncn−1k−1
-
离散型随机变量ξ的期望:E(ξ)=∑in(xi⋅p(xi))
-
这里xi=k=0,1,...,n,而p(xi)=p(k)=Cnkpk(1−p)n−k
E(ξ)=0×cn0p0qn+1×cn1p1qn−1+2×cn2p2qn−2…+ncnnp0qn=np(cn−10p0qn−1+cn−11p0qn−2+cn−12p0qn−2…+cn−1n−1pn−1q0)=np(p+q)n−1=np
计算一下E(ξ)=∑in(xi⋅p(xi)),ks
相当于xi,Plst
相当于p(xi)
print('mean =', (ks*Plst).sum())
print('mean =', 10*0.5)
mean = 5.0
mean = 5.0
其他证明方法和方差(D(ξ)=npq)可以参考二项分布的期望和方差的详细证明。
D(X)=E(X2)−E2(X)=∑k=0∞k2⋅k!λke−λ−λ2=λe−λ∑k=1∞(k−1)!kλk−1−λ2=λe−λ[∑k=2∞(k−2)!λk−1+∑k=1∞(k−1)!λk−1]−λ2=λe−λ[λeλ+eλ]−λ2=λ
总结,如果随机变量X=k的概率满足P(X=k)=Cnkpk(1−p)n−k二项式分布,则X∼B(n,p)。
定义
二项式分布P(k)=(n−k)!k!n!⋅pk(1−p)n−k要求n必须为已知数,但是生活中很多事情是没法统计出或者不存在精确的总数,这些事情往往是在一段连续的时间内出现一定的次数,相互之间没有影响(随机发生),并且单次事件耗时和概率几乎可以忽略(只有出现或者未出现,类似二项式分布;任意时刻发生的概率几乎为0)。例如,某个医院一天/一小时/一周内来的病人数量;某个包子店一天/一小时/一周内卖出的包子数量,我们能得到只有一段时间内事情发生的次数。
由于事情是随机发生的,也就是在统计的一定时间内,任意时刻都有可能发生,所以我们就要对二项式公式改进。假设一个小时内发生了m次,如果我们10分钟统计一次,总共统计n=6次,我们期待p=nk,也就是k次需要分别散落在6个10分钟内,显然k次可能出现在一个10分钟内。那么1秒钟统计一次呢?还是不行,因为还是存在1秒钟发生k次的可能性。为了保证单位时间内最多只有一次事件发生,泊松分布将n→+∞,那么单次事件只能发生在n1时间内。
我们可以统计出一段时间内出现的平均次数λ,那么可以认为单次事件概率p=nλ,于是二项式分布就变成了:
n→∞limP(X=k)=n→∞lim(nk)pk(1−p)n−k=(k!λk)exp(−λ)=k!λke−λ
其实e的定义就是(参见:自然常数e的含义):
n→+∞lim(1+n1)n
而e−λ=limn→+∞(1+n−λ)n。
最终泊松分布定义为:若X服从参数为λ的泊松分布,记为X∼π(λ)或X∼P(λ)。
P(X=k)=k!e−λλk
相关性质:
- E(X)=λ
- D(X)=λ
PMF与PDF
虽然n→+∞,并且公式也可以计算k>0的非整数,但是泊松分布还是针对离散型随机变量,所以上述公式又称为泊松分布的PMF(概率质量函数)。
-
PMF(Probability Mass Function,概率质量函数): 是对离散随机变量的定义。是离散随机变量在各个特定取值的概率。该函数通俗来说,就是对于一个离散型概率事件来说,使用这个函数来求它的各个成功事件结果的概率。
-
PDF(Probability Density Function,概率密度函数 ):是对连续性随机变量的定义。与PMF不同的是,PDF在特定点上的值并不是该点的概率, 连续随机概率事件只能求一段区域内发生事件的概率, 通过对这段区间进行积分来求。通俗来说, 使用这个概率密度函数将想要求概率的区间的临界点(最大值和最小值)带入求积分,就是该区间的概率。
参数lambda
我们来看不同参数λ的泊松分布情况。注意,由于是离散随机变量,所以我们对k只能取≥0的整数。
from scipy.special import factorial
Xs = np.linspace(0, 50, 51)
def PD(k, lmd):
return np.power(lmd, k) * np.exp(-lmd) / factorial(k)
plt.figure(figsize=(10, 6))
plt.plot(Xs, PD(Xs, lmd=1), '*--', label=rf'$\lambda=1$')
plt.plot(Xs, PD(Xs, lmd=5), '^--', label=rf'$\lambda=5$')
plt.plot(Xs, PD(Xs, lmd=10), '.', label=rf'$\lambda=10$')
plt.plot(Xs, PD(Xs, lmd=15), '+', label=rf'$\lambda=15$')
plt.legend()
plt.show()
从上图中,可以看出,泊松分布围绕着λ为中心的,而且λ越大,越对称,也越像正态分布。
与正态分布的关系
知乎上有个答案这样说的:
正态分布是所有分布趋于极限大样本的分布,属于连续分布。二项分布与泊松分布,则都是离散分布。二项分布的极限分布是泊松分布,泊松分布的极限分布是正态分布,即np=λ,当n很大时,可以近似相等。当n很大时(还没达到连续的程度),可以用泊松分布近似代替二项分布;当n再变大,几乎可以看成连续时,二项分布和泊松分布都可以用正态分布来代替!
乍一看,好像是这么回事,但是仔细想想我们本来就是假设n→+∞。从上面的实验中我们发现,λ越大越接近正态分布。
简书上一篇blog认为:当发生次数k比较大的时候,泊松分布会变成均值为λ,方差为λ的正态分布:
k→∞limk!λke−λ=2πλ1e−(x−λ)2/2λ∼N(λ,λ)
个人认为这个结论也是明显不对,因为不论参数λ,k都可以→∞。不过后半句话应该是对的。
根据这篇数学文章上的图(截取如下),当μ也就是λ→∞和σ2=λ时,变成了N(μ,σ):
这与我们的实验也是相符的。