樸素貝葉斯很直觀,計算量也不大,在很多領域有廣泛的應用,這里我們就對樸素貝葉斯算法原理做一個小結。
- 樸素貝葉斯相關的統計學知識
在了解樸素貝葉斯的算法之前,我們需要對相關必須的統計學知識做一個回顧。
貝葉斯學派很古老,但是從誕生到一百年前一直不是主流。主流是頻率學派。頻率學派的權威皮爾遜和費歇爾都對貝葉斯學派不屑一顧,但是貝葉斯學派硬是憑借在現代特定領域的出色應用表現為自己贏得了半壁江山。
貝葉斯學派的思想可以概括為先驗概率+數據=后驗概率。也就是說我們在實際問題中需要得到的后驗概率,可以通過先驗概率和數據一起綜合得到。數據大家好理解,被頻率學派攻擊的是先驗概率,一般來說先驗概率就是我們對于數據所在領域的歷史經驗,但是這個經驗常常難以量化或者模型化,于是貝葉斯學派大膽的假設先驗分布的模型,比如正態分布,beta分布等。這個假設一般沒有特定的依據,因此一直被頻率學派認為很荒謬。雖然難以從嚴密的數學邏輯里推出貝葉斯學派的邏輯,但是在很多實際應用中,貝葉斯理論很好用,比如垃圾郵件分類,文本分類。
我們先看看條件獨立公式,如果X和Y相互獨立,則有:
而條件概率公式:
或者說:
那么,全概率公式:
其中,
從而,很容易得出貝葉斯公式:
2.樸素貝葉斯的模型
從統計學知識回到我們的數據分析。假如我們的分類模型樣本是:
即我們有m個樣本,每個樣本有n個特征,特征輸出有K個類別,定義為。
從樣本我們可以學習得到樸素貝葉斯的先驗分布,接著學習到條件概率分布
,然后我們就可以用貝葉斯公式得到X和Y的聯合分布P(X,Y)了。聯合分布P(X,Y)定義為:
從上面的式子可以看出比較容易通過最大似然法求出,得到的
就是類別
在訓練集里面出現的頻數。但是
很難求出,這是一個超級復雜的有n個維度的條件分布。樸素貝葉斯模型在這里做了一個大膽的假設,即X的n個維度之間相互獨立,這樣就可以得出:
從上式可以看出,這個很難的條件分布大大的簡化了,但是這也可能帶來預測的不準確性。你會說如果我的特征之間非常不獨立怎么辦?如果真是非常不獨立的話,那就盡量不要使用樸素貝葉斯模型了,考慮使用其他的分類方法比較好。但是一般情況下,樣本的特征之間獨立這個條件的確是弱成立的,尤其是數據量非常大的時候。雖然我們犧牲了準確性,但是得到的好處是模型的條件分布的計算大大簡化了,這就是貝葉斯模型的選擇。
最后回到我們要解決的問題,我們的問題是給定測試集的一個新樣本特征,我們如何判斷它屬于哪個類型?
既然是貝葉斯模型,當然是后驗概率最大化來判斷分類了。我們只要計算出所有的K個條件概率,然后找出最大的條件概率對應的類別,這就是樸素貝葉斯的預測了。
- 樸素貝葉斯的推斷過程
上節我們已經對樸素貝葉斯的模型也預測方法做了一個大概的解釋,這里我們對樸素貝葉斯的推斷過程做一個完整的詮釋過程。
我們預測的類別是使
最大化的類別,數學表達式為:
由于對于所有的類別計算時,上式的分母是一樣的,都是
,因此,我們的預測公式可以簡化為:
接著我們利用樸素貝葉斯的獨立性假設,就可以得到通常意義上的樸素貝葉斯推斷公式:
- 樸素貝葉斯的參數估計
在上一節中,我們知道只要求出和
,我們通過比較就可以得到樸素貝葉斯的推斷結果。這一節我們就討論怎么通過訓練集計算這兩個概率。
對于比較簡單,通過極大似然估計我們很容易得到
為樣本類別
出現的頻率,即樣本類別
出現的次數
除以樣本總數m。
對于,這個取決于我們的先驗條件:
a) 如果我們的是離散的值,那么我們可以假設
符合多項式分布,這樣得到
是在樣本類別
中,
出現的頻率。即:
其中為樣本類別
出現的次數,而
為類別為
的樣本中,第j維特征
出現的次數。
某些時候,可能某些類別在樣本中沒有出現,這樣可能導致為0,這樣會影響后驗的估計,為了解決這種情況,我們引入了拉普拉斯平滑,即此時有:
其中 為一個大于0的常數,常常取為1。
b)如果我們我們的是非常稀疏的離散值,即各個特征出現概率很低,這時我們可以假設
符合伯努利分布,即特征
出現記為1,不出現記為0。即只要
出現即可,我們不關注
的次數。這樣得到
是在樣本類別
中,
出現的頻率。此時有:
其中,取值為0和1。
c)如果我們我們的是連續值,我們通常取
的先驗概率為正態分布,即在樣本類別
中,
的值符合正態分布。這樣
的概率分布是:
其中和
是正態分布的期望和方差,可以通過極大似然估計求得。
為在樣本類別
中,所有
的平均值。
為在樣本類別
中,所有
的方差。對于一個連續的樣本值,帶入正態分布的公式,就可以求出概率分布了。
- 樸素貝葉斯算法過程
我們假設訓練集為m個樣本n個維度,如下:
共有K個特征輸出類別,分別為,每個特征輸出類別的樣本個數為
,在第k個類別中,如果是離散特征,則特征
各個類別取值為
。其中l取值為
,
為特征j不同的取值數。
輸出為實例的分類。
算法流程如下:
如果沒有Y的先驗概率,則計算Y的K個先驗概率:
,否則
為輸入的先驗概率。
分別計算第k個類別的第j維特征的第l個個取值條件概率:
a)如果是離散值:
可以取值為1,或者其他大于0的數字。
b)如果是稀疏二項離散值:
此時只有兩種取值。
c)如果是連續值不需要計算各個l的取值概率,直接求正態分布的參數:
需要求出和
。
為在樣本類別
中,所有
的平均值。
為在樣本類別
中,所有
的方差。
3)對于實例,分別計算:
4)確定實例的分類
從上面的計算可以看出,沒有復雜的求導和矩陣運算,因此效率很高。
- 樸素貝葉斯算法小結
樸素貝葉斯算法的主要原理基本已經做了總結,這里對樸素貝葉斯的優缺點做一個總結。
樸素貝葉斯的主要優點有:
1)樸素貝葉斯模型發源于古典數學理論,有穩定的分類效率。
2)對小規模的數據表現很好,能個處理多分類任務,適合增量式訓練,尤其是數據量超出內存時,我們可以一批批的去增量訓練。
3)對缺失數據不太敏感,算法也比較簡單,常用于文本分類。
樸素貝葉斯的主要缺點有:
1) 理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實際上并非總是如此,這是因為樸素貝葉斯模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,在屬性個數比較多或者屬性之間相關性較大時,分類效果不好。而在屬性相關性較小時,樸素貝葉斯性能最為良好。對于這一點,有半樸素貝葉斯之類的算法通過考慮部分關聯性適度改進。
2)需要知道先驗概率,且先驗概率很多時候取決于假設,假設的模型可以有很多種,因此在某些時候會由于假設的先驗模型的原因導致預測效果不佳。
3)由于我們是通過先驗和數據來決定后驗的概率從而決定分類,所以分類決策存在一定的錯誤率。
4)對輸入數據的表達形式很敏感。
注:本文編輯轉載于云時之間,由于原文出現公式未在markdown環境下編輯,因此本文在其基礎上做一下簡單改進,對其工作表示衷心感謝。
原文鏈接:http://www.lxweimin.com/p/163192c6a64e