如何在Python中實現這五類強大的概率分佈

feigao.me發表於2015-04-25

R程式語言已經成為統計分析中的事實標準。但在這篇文章中,我將告訴你在Python中實現統計學概念會是如此容易。我要使用Python實現一些離散和連續的概率分佈。雖然我不會討論這些分佈的數學細節,但我會以連結的方式給你一些學習這些統計學概念的好資料。在討論這些概率分佈之前,我想簡單說說什麼是隨機變數(random variable)。隨機變數是對一次試驗結果的量化。

舉個例子,一個表示拋硬幣結果的隨機變數可以表示成

隨機變數是一個變數,它取值於一組可能的值(離散連續的),並服從某種隨機性。隨機變數的每個可能取值的都與一個概率相關聯。隨機變數的所有可能取值和與之相關聯的概率就被稱為概率分佈(probability distributrion)

我鼓勵大家仔細研究一下scipy.stats模組。

概率分佈有兩種型別:離散(discrete)概率分佈和連續(continuous)概率分佈。

離散概率分佈也稱為概率質量函式(probability mass function)。離散概率分佈的例子有伯努利分佈(Bernoulli distribution)、二項分佈(binomial distribution)、泊松分佈(Poisson distribution)和幾何分佈(geometric distribution)等。

連續概率分佈也稱為概率密度函式(probability density function),它們是具有連續取值(例如一條實線上的值)的函式。正態分佈(normal distribution)、指數分佈(exponential distribution)和β分佈(beta distribution)等都屬於連續概率分佈。

若想了解更多關於離散和連續隨機變數的知識,你可以觀看可汗學院關於概率分佈的視訊

二項分佈(Binomial Distribution)

服從二項分佈的隨機變數X表示在n個獨立的是/非試驗中成功的次數,其中每次試驗的成功概率為p。

E(X) = np, Var(X) = np(1−p)

如果你想知道每個函式的原理,你可以在IPython筆記本中使用help file命令。 E(X)表示分佈的期望或平均值。

鍵入stats.binom?瞭解二項分佈函式binom的更多資訊。

二項分佈的例子:拋擲10次硬幣,恰好兩次正面朝上的概率是多少?

假設在該試驗中正面朝上的概率為0.3,這意味著平均來說,我們可以期待有3次是硬幣正面朝上的。我定義擲硬幣的所有可能結果為k = np.arange(0,11):你可能觀測到0次正面朝上、1次正面朝上,一直到10次正面朝上。我使用stats.binom.pmf計算每次觀測的概率質量函式。它返回一個含有11個元素的列表(list),這些元素表示與每個觀測相關聯的概率值。

您可以使用.rvs函式模擬一個二項隨機變數,其中引數size指定你要進行模擬的次數。我讓Python返回10000個引數為n和p的二項式隨機變數。我將輸出這些隨機變數的平均值和標準差,然後畫出所有的隨機變數的直方圖。

泊松分佈(Poisson Distribution)

一個服從泊松分佈的隨機變數X,表示在具有比率引數(rate parameter)λ的一段固定時間間隔內,事件發生的次數。引數λ告訴你該事件發生的比率。隨機變數X的平均值和方差都是λ。

E(X) = λ, Var(X) = λ

泊松分佈的例子:已知某路口發生事故的比率是每天2次,那麼在此處一天內發生4次事故的概率是多少?

讓我們考慮這個平均每天發生2起事故的例子。泊松分佈的實現和二項分佈有些類似,在泊松分佈中我們需要指定比率引數。泊松分佈的輸出是一個數列,包含了發生0次、1次、2次,直到10次事故的概率。我用結果生成了以下圖片。

你可以看到,事故次數的峰值在均值附近。平均來說,你可以預計事件發生的次數為λ。嘗試不同的λ和n的值,然後看看分佈的形狀是怎麼變化的。

現在我來模擬1000個服從泊松分佈的隨機變數。

正態分佈(Normal Distribution)

正態分佈是一種連續分佈,其函式可以在實線上的任何地方取值。正態分佈由兩個引數描述:分佈的平均值μ和方差σ2 。

E(X) = μ, Var(X) = σ2

正態分佈的取值可以從負無窮到正無窮。你可以注意到,我用stats.norm.pdf得到正態分佈的概率密度函式。

β分佈(Beta Distribution)

β分佈是一個取值在 [0, 1] 之間的連續分佈,它由兩個形態引數α和β的取值所刻畫。

β分佈的形狀取決於α和β的值。貝葉斯分析中大量使用了β分佈。

當你將引數α和β都設定為1時,該分佈又被稱為均勻分佈(uniform distribution)。嘗試不同的α和β取值,看看分佈的形狀是如何變化的。

指數分佈(Exponential Distribution)

指數分佈是一種連續概率分佈,用於表示獨立隨機事件發生的時間間隔。比如旅客進入機場的時間間隔、打進客服中心電話的時間間隔、中文維基百科新條目出現的時間間隔等等。

我將引數λ設定為0.5,並將x的取值範圍設定為 $[0, 15]$ 。

接著,我在指數分佈下模擬1000個隨機變數。scale參數列示λ的倒數。函式np.std中,引數ddof等於標準偏差除以 $n-1$ 的值。

結語(Conclusion)

概率分佈就像蓋房子的藍圖,而隨機變數是對試驗事件的總結。我建議你去看看哈佛大學資料科學課程的講座,Joe Blitzstein教授給了一份摘要,包含了你所需要了解的關於統計模型和分佈的全部。

相關文章