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)。例如,某個醫院一天/一小時/一週內來的病人數量;某個包子店一天/一小時/一週內賣出的包子數量,我們能得到只有一段時間內事情發生的次數。
由於事情是隨機發生的,也就是在統計的一定時間內,任意時刻都有可能發生,所以我們就要對二項式公式改進。假設一個小時內發生了k次,如果我們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(μ,σ):
這與我們的實驗也是相符的。