機器學習核心演算法之——貝葉斯方法
1.貝葉斯公式
貝葉斯公式已經成為機器學習的核心演算法之一,諸如拼寫檢查、語言翻譯、海難搜救、生物醫藥、疾病診斷、郵件過濾、文字分類、偵破案件、工業生產等諸多方面都有很廣泛的應用,它也是很多機器學習演算法的基礎。在這裡,有必要了解一下貝葉斯公式。
貝葉斯公式是以英國學者托馬斯·貝葉斯(Thomas Bayes)命名的。1763年Richard Price整理髮表了貝葉斯的成果《An Essay towards solving a Problem in the Doctrine of Chances》,這才使貝葉斯公式展現在世人的面前。
貝葉斯公式是為了解決”逆概”;問題而提出的。正概問題很常見,比如不透明袋中有黑球
M個,白球N個,隨手抓起一個球,求是黑球的概率,大家心算一下就能知道是 M/M+N 。
當然,生活中有大量這樣的例子,像人口流動統計、金融統計等等,這些統計的特徵就是我們事先已經知道了所有樣本的分佈情況,在此基礎上進行概率的計算,這就是“正概”問題。但是,如果我們不知道所有樣本的資訊(這樣的例子比比皆是,例如物理學中我們不可能看到所有電子的執行狀態,所以只能通過實驗模擬觀察大多數的情況去建立最合適的模型去解釋),同時我們又想知道樣本的概率怎麼辦呢?貝葉斯公式的作用就體現出來了。
還是一個袋子中裝著若干小球,裡面有黑色跟白色,我們隨機取出一些小球,然後根據小球的情況去計算袋中小球實際的分佈情況。此時我們可能有很多種模型(猜測)去解釋,隨著取出小球數量的增加,我們的模型也越來越精確,越來越逼近實際的情況,然後我們從這些模型中找出最貼合實際的。 總結來說:不同模型的求解就是計算不同的後驗概率(事件已經發生,求某種因素導致該事件發生的概率),對於連續的猜測空間是計算概率密度函式;模型比較如果不考慮先驗概率(根據以往的經驗和分析獲得的概率)則運用了最大似然估計。這就是貝葉斯思想的核心。
下面我舉一個例子:一所學校裡面有 60% 的男生,40% 的女生。男生總是穿長褲,女生則一半穿長褲一半穿裙子。有了這些資訊之後我們可以容易地計算“隨機選取一個學生,他(她)穿長褲的概率和穿裙子的概率是多大”,這個就是前面說的“正向概率”的計算。然而,假設你走在校園中,迎面走來一個穿長褲的學生(很不幸的是你高度近似,你只看得見他(她)穿的是否長褲,而無法確定他(她)的性別),你能夠推斷出他(她)是男生的概率是多大嗎?
一些認知科學的研究表明(《決策與判斷》以及《Rationality for Mortals》第12章:小孩也可以解決貝葉斯問題),我們對形式化的貝葉斯問題不擅長,但對於以頻率形式呈現的等價問題卻很擅長。在這裡,我們不妨把問題重新敘述成:你在校園裡面隨機遊走,遇到了 N 個穿長褲的人(仍然假設你無法直接觀察到他們的性別),問這 N 個人裡面有多少個女生多少個男生。
你說,這還不簡單:算出學校裡面有多少穿長褲的,然後在這些人裡面再算出有多少女生,不就行了?
我們假設全校總共有H個學生,其中男生(都穿長褲)佔60%,只有50%女生穿長褲。
我們首先計算穿長褲的人數:
H*P(Boy)*P(Pants|Boy)+H*P(Girl)*P(Pants|Girl),其中P(Boy)為男生比例,P(Pants|Boy)為男生中穿長褲的比率(此題中為100%),女生同理。其中創長褲的女生共有H*P(Girl)*P(Pants|Girl)個,兩者一比,我們就得到:
式1
P(Girl|Pants) = P(Girl)*P(Pants|Girl) / P(Boy)*P(Pants|Boy)+P(Girl)*P(Pants|Girl)
而這裡面男生女生可以泛指一切事物,所以通用公式為
式2(B'為B的互補,例如男生女生)
P(B|A)=P(B)*P(A|B) / P(B')*P(A|B')+P(B)*P(A|B)
其實分母就是指所有穿長褲的人的概率P(Pants)也就是P(A),分子是女生中穿長褲與是女生同時發生的概率,也就是P(Pants,Girl)或者說P(A,B),所以式2(全概率公式的一種特殊情況)又可以寫為: 式3
P(B|A)=P(A,B)/P(A)
又可以寫為: 式4
P(B|A)*P(A)=P(A,B)
同理,我們可以得到P(A|B)*P(B)=P(A,B) ,所以:
P(A|B)*P(B) = P(B|A)*P(A),即: 式5
P(B|A)=P(A)*P(B|A)/P(B)
式3或式4也就是貝葉斯公式。其實式2是一個問題共有兩種分類時的情況,例如性別、擲硬幣等只有兩種情況,現實生活中很多是由多種情況構成,一件事情可能由多個原因影響,那麼推廣開來,就是貝葉斯公式的通式。如圖1-1所示,一個事物有兩個影響要素A和B,面積的大小對應發生的概率大小,C事件的發生受到A和B要素的影響。如果計算在C事件發生是受到A事件影響的概率P(A|C),就是計算A∩C與C的面積之比,也就是P(A∩C)/P(C),P(A∩C)又可以寫為P(A,C),因為P(C|A)表示A條件下C事件發生的概率,P(A)表示A事件發生的概率,即A的面積,所以P(A)*P(C|A)即A∩C的面積,也就是即A和C同時發生的概率P(A,C)。就得到P(A∩C)=P(A)*P(C|A), 同理:P(B∩C)=P(B)*P(C|B),因為得到 P(A|C)=P(A)*P(C|A)/[P(A)*P(C|A)+P(B)*P(C|B)]。這是一個事物的影響因素由兩個組成的情況,我們把所有情況統一起來就是全概率公式:
式6
2.貝葉斯推斷
2.1什麼是貝葉斯推斷
貝葉斯推斷(BAYESIAN INFERENCE)是一種應用於不確定性條件下的決策的統計方法。貝葉斯推斷的顯著特徵是,為了得到一個統計結論能夠利用先驗資訊和樣本資訊。 通俗來講,我想知道A事件的發生,如果沒有任何的先驗知識,我只能做出它發生與不發生的概率各佔50%的判斷。但是,幸運的是我知道B事件發生了,根據兩者的關聯經驗,我知道它對A事件的發生起到促進作用,所以我可以更加準確的判斷A事件是大概率發生的(如80%),而不是起初的非零即一的50%。如果我有更多A的關聯事件,那麼我可以做出更加準確的判斷,這就是貝葉斯推斷。
我們還是看式5:P(B|A)=P(A)*P(B|A)/P(B) ,P(A)是我們的先驗概率,(Prior probability),即在B事件發生之前,我們對A事件概率的一個判斷。P(A|B)稱為"後驗概率"(Posterior probability),即在B事件發生之後,我們對A事件概率的重新評估。
P(B|A)/P(B)稱為"可能性函式"(Likelyhood),這是一個調整因子,使得預估概率更接近真實概率。
為了更直觀的解釋貝葉斯推斷,這裡舉一個維基百科的例子——吸毒監測:
假設一個常規的檢測結果的敏感度與可靠度均為99%,即吸毒者每次檢測呈陽性(+)的概率為99%。而不吸毒者每次檢測呈陰性(-)的概率為99%。從檢測結果的概率來看,檢測結果是比較準確的,但是貝葉斯定理卻可以揭示一個潛在的問題。假設某公司對全體僱員進行吸毒檢測,已知0.5%的僱員吸毒。請問每位檢測結果呈陽性的僱員吸毒的概率有多高?
令“D”為僱員吸毒事件,“N”為僱員不吸毒事件,“+”為檢測呈陽性事件。可得
1、P(D)代表僱員吸毒的概率,不考慮其他情況,該值為0.005。因為公司的預先統計表明該公司的僱員中有0.5%的人吸食毒品,所以這個值就是D的先驗概率。
2、P(N)代表僱員不吸毒的概率,顯然,該值為0.995,也就是1-P(D)。
3、P(+|D)代表吸毒者陽性檢出率,這是一個條件概率,由於陽性檢測準確性是99%,因此該值為0.99。
4、P(+|N)代表不吸毒者陽性檢出率,也就是出錯檢測的概率,該值為0.01,因為對於不吸毒者,其檢測為陰性的概率為99%,因此,其被誤檢測成陽性的概率為1 - 0.99 = 0.01。
5、P(+)代表不考慮其他因素的影響的陽性檢出率。該值為0.0149或者1.49%。我們可以通過全概率公式計算得到:此概率 = 吸毒者陽性檢出率(0.5% x 99% = 0.495%)+ 不吸毒者陽性檢出率(99.5% x 1% = 0.995%)。P(+)=0.0149是檢測呈陽性的先驗概率。
用數學公式描述為:
根據上述描述,我們可以計算某人檢測呈陽性時確實吸毒的條件概率P(D|+):
儘管吸毒檢測的準確率高達99%,但貝葉斯定理告訴我們:如果某人檢測呈陽性,其吸毒的概率只有大約33%,不吸毒的可能性比較大。假陽性高,則檢測的結果不可靠。
同時,我們可以計算一下假如一個人吸毒,但他誤檢測成陰性的概率P(D|-):
P(D|-) =P(-|D)P(D)/P(-|D)P(D)+P(-|N)P(N)
=0.01*0.005/0.01*0.005+0.99*0.995
=0.0000507
可見,一個人吸毒但被誤檢測為陰性的概率只有0.005%,也就是說一個人如果檢測為陰性,則基本可以判定他沒有吸毒。但是一個人如果監測為陽性,則只有33%的概率確定他吸毒。這在跟很多醫學監測當中的案例很相似,假陽性比假陰性更值得我們關注!
2.2貝葉斯推斷與拼寫糾正
貝葉斯推斷其實有很多應用,例如語言翻譯、中文分詞、影象識別等,很多部落格也以拼寫糾正作為示例,這裡我就詳細講一下拼寫糾正的過程。
經典著作《人工智慧:現代方法》的作者之一 Peter Norvig 曾經寫過一篇介紹如何寫一個拼寫檢查/糾正器的文章,詳情戳這裡。
使用者在輸入過程中,難免會遇到拼寫錯誤的情況,我們要做的就是給出一個或幾個糾正後的使用者本來想要輸入的單詞推薦。 這裡的一個關鍵問題就是:使用者到底想要輸入什麼單詞?
其實用數學的語言來描述,就是要求出
P(我們猜測使用者要輸入的單詞|使用者實際輸入的單詞)的大小。
用T表示我們猜測使用者輸入的單詞,用S表示使用者實際輸入的單詞,那麼就是求
P(t|S)= P(S|t)*P(t)/P(S)的大小。
對於同一個單詞,P(S)的概率是一樣的,那麼就等價於P(t|S)∝ P(S|t)×P(t)。
∝是正比於,不是無窮大,那麼要是的P(t|S)最大,就是使得P(S|t)×P(t)最大。
P(S|t)名義上是指我們猜測的單詞t是使用者真正想輸入單詞的概率,不同的單詞概率不同,這就涉及到最大似然估計。例如使用者輸入的單詞是thriw,這時throw跟thraw都有可能,但是你會想到,o跟i很接近,使用者可能要輸的單詞是throw的可能性比thraw的可能性大得多,根據最大似然估計找出最可能的單詞。但是,有時候光有最大似然並不能完美的解決問題,我們還需要利用先驗概率P(t)。
P(t)使我們猜測的單詞出現的概率,這些單詞t 1、 t 2 、t 3.... 理論上有無窮種,但它是一種先驗概率,對於單詞來說,可能有點抽象。這裡舉一個分詞的例子:
The girl saw the boy with a telescope.
如果僅用最大似然估計方法的話,可能會給出兩種結果:
1 The girl saw | the boy with a telescope
2.The girl saw the boy | with a telescope
但是根據我們的常識,一個女孩看著一個拿著望遠鏡的男孩?拿著望遠鏡有點莫名其妙,與“看”這個動作聯絡起來,那麼最合適的解釋恐怕是女孩拿著望遠鏡看那個男孩。那麼得出這個結論,就是用到我們的先驗知識,也就是P(t)。
原文釋出時間為:2018-09-17
本文作者:八個增