天天看點

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

數學準備

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

條件機率: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),它假設每個屬性存在一定的依賴,适當考慮一部分的屬性依賴。

原文釋出時間為:2018-07-28

本文作者:唐僧不用海飛絲

本文來自雲栖社群合作夥伴“

資料派THU

”,了解相關資訊可以關注“