從貝葉斯定理說開去


從貝葉斯定理說開去

CC 許可,轉載請保留署名與出處

簡介

貝葉斯定理是18世紀英國數學家托馬斯·貝葉斯(Thomas Bayes)提出得重要概率論理論。以下摘一段 wikipedia 上的簡介:

所謂的貝葉斯定理源於他生前為解決一個“逆概”問題寫的一篇文章,而這篇文章是在他死后才由他的一位朋友發表出來的。在貝葉斯寫這篇文章之前,人們已經能夠計算“正向概率”,如“假設袋子里面有 N 個白球,M 個黑球,你伸手進去摸一把,摸出黑球的概率是多大”。而一個自然而然的問題是反過來:“如果我們事先並不知道袋子里面黑白球的比例,而是閉着眼睛摸出一個(或好幾個)球,觀察這些取出來的球的顏色之后,那么我們可以就此對袋子里面的黑白球的比例作出什么樣的推測”。這個問題,就是所謂的逆向概率問題。

貝葉斯定理的思想出現在18世紀,但真正大規模派上用途還得等到計算機的出現。因為這個定理需要大規模的數據計算推理才能凸顯效果,它在很多計算機應用領域中都大有作為,如自然語言拼寫檢查,機器學習,推薦系統,圖像識別,博弈論等等。

定義

貝葉斯定理是關於隨機事件 A 和 B 的條件概率

貝葉斯定理

其中P(A|B)是在 B 發生的情況下 A 發生的可能性。

在貝葉斯定理中,每個名詞都有約定俗成的名稱:

P(A)是 A 的先驗概率,之所以稱為“先驗”是因為它不考慮任何 B 方面的因素。
P(A|B)是已知 B 發生后 A 的條件概率,也由於得自 B 的取值而被稱作 A 的后驗概率。
P(B|A)是已知 A 發生后 B 的條件概率,也由於得自 A 的取值而被稱作 B 的后驗概率。
P(B)是 B 的先驗概率,也作標淮化常量(normalizing constant)。

按這些術語,貝葉斯定理可表述為:

后驗概率 = (相似度 * 先驗概率)/標淮化常量

也就是說,后驗概率與先驗概率和相似度的乘積成正比。

另外,比例P(B|A)/P(B)也有時被稱作標淮相似度(standardised likelihood),Bayes定理可表述為:

后驗概率 = 標淮相似度 * 先驗概率

條件概率就是事件 A 在另外一個事件 B 已經發生條件下的發生概率。條件概率表示為P(A|B),讀作“在 B 發生的條件下 A 發生的概率”。

聯合概率表示兩個事件共同發生(數學概念上的交集)的概率。A 與 B 的聯合概率表示為聯合概率

推導

我們可以從條件概率的定義推導出貝葉斯定理。

根據條件概率的定義,在事件 B 發生的條件下事件 A 發生的概率為:

貝葉斯定理

同樣地,在事件 A 發生的條件下事件 B 發生的概率為:

貝葉斯定理

結合這兩個方程式,我們可以得到:

貝葉斯定理

這個引理有時稱作概率乘法規則。上式兩邊同除以 P(A),若P(A)是非零的,我們可以得到貝葉斯定理:

貝葉斯定理

解釋

通常,事件 A 在事件 B 發生的條件下的概率,與事件 B 在事件 A 發生的條件下的概率是不一樣的;然而,這兩者是有確定關系的,貝葉斯定理就是這種關系的陳述。

貝葉斯公式的用途在於通過己知三個概率來推測第四個概率。它的內容是:在 B 出現的前提下,A 出現的概率等於 A 出現的前提下 B 出現的概率乘以 A 出現的概率再除以 B 出現的概率。通過聯系 A 與 B,計算從一個事件發生的情況下另一事件發生的概率,即從結果上溯到源頭(也即逆向概率)。

通俗地講就是當你不能確定某一個事件發生的概率時,你可以依靠與該事件本質屬性相關的事件發生的概率去推測該事件發生的概率。用數學語言表達就是:支持某項屬性的事件發生得愈多,則該事件發生的的可能性就愈大。這個推理過程有時候也叫貝葉斯推理。

示例

示例一:應當根據新情況更新先驗概率

決策與判斷》第十二章中講到人們都有保守主義情結,即使出現了新信息,也不願意根據新信息來更新先驗概率。用前面解釋里面的話說就是:新信息是 B 事件不斷發生,人們本應該根據這個信息去更新 A 事件發生的概率,但人們卻更願意固守之前估計的 A 事件發生的概率。

書中舉了這樣一個調查案例:

假設有兩個各裝了100個球的箱子,甲箱子中有70個紅球,30個綠球,乙箱子中有30個紅球,70個綠球。假設隨機選擇其中一個箱子,從中拿出一個球記下球色再放回原箱子,如此重復12次,記錄得到8次紅球,4次綠球。問題來了,你認為被選擇的箱子是甲箱子的概率有多大?

調查結果顯示,大部分人都低估了選擇的是甲箱子的概率。根據貝葉斯定理,正確答案是96.7%。下面容我來詳細分析解答。

剛開始選擇甲乙兩箱子的先驗概率都是50%,因為是隨機二選一(這是貝葉斯定理二選一的特殊形式)。即有:

P(甲) = 0.5, P(乙) = 1 - P(甲);

這時在拿出一個球是紅球的情況下,我們就應該根據這個信息來更新選擇的是甲箱子的先驗概率:

P(甲|紅球1) = P(紅球|甲) × P(甲) / (P(紅球|甲) × P(甲) + (P(紅球|乙) × P(乙)))
P(紅球|甲):甲箱子中拿到紅球的概率
P(紅球|乙):乙箱子中拿到紅球的概率

因此在出現一個紅球的情況下,選擇的是甲箱子的先驗概率就可被修正為:

P(甲|紅球1) = 0.7 × 0.5 / (0.7 × 0.5 + 0.3 × 0.5) = 0.7

即在出現一個紅球之后,甲乙箱子被選中的先驗概率就被修正為:

P(甲) = 0.7, P(乙) = 1 - P(甲) = 0.3;

如此重復,直到經歷8次紅球修正(概率增加),4此綠球修正(概率減少)之后,選擇的是甲箱子的概率為:96.7%。

我寫了一段 Python 代碼來解這個問題:

計算選擇的是甲箱子的概率

1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 
def bayesFunc(pIsBox1, pBox1, pBox2):  return (pIsBox1 * pBox1)/((pIsBox1 * pBox1) + (1 - pIsBox1) * pBox2)  def redGreenBallProblem():  pIsBox1 = 0.5   # consider 8 red ball  for i in range(1, 9):  pIsBox1 = bayesFunc(pIsBox1, 0.7, 0.3)  print " After red %d > in 甲 box: %f" % (i, pIsBox1)   # consider 4 green ball  for i in range(1, 5):  pIsBox1 = bayesFunc(pIsBox1, 0.3, 0.7)  print " After green %d > in 甲 box: %f" % (i, pIsBox1)  redGreenBallProblem() 

在這個調查問題里面,8次紅球與4次綠球出現的順序並不重要,因為紅球的出現總是使選擇的是甲箱子的概率增加,而綠球的出現總是減少。因此,為了簡化編程,我將紅球出現的情況以及綠球出現的情況擺在一起了。

程序運行結果如下:

不斷修正的選擇的是甲箱子的先驗概率

1
2 3 4 5 6 7 8 9 10 11 12 
After red 1 > in 甲 box: 0.700000 After red 2 > in 甲 box: 0.844828 After red 3 > in 甲 box: 0.927027 After red 4 > in 甲 box: 0.967365 After red 5 > in 甲 box: 0.985748 After red 6 > in 甲 box: 0.993842 After red 7 > in 甲 box: 0.997351 After red 8 > in 甲 box: 0.998863 After green 1 > in 甲 box: 0.997351 After green 2 > in 甲 box: 0.993842 After green 3 > in 甲 box: 0.985748 After green 4 > in 甲 box: 0.967365 

 

從程序運行結果來看,很明顯可以看到紅球的出現是增加選擇甲箱子的概率,而綠球則相反。

示例二:頻率更適合用來解答概率問題

進化心理學》第十三章(428頁)講到人類的心理從進化角度來看,更偏好使用頻率(我最近十次打獵八次有收獲)而不是概率(我最近打獵有80%的成功率)。

書中舉了同一個問題用不同方式表述使得問題的難易程度迥然不同:

表述一:有一種疾病的發病率是千分之一,醫院有一種化驗技術可以對這種疾病進行診斷,但是卻又百分之五的誤診率(也即是說盡管有百分之五的人沒有病,但是化驗結果卻顯示為陽性(即假陽性))。現在假設一個人的化驗結果顯示為有病,僅根據這一化驗結果推測,那么這個人確實患病的概率有多大?

這個問題也可以用貝葉斯定理來解決,不過在看分析之前,你可以先估算下你自己的答案,然后再和正確答案比較。

這個問題的分析過程如下:

已知先驗概率:P(患病) = 0.001,P(正常) = 0.999;
該化驗技術的准確率(即患病化驗結果顯示為陽性的概率)為:P(准確率) = 1.00;
該化驗技術的誤診率(即正常化驗結果顯示為陽性的概率)為:P(誤診率) = 0.05。

根據上面的數據,我們就能夠推測出一個人化驗為陽性的情況下,這個人確實患病的概率有多大:

P(患病|陽性) = P(患病) × P(准確率) / (P(患病) × P(准確率) + P(正常) × P(誤診率)) 
= 0.001 × 1.00 / (0.001 × 1.00 + 0.999 × 0.05)
= 0.0198 
= 2%

結果讓你大吃一驚吧,在沒有其他症狀增加患病概率的情況下,單憑化驗結果顯示為陽性來推測的話,其真實患病的概率還不到百分之二。

用頻率作為信息來記憶或回憶更生動也更容易被提取,想想第一次打獵什么情形,第二次打獵什么情形,歷歷在目。正因為頻率作為信息存儲載體保留了事件的形象性,提高了記憶的可得性,因此在進化過程中人類的心理機制優先選擇了頻率而不是抽象的概率。而且在人類十多萬年的進化過程中,出現概率概念的文明進程不過幾千年,大腦還沒有對進化到更適應抽象的概率的地步。

所以這個問題如果換成用頻率來表述的話,相信你的答案會大大接近於正確答案。

表述二:在一千個人中,就有一個人患有X疾病(即發病率為千分之一),有一種化驗技術,可以檢驗是否患有該疾病。如果一個人確實患有該病,化驗結果可定顯示為陽性。但有時候也會出現誤診,即在一千個完全健康的人中,有五十個人的化驗結果顯示為陽性(也即是說誤診率為百分之五)。

換成以頻率方式來表述這個問題,答案就顯然易見了:

P(患病|陽性) = 1/(1 + 50) = 1/51 = 0.0196 = 2%

通過這個例子,我們可以懂得,若能把概率問題轉換成頻率來表述,即便是需要使用貝葉斯這樣復雜定理來計算的問題,也能輕而易舉地解答。這就是《你的燈亮着么?》里面提到的“重述問題”的技巧。

示例三:在博弈論里面的應用

挑戰者 B 不知道原壟斷者 A 是屬於高阻撓成本(為阻止 B 進入而花費的成本)類型還是低阻撓成本類型,但B知道,如果 A 屬於高阻撓成本類型,B 進入市場時A進行阻撓的概率是20%(阻擾成本高,因此阻撓概率低);如果 A 屬於低阻撓成本類型,B 進入市場時 A 進行阻撓的概率是100%。

博弈開始時,B 認為 A 屬於高阻撓成本企業的概率為70%,因此,B 估計自己在進入市場時,受到 A 阻撓的概率為:

P(阻撓) = 0.7 × 0.2 + 0.3 × 1.0 = 0.44

0.44 是在 B 給定 A 所屬類型的先驗概率下,A 可能采取阻撓行為的概率。

當 B 進入市場時,若 A 確實進行阻撓。根據貝葉斯定理,從 A 進行阻撓這一行為,B 可修正 A 屬於高阻撓成本企業的概率為::

P(高成本阻擾企業) = 0.7 × 0.2 ÷ 0.44 × 1.0 = 0.32

根據這一新的先驗概率,B 估計自己在進入市場時,受到 A 阻撓的概率為:

P(阻撓) = 0.32 × 0.2 + 0.68 × 1 = 0.744

若 B 再一次進入市場時,A 又進行了阻撓。根據貝葉斯定理,從 A 再次進行阻撓這一行為,B 可修正 A 屬於高阻撓成本企業的概率為

P(高成本阻擾企業) = 0.32 × 0.2 ÷ 0.744 × 1.0 = 0.086

這樣,根據 A 一次又一次的阻撓行為,B 不斷修正判斷 A 為高阻撓成本的概率(越來越低了),從而越來越傾向於將 A 判斷為低阻撓成本企業。

示例四:在計算機領域中的應用

貝葉斯定理在計算機領域中的應用那可是太多了,無論是在機器學習,自然語言處理,圖像識別,推薦算法,搜索算法還是垃圾郵件處理中都大有用途。這些應用中都有一個特點,那就是根據既有輸入,在龐大的已有數據庫中尋找匹配程度(也即是發生概率)最高的那些項。由於這些話題太大,在這里就不展開了。

徐宥翻譯過 Peter Norvig 寫的一篇怎樣寫一個拼寫檢查器的文章,作者只用了 20 行 Python 代碼就實現了拼寫檢查/糾錯,相當強大。文章也寫得深入淺出,推薦看看,翻譯版本在這里

參考

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM