熟悉常見概率分佈
生活中的很多事情潛在的都符合某種規律。例如:反覆拋擲一枚均勻的硬幣,出現正面和反面的機會是差不多的;我們認識的人裡面特別高或者特別矮的都不多,大部分人的身高都在一個比較接近的範圍內。概率論通過概率分佈來描述事件出現的頻率。本文選取了一些常見的概率分佈做一些介紹,以方便在今後使用的時候可以查閱。
當然,“常見”是一個很口語而非科學的說法,因為這很難有明確的標準。如果想要對更多的概率分佈做深入研究,請以文末的連結為起點進行更多探索。
基礎知識
為了便於描述,這裡我們先做一些基礎知識的介紹。
隨機變數
隨機變數是可以隨機地取不同值的變數。例如:拋擲一枚硬幣,出現正面或者反面的結果;從一個班級中,隨機選一個同學,他的身高值。
隨機變數可以是離散的或者連續的。離散隨機變數擁有有限(例如正面或者反面)或者可數無限多的狀態。連續隨機變數伴隨著實數值(例如:身高)。
概率質量函式
離散型變數的概率分佈可以用概率質量函式(Probability Mass Function,簡稱PMF)來描述。我們通常用大寫字母P來表示概率質量函式。
概率密度函式
當研究的物件是連續型隨機變數時,我們用概率密度函式(Probability Density Function,簡稱PDF)來描述它的概率分佈。我們通常用小寫字母p來描述概率密度函式。
期望
函式 $f(x)$ 關於某分佈的期望(Expectation)或者期望值(Expected value)是指:當x由P產生,f作用於x時,$f(x)$的平均值。
對於離散型隨機變數,期望值可以通過求和得到:
$$
E_{x sim P[f(x)]} = sum_xP(x)f(x)
$$
對於連續型隨機變數,期望值可以通過求積分得到:
$$
E_{x sim p[f(x)]} = int p(x)f(x) dx
$$
方差與標準差
方差(Variance)衡量的是當我們對x依據它的概率分佈進行取樣時,隨機變數x的函式值會呈現多大的差異。
計算方差的函式如下:
$$
Var(f(x)) = E[(f(x)-E[f(x)])^2]
$$
方差的平方根稱之為標準差(Standard Deviation)。有些資料也稱標準差為均方差。
一幅圖理解期望和方差
臺灣大學李毅巨集教授的這節課程: 《Where does the error come from?》 僅僅通過一幅圖就非常好的解釋了期望和方差的概念。
結果與期望的偏離稱之為偏差(Bias)。通俗的講,Bias描述了結果與中心的偏離程度。而方差(Variance)描述了結果互相之間的雜湊程度。
你可以對比下面這幅圖的四種情況來加深理解:
從這幅圖中我們可以看出:
- 當Bias和Variance都比較小的時候,結果都比較緊密的集中在預期的值上。
- 當Bias較小而Variance較大時,意味著結果較靠近預期,但是比較散落。
- 當Bias較大而Variance較小時,意味著結果集中在一起,但是離預期值偏離較多。
- 當Bias和Variance都較大時,意味著結果既不靠近預期,也比較散落。
李毅巨集教授的課程是我目前發現的最好的機器學習資料,他的授課把那些複雜的概念,解釋的非常的清晰和通俗。
因此強烈推薦給大家。
李毅巨集教授的個人網站:李宏毅 (Hung-yi Lee)
李毅巨集教授的Youtube站點:Youtube:李宏毅
離散型分佈
伯努利分佈
伯努利(Bernoulli)分佈是最基本,也是我們最常見的分佈。這個名稱是為了紀念瑞士科學家雅各布·伯努利(Jakob I. Bernoulli)而命名。
伯努利分佈在生活中非常的常見。例如,拋擲一枚硬幣的結果就是符合伯努利分佈的:結果只會是正面或者反面。
下文將看到,好幾種其他的分佈都與伯努利分佈有一定的關係。
伯努利分佈亦稱“零一分佈”、“兩點分佈”:它的結果只會是兩種可能性中的一種,且這兩種結果互相對立,必居其一。因此,我們也常常稱結果是成功的,或者失敗的。
假設伯努利實驗成功的概率是p
,則伯努利分佈的概率質量函式如下:
$$
P(X=x) = p^x (1 – p)^{(1-x)},; X in {0, 1}
$$
當然,考慮到X只有0和1兩種可能,我們也可以直接寫成:
$$
P(X=x) =
egin{cases}
p;(if,x=1) \
1-p;(if,x=0)
end{cases}
$$
伯努利分佈的期望值是p,方差是p(1-p)。
二項分佈
我們可以很自然的可以將一次伯努利實驗擴充套件到多次,此時其結果符合二項(Binomial)分佈。
二項分佈的概率質量函式如下:
$$
P(X=k) = inom{n}{k}p^{k}(1-p)^{n-k}
$$
這裡的:
$$
inom{n}{k} = frac{n!}{k!(n-k)!}
$$
通過這個函式,我們可以計算出在進行n次的伯努利實驗中,有k次出現正面結果的概率。
很顯然,當n為1時,這個函式和伯努利的概率質量函式是一樣的。
二項分佈的期望值是np,方差是$np(1-p)$。
幾何分佈
幾何(Geometric)分佈也是進行多次的伯努利實驗。
它指的是:在n次伯努利試驗中,試驗k次才得到第一次成功的機率。或者說,就是:前k-1次皆失敗,第k次成功的概率。
幾何分佈的概率質量函式如下:
$$
P(X = k) = p(1-p)^{k – 1}
$$
幾何分佈的期望是$frac{1}{p}$,方差是$frac{(1-p)}{p^2}$。
多項分佈
進一步的,我們可以將二項分佈擴充套件到多項(Multinomial)分佈。
多項分佈的結果有超過2種的更多種情況。例如:拋擲一枚骰子,其結果可能是1~6中的某個數值。
假設有$X_1$到$X_k$種結果,每種結果發生的概率是$p_1$到$p_k$,多項分佈的概率質量函式如下:
$$
P(X_1=n_1,…,X_k=n_k) = frac{n !}{n_1! … n_k !} p_1^{n_1} … p_k^{n_{k}} , ; (sum_{i=1}^k x_{i} = n)
$$
對於每個$X_{i}$來說,其數學期望是 $E(X_{i}) = np_{i}$,其方差是 $Var(X_{i}) = np_{i}(1-p_{i})$。
離散均勻分佈
特別地,當我們僅僅進行一次多項實驗,並且多項的各項結果是等可能的,那麼這個時候就得到的就是離散均勻(Discrete Uniform)分佈。
其概率密度函式如下:
$$
P(X = x) = frac{1}{N} ; (x= 1,…,N)
$$
例如,拋擲一枚均勻的骰子,出現6個數中任意一個的概率都是 $frac{1}{6}$。
離散均勻分佈的期望值是 $frac{N+1}{2}$,方差是 $frac{(N+1)(N-1)}{12} $。
很顯然,上面幾種分佈都與伯努利分佈存在一定的關係,下面這幅圖描述了它們之間的關係:
泊松分佈
泊松(Poisson)分佈是另外一種很常見的概率分佈,由法國數學家西莫恩·德尼·泊松(Siméon-Denis Poisson)在1838年時發表。
我們可以回想一下,生活中很多事情都以特定頻率的反覆發生的,例如:
- 某個醫院平均每天有100個新生兒;
- 某個客服號碼每個小時會接到50個來電;
- 某一班公交每個小時會5次經過其中一個站點;
- 等等等等;
過去發生的平均頻度我們是可以計算的,但是我們永遠無法精確計算該事件下一次發生的時間點。
泊松分佈描述的是:在已知過去發生頻率的基礎上,預測在接下來一段特定的時間內,該事件發生特定次數的概率。
這麼說有些拗口,但是接下來我們通過一個具體的例子就很容易理解了。
泊松分佈的概率質量函式如下:
$$
P(k) = frac{e^{-lambda}lambda^{k}}{k!} ; ,lambda ge 0
$$
這裡的e是一個常量,約等於2.71828。$lambda$是過去單位時間內發生的頻率,k是預測發生的次數。
以公交為例,假設我們知道過去它每個小時平均會5次經過其中一個站點($lambda$=5),那麼接下來的一個小時,它經過的次數很可能是4~6次。不太可能是1次或者10次。我們可以根據概率質量函式,計算它接下來一個小時分別經過1次,4次,5次,10次的概率。
- 當k=1時:$P(1) = frac{e^{-5}5^{1}}{1!} approx 0.034 $
- 當k=4時:$P(4) = frac{e^{-5}5^{4}}{4!} approx 0.175 $
- 當k=5時:$P(5) = frac{e^{-5}5^{5}}{5!} approx 0.175 $
- 當k=10時:$P(10) = frac{e^{-5}5^{10}}{10!} approx 0.018 $
當然,我們不用自己手算,藉助於Python的scipy.stats庫可以很輕鬆的計算出結果。
Python的scipy.stats庫包含了許多種分佈的許多相關函式。
藉助於matplotlib,我們甚至可以很輕鬆的將這個結果以圖形的方式展示出來。
下面這段程式碼,繪製了上面我們想要的結果:
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import poisson
x = np.arange(0, 11)
lamda = 5
plt.bar(x, poisson.pmf(x, lamda))
plt.text(8, 0.17, `lamda=5`)
plt.title(`Poisson Distribution`)
plt.show()
這段程式碼很簡單,這裡就不多做說明了。
網上有很多關於numpy和matplotlib的教程,也可以看我之前寫的文章:另外,這篇文章也很值得一看:Plotting Distributions with matplotlib and scipy。
下面這幅圖就是我們得到的結果。可以看到,這和我們前面計算的結果是一致的。
泊松分佈的期望值和方差都是$lambda$。
連續性分佈
高斯分佈
高斯(Gaussian)分佈又稱正態(Normal)分佈。這個概念是由德國的數學家和天文學家Moivre於1733年首次提出的,但由於德國數學家高斯率先將其應用於天文學家研究,故正態分佈又叫高斯分佈。
高斯分佈的概率密度函式曲線呈鐘形,因此人們又經常稱之為鐘形曲線。藉助於前面提到的幾個庫,我們可以很輕鬆的畫出高斯分佈的概率密度函式和累積分佈函式。
相關程式碼如下:
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm
x = np.linspace(-3, 3, 1000)
plt.plot(x, norm.pdf(x), label=`Probability density function`)
plt.plot(x, norm.cdf(x), label=`Cumulative distribution function`)
plt.legend()
plt.title(`Gaussian Distribution`)
plt.show()
得到的圖形如下:
從這個圖中我們可以看出,對於高斯分佈來說,隨機變數處於中間的概率是比較大的,而其取非常大或者非常小的值的概率都很小。我們現實中人們的身高,體重,收入等特點都符合這個模型。
高斯分佈的概率密度函式如下:
$$
f(x) = frac{1}{sqrt{2 pi}sigma}e^{-frac{(x – mu)^2}{2sigma^2}}
$$
對於符合高斯分佈的隨機變數,我們也經常記做下面這樣:
$$
X sim N(mu, sigma^2)
$$
在這個函式中,$mu$決定了高斯分佈的中心位置,$sigma$決定了鍾型曲線的胖瘦程度。實際上,$mu$就是高斯分佈的期望,而$sigma^2$就是方差。
當 $mu$ = 0,$sigma$ = 1時的,我們稱之為標準正態分佈。
上面我們看到的這個圖形就是標準正態分佈。
均勻分佈
均勻(Uniform)分佈要簡單很多,它指的就是:隨機變數在某個區間內,取任意一個值都是等可能的。
其概率密度函式如下:
$$
f(x) = frac{1}{b-a} , a le x le b
$$
很顯然,如果我們將這個函式畫成圖形,那就是兩個區間之間的一個水平線。
均勻分佈的期望值是 $frac{b+a}{2}$,方差是 $frac{(b-a)^2}{12}$。
指數分佈
指數(Exponential)分佈是描述泊松過程中的事件之間的時間的概率分佈,即事件以恆定平均速率連續且獨立地發生的過程。
指數分佈的概率密度函式如下:
$$
f(x) = frac{1}{lambda}e^{-frac{x}{lambda}} ; ,x ge 0, lambda gt 0
$$
指數分佈的期望是$lambda$,方差是$lambda^2$。
我們仍然是以前面提到的公交車為例。假設每個小時某班公交平均有5次會經過其中一個站點。
則可以通過下面這段程式碼繪製出其概率密度函式和分佈累積函式:
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import expon
x = np.linspace(0, 1, 1000)
lamda = 5
scale = 1/lamda
plt.plot(x, expon.pdf(x, scale=scale), label=`Probability density function`)
plt.plot(x, expon.cdf(x, scale=scale), label=`Cumulative distribution function`)
x1 = 0.2
x2 = 0.4
x3 = 1
y1 = expon.cdf(x1, scale=scale)
y2 = expon.cdf(x2, scale=scale)
y3 = expon.cdf(x3, scale=scale)
plt.scatter([x1, x2, x3], [y1, y2, y3], c="b")
plt.annotate("{:.3f}".format(y1), (x1, y1 + 0.2))
plt.annotate("{:.3f}".format(y2), (x2, y2 + 0.2))
plt.annotate("{:.3f}".format(y3), (x3, y3 + 0.2))
plt.legend()
plt.title(`Exponential Distribution`)
plt.show()
這段程式碼得到的圖形如下:
在這段程式碼中,我們特意的在0.2,0.4和1.0這三個點上做了標記。
從這個圖形中我們可以看出,對於這班公交來說,12分鐘(0.2小時)來車的概率是0.632,24分鐘(0.4小時)來車的概率是0.865。
當等待的時間越接近一個小時,新的一班車就幾乎肯定要來了。
結束語
這裡我們選取了一些常見的概率分佈介紹給大家。這些分佈可能是我們在做機器學習時會用到的。
文章的開頭也提到,“常見”是一個沒有標準的定義,也許後面我還會繼續擴充這篇文章,加入更多的內容。
如果你覺得有什麼很合適加入的內容,也可以給我留言。
參考資料與推薦讀物
- Wikipedia: List of probability distributions
- 《Deep Learning》: Chapter 3
- 《Pattern Recognition and Machine Learning》: Appendix B
- 李宏毅:ML Lecture 2: Where does the error come from?
- Common Probability Distributions: The Data Scientist’s Crib Sheet
- D. Joyce, Clark University: Common probability distributions
- Casella and Berger: Table of Common Distributions
- Scott Oser: Common Probability Distributions
- Plotting Distributions with matplotlib and scipy
相關文章
- PRML 概率分佈概率分佈
- 常見的機率分佈
- 概率論——常用分佈
- 概率演算法_二項分佈和泊松分佈演算法
- 常見的佈局
- 機率統計-常見分佈的均值及方差
- 常見頁面佈局
- CSS常見佈局技巧CSS
- 資料並非都是正態分佈:三種常見的統計分佈及其應用
- 按照獎品概率分佈抽獎的實現概率分佈
- 模式識別與機器學習——概率分佈模式機器學習概率分佈
- Flex常見佈局例項Flex
- CSS常見佈局與居中CSS
- 前端開發常見佈局前端
- 常見bug分類
- Python中的隨機取樣和概率分佈(一)Python隨機概率分佈
- Python中的隨機取樣和概率分佈(二)Python隨機概率分佈
- 從離散到分佈,盤點常見的文字表示方法
- 幾種常見的CSS佈局CSS
- 使用 Grid 進行常見佈局
- 前端常見的十種佈局前端
- matplotlib繪製伯努利分佈的概率密度圖
- css中的常見佈局面試題CSS面試題
- 概率統計第二章 隨機變數及其分佈隨機變數
- 常見儲存器分類
- paginate分頁常見問題
- Android一種常見的佈局困擾Android
- 總結下常見佈局解決方案
- 用Flex實現常見的幾種佈局Flex
- CSS-常見兩欄、三欄佈局(雙飛翼佈局、聖盃佈局)CSS
- 總結幾種常見的垂直居中的佈局
- flex佈局父項常見屬性align-itemsFlex
- flex佈局父項常見屬性flex-flowFlex
- flex佈局父項常見屬性justify-contentFlex
- 每個資料科學專家都應該知道的六個概率分佈資料科學概率分佈
- Python設計模式有哪些?常見分類!Python設計模式
- 二分查詢常見套路與分析
- 進一步瞭解flex佈局—來實現這些常見佈局吧Flex