乾貨|基於貝葉斯推斷的分類模型& 機器學習你會遇到的「坑」

乾貨|基於貝葉斯推斷的分類模型& 機器學習你會遇到的“坑”

本文3153字,建議閱讀8分鐘。

本文講解了在學習基於貝葉斯推斷的分類模型中,我們需要的準備和方法。

數學準備

概率:事件不確定性程度的量化,概率越大,表示事件發生的可能性越大。

條件概率:P(A|B),在條件B下,發生A的概率。

聯合概率:P(A,B),A事件與B事件同時發生的概率。如果因子相互獨立,聯合概率等於因子概率乘積,即P(A,B)=P(A)P(B)。如果因子獨立性不可知,那麼有更普遍的形式:P(A,B)=P(B)P(A|B)。

邊緣概率:∑AP(A,B)或∫AP(A,B),對聯合分佈其中一個因子的求和(積分),就得到了另一個因子的邊緣概率。

獨立同分布:隨機變量中每個變量的概率分佈相同,且變量之間互相獨立。

貝葉斯定理

曾經有一個笑話:有個人坐飛機,帶了個炸彈。問他為什麼,他說,飛機上有1個炸彈的幾率(假設)是萬分之一,根據概率論,同時有兩個炸彈的概率就是億分之一,所以我自己帶一個炸彈來降低該飛機上有炸彈的概率。

這個笑話之所以好笑,就是因為這個人混淆了聯合概率和條件概率,聯合概率是指兩件事情同時發生的概率,假如說飛機上有一個炸彈的概率是萬分之一,那麼有兩個炸彈的概率就是億分之一。而條件概率則是指在一件事情在另外一件事情的約束下發生的概率,此人已經攜帶了一個炸彈,那麼飛機上出現第二個炸彈的概率就是條件概率,仍然為萬分之一(假設攜帶炸彈相互獨立)。

如果A,B兩件事情相互獨立,聯合概率可以表示為P(AB)=P(A)P(B),我們用P(A|B)來表示給定B條件下A的發生概率,事實上,如果A,B不相互獨立,則P(A|B)≠P(A),聯合概率就表示為P(AB)=P(B)P(A|B)。

相應的,我們用P(B|A)來表示給定A條件下B的發生概率,聯合概率就變成了P(AB)=P(A)P(B|A)。如果我們連接起這兩個等式,再分別除以P(B)就會得到一個非常誘人且強大的公式,我們把他叫做貝葉斯定理:

乾貨|基於貝葉斯推斷的分類模型& 機器學習你會遇到的“坑”

我們會把等式左邊的P(A|B)叫做後驗概率,等式右邊的P(A)叫做先驗概率,P(B|A)叫做似然,但後驗概率和似然函數在本質上仍然是條件概率。這樣的叫法是為了強調貝葉斯定理從結果推原因的過程,也可以理解為一種事件發生之後的概率的修正。

Example:

假設我們現在有兩個碗,一個碗裡有30個藍色的小球,10個紅色的小球,另一個碗裡藍色小球和紅色小球分別有20個,現在的問題並不是你隨機挑一個碗從裡面拿球,拿到藍色的概率是多少(因為這太簡單了)。我要問的問題是,我拿到了一個藍球,它更可能來自我隨機挑選的第幾個碗?

我們把挑選碗的過程叫做事件A1,A2,挑選小球的過程叫做事件B1,B2,分別對應藍色和紅色,我們先求P(A1|B1),將其帶入貝葉斯公式,就可以求出後驗概率為0.6,我們再求P(A2|B1),代入得後驗概率為0.4,說明我們如果選出一個藍球,這個藍球更可能來自於第一個碗。

貝葉斯引入的動機

我們在本系列課程的第一篇《過擬合問題》中提到將數據分為訓練集和測試集,以及我們做交叉驗證的意義。簡單來說,分集的目的是為了評估模型的泛化能力,而交叉驗證的目的是為了將整個評估過程變得準確。

模型的泛化能力為什麼如此重要?因為無論在實驗室還是在工業界,真實的數據量太過龐大,而且數據的增長速度越來越快,我們所利用的數據只能被認為是從現實採樣而來,我們的模型勢必要接觸那些從來沒在訓練集出現過的數據。我們希望模型面對未知數據會有好的預測效果,也就是說,模型勢必要對觀測上的不確定性做出推斷。

我們通常用概率來表示變量的不確定性程度,並且將真實的變量取值當作一個概率分佈,機器學習會有視角的轉變:

  • 從貝葉斯的框架討論機器學習,那麼問題的目標就變成了:從現有的數據中估計後驗概率P(l|x)。比如分類問題,我們對於每一個x,選擇能使後驗概率最大的類別。
  • 如果我們選取的模型存在有限個參數,可以利用最大似然估計或最大後驗估計來給出我們的優化函數。

現在我們主要集中於第一個視角,探討基於貝葉斯推斷的模型。從貝葉斯定理可以看出,我們對後驗概率的計算要通過似然和先驗概率,這樣的模型叫做生成式模型。而譬如logistic regression,是直接對後驗概率進行估計,沒有用到貝葉斯定理,這樣的模型叫做判別式模型。

基於貝葉斯推斷的分類方法

我們現在考慮典型的機器學習的二分類問題,我們每一個訓練樣本都有若干的特徵(feature)和確定的標籤(label),我們的測試樣本只有特徵,沒有標籤。所以從貝葉斯推斷的角度來看,我們需要尋找的是一個最大化的條件概率(後驗概率)P(l|X),我們可以將其理解為,在已知樣本X的前提下,最大化它來自類別l的概率。也可以理解為:對於每一個樣本X,我們選擇能夠使後驗概率最大的類別l。

假如我們面臨的問題是,根據天氣、溫度、溼度和風力4個特徵來預測要不要去打網球,我們訓練樣本如下圖所示:

乾貨|基於貝葉斯推斷的分類模型& 機器學習你會遇到的“坑”

可以看出,類別l只有Yes和No兩種情況。如果我們的測試樣本X為(天氣=Sunny,溫度=Cool,溼度=high,風力=Strong),我們要分別計算出P(l=Yes|X)和P(l=No|X),然後比較大小,然後將概率大的那一方所選擇的類別當作我們預測的結果。

我們接下來的問題是,如何計算後驗概率P(l=Yes|X)和P(l=No|X)。我們將其帶入貝葉斯公式:

乾貨|基於貝葉斯推斷的分類模型& 機器學習你會遇到的“坑”

其中,P(l=Yes)很好理解,就是標記為Yes的樣本佔全部樣本的比例,我們也把它叫做類先驗(prior)概率,根據大數定律,我們可以根據出現的頻率來估計概率,這也是我們要從訓練樣本中獲取的信息。

P(X)則是用於歸一化的證據(evidence)因子,也是X出現的概率。我們可以考慮,對於類別為No的後驗概率:

乾貨|基於貝葉斯推斷的分類模型& 機器學習你會遇到的“坑”

可以看出,P(X)是相同的,所以當我們比較兩者大小時,這一項與計算無關。

P(X|l=Yes)是條件概率,是指在標記Yes的樣本中具有特徵X的樣本所佔的比例,我們也把它叫做似然(likelihood),這也是我們要從訓練樣本中獲取的信息.真正的問題在於,如果我們真的將X本身作為一個事件,那麼很有可能我們的測試樣本概率為零,而未被觀測到並不等於概率為零。

樸素貝葉斯(Naive Bayes)

我們注意到X是個向量,它包含了每個特徵的取值,於是我們可以將P(X|l=Yes)視為各個特徵取值的條件概率下的聯合概率,如果我們繼續假設特徵之間互相獨立,那麼聯合概率就變得非常容易計算:

乾貨|基於貝葉斯推斷的分類模型& 機器學習你會遇到的“坑”

樸素貝葉斯中,樸素(naive)的含義正是如此,它採用了屬性條件獨立性假設(attribute conditional independence assumption),讓似然變得簡單可計算。

讓我們先來總結一下上面那幅圖,分別計算各個屬性的條件概率:

乾貨|基於貝葉斯推斷的分類模型& 機器學習你會遇到的“坑”

乾貨|基於貝葉斯推斷的分類模型& 機器學習你會遇到的“坑”

乾貨|基於貝葉斯推斷的分類模型& 機器學習你會遇到的“坑”

乾貨|基於貝葉斯推斷的分類模型& 機器學習你會遇到的“坑”

所以,就有:

乾貨|基於貝葉斯推斷的分類模型& 機器學習你會遇到的“坑”

乾貨|基於貝葉斯推斷的分類模型& 機器學習你會遇到的“坑”

計算結果發現,將這個樣本歸結於Yes的後驗概率大約為0.0053,歸結於No的後驗概率大約為0.0206,No的後驗概率遠遠大於Yes的後驗概率,也就是說,對於這樣一個樣本,我們的預測結果會是——不要去打網球。

除了樸素貝葉斯這樣一種基於貝葉斯推斷的分類模型,面對機器學習的迴歸問題,我們是否也有基於貝葉斯推斷的模型?甚至我們還可以問,貝葉斯只是應用於模型之中嗎?那麼,我們的下一篇將會為大家介紹貝葉斯推斷的迴歸模型。

課堂TIPS

  • 廣義來看,貝葉斯分類器是生成式模型的一種(generative models)。樸素貝葉斯是貝葉斯分類最簡單的形式,因為它假設了屬性的條件概率互相獨立,使得計算後驗概率簡單可行。
  • 我們文中所舉的例子是離散屬性,所以概率的形式均為概率質量函數(PMF),我們可以將其推廣到連續屬性,只需要將概率的形式換為概率密度函數(PDF),但本質並不會發生改變。
  • 我們在用樸素貝葉斯方法時,需要計算多個屬性的條件概率下的聯合概率。但如果我們的樣本多樣性不夠豐富,很可能會出現我們的測試樣本中的某些屬性值並未在訓練樣本的某個類中出現,如果直接求解,則會造成概率為零的後果。面對這樣的情形,我們會在計算先驗概率的時候,引入拉普拉斯修正,強行使未出現的屬性條件概率不為零。
  • 我們在使用貝葉斯分類器做訓練時,實際上是在訓練先驗概率P(l)和似然P(X|l)。我們可以為了預測準確度,不斷地將新增樣本的屬性所涉及的概率估計進行修正;我們也可以為了預測速度,將所有的P(X|l)和P(l)預先計算好,遇到測試樣本時直接查表判別。
  • 樸素貝葉斯所依賴的屬性條件獨立性不一定成立,所以還有半樸素貝葉斯分類器(semi-naive),它假設每個屬性存在一定的依賴,適當考慮一部分的屬性依賴。(可以看這篇論文: Semi-naive Bayesian classifier)


分享到:


相關文章: