不少場合下,咱們感興趣的試驗進行了不少次,但其中成功的卻發生的至關稀少。例如一個芯片的生廠商想要把生產出的芯片作一番檢測後再出售。每一個芯片都有一個不能正常工做的微小几率p,在數量爲n的一大批芯片中,出現r個故障芯片的機率是多少?微信
相關閱讀函數
問題彷佛很簡單,芯片故障的機率符合二項分佈X~B(n,p),咱們能夠用二項分佈計算出現r個故障芯片的機率:spa
實際問題是,芯片的數量很大,但故障率又是一個很小的數值,雖然二項分佈提供了一個精確的機率模型,但計算起來並不容易,並且在計算時還會丟掉大量的精度。既然這樣,還不如一開始就使用一個近似式計算預期的機率。3d
咱們首先看看所有芯片都合格(每次試驗都不成功)的機率:code
等號兩邊同時取對數:orm
接下來須要利用一點無窮級數和積分的知識:blog
同時咱們也知道∫dx/1-x的精確表達:事件
由此能夠獲得:
當p遠遠小於1,且np2遠遠小於1時,能夠忽略p的高階項,獲得近似式:
n個芯片所有合格的機率約等於e-np,出現r個故障芯片的機率又是多少呢?直接計算並不容易,幸運的是,咱們能夠用二項分佈精確表達r個和r-1個故障芯片的機率的比值:
當n很大時,對於少許r個故障芯片來講,n-(r-1) ≈ n;對於很小几率p來講,p/(1-p) ≈ p,所以上式能夠獲得近似地表達爲:
相似地,能夠計算出B(r-1;n,p)/B(r-2;n,p)……直到B(1;n,p)/B(0;n,p):
這就是二項分佈的泊松近似,對於給定的n和r來講,泊松分佈計算起來比二項分佈簡單多了。泊松近似常常用P(r; λ)表示。當n很大,λ2/n(即np2)遠遠小於1時,泊松近似很是理想。
咱們知道ex的泰勒展開式:
如今把r = 0,1,2,…的全部P(r; λ)相加:
由此看出二項分佈的泊松近似有一個很好的性質:r = 0,1,2,…的全部P(r; λ)之和等於1。所以能夠把P(X=r; λ)用於離散型隨機變量的質量函數,其中隨機變量取正整數,對於每個正實數λ,均可以指定一個泊松分佈:
泊松分佈記做X~Po(λ)。
二項分佈產生於對同一個伯努利試驗的屢次重複,而泊松分佈用於描述時間發生在隨機的區間點(時間或空間,好比一星期或一千米)上的情形。例如某一服務設施在必定時間內到達的人數,電話交換機接到呼叫的次數,汽車站臺的候客人數,機器出現的故障數,天然災害發生的次數,一塊產品上的缺陷數,顯微鏡下單位分區內的細菌分佈數等等。假設這種事件發生在一個區間點上的可能性與發生在其餘任什麼時候間點上的可能性徹底一致,並且這些事件的發生時相互獨立的,那麼在任何給定的單位區間內發生r個事件的機率能夠由泊松分佈P(X=r; λ)給出,其中隨機變量X表示在給定的單位區間內發生的事件的個數,λ是事件的平均發生率(單位區間內事件發生的平均發生次數)。
泊松分佈的形狀取決於λ的大小,λ較小,則分佈向右偏斜,隨着λ的增大,分佈逐漸變得對稱:
泊松分佈成立的條件是λ2/n(即np2)遠遠小於1。咱們用2個示例看看泊松分佈是如何應用於實際的。
圖像的在傳播過程當中可能會受到某些干擾,從而使某個像素點變成了噪聲。假設一個給定像素出錯的機率是1/10-5,且每一個像素出錯相互獨立的。對於一幅1000×1000的圖像來講,噪聲的分佈是什麼?
對於傳播後的圖像來講,每一個像素不是正確就是錯誤,咱們可使用二項分佈獲得精確機率模型,可是相關的參數要麼極大,要麼極小,所以使用泊松近似看起來是個不錯的主意。1000×1000的圖像有n=106個像素,錯誤率是p=10-5,n和p是個懸殊的比率,λ2/n=10-4遠遠小於1,泊松近似將很是理想。
下面的代碼對比了泊松分佈和二項分佈:
1 import numpy as np 2 import matplotlib.pyplot as plt 3 from scipy import stats 4 5 n = 10 ** 6 # 單位區間上的點 6 p = 10 ** -5 # 事件在單位區間上發生的機率 7 lam = n * p # λ = np 8 print('X ~ Po(X=r;λ)'.format(lam)) 9 10 rs = np.array(range(1, 26, 1)) # 隨機變量的取值 11 # 泊松分佈 X ~ Po(X=r;λ) 12 ps = stats.poisson.pmf(rs, lam) # 每一個隨機變量對應的機率 13 # 二項分佈 X ~ B(X=r;n,p) 14 bs = stats.binom.pmf(rs, n, p) # 每一個隨機變量對應的機率 15 16 fig = plt.figure(figsize=(10, 4)) 17 plt.subplots_adjust(hspace=0.5) # 調整子圖之間的上下邊距 18 19 ax1 = fig.add_subplot(2, 2, 1) 20 ax1.set_xlabel('r') 21 ax1.set_ylabel('P(X=r;λ)'.format(lam)) 22 ax1.set_title('泊松分佈') 23 ax1.bar(left=rs, height=ps, width=0.5) 24 25 ax2 = fig.add_subplot(2, 2, 2) 26 ax2.set_xlabel('r') 27 ax2.set_ylabel('P(X=r;{0},{1})'.format(n, p)) 28 ax2.set_title('二項分佈') 29 ax2.bar(left=rs, height=bs, width=0.5) 30 31 ax3 = fig.add_subplot(2, 2, 3) 32 ax3.set_xlabel('r') 33 ax3.set_ylabel('泊松分佈-二項分佈'.format(n, p)) 34 ax3.set_title('偏差') 35 ax3.bar(left=rs, height=(bs - ps), width=0.5) 36 37 plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標籤 38 plt.rcParams['axes.unicode_minus'] = False # 解決中文下的座標軸負號顯示問題 39 plt.show() 40 41 print('最大偏差', np.max(bs - ps))
能夠看到,兩個分佈的形狀幾乎相同,兩者的最大偏差是6.254614978717932e-07,該數值遠遠小於1。
假設某個公司開有一個帶傷上線的系統,每週平均的故障次數是2次,在下週不發生故障機率是多少?
泊松分佈是離散機率分佈,是一個描述給定的時間間隔內事件發生次數的模型,而時間是一個連續區間。面對連續區間,一個天然的選擇是把區間分紅n等份,每一個時間小段事件發生的機率就是pn = p/n,n越大,pn越小,npn2<<1時泊松近似很是理想。當n→∞時,pn→0,此時將獲得一個準確的模型。也就是說,若是事件的平均發生率是λ,那麼泊松分佈就是一個單位時間內事件發生的準確模型。
回到問題,每週平均的故障次數是2次,咱們能夠把「一週」看做單位時間,程序的故障率是λ=2,在下週不發生故障的機率至關於發生了0個故障的機率:
相似的例子還有不少,好比根據歷史數據預測網站的訪問量在1小時內達到某個值的機率;根據歷史報告預測某個路段發生事故的機率。
泊松分佈告訴咱們,事件在單位區間內平均發生的次數是λ,也就是E[X]= λ。更簡潔的地方在於,泊松分佈的方差也是λ。
也就是說,若是給出了一個泊松分佈X~Po(λ),那麼你根本不用計算,它的參數就是指望和方差
出處:微信公衆號 "我是8位的"
本文以學習、研究和分享爲主,如需轉載,請聯繫本人,標明做者和出處,非商業用途!
掃描二維碼關注做者公衆號「我是8位的」