Naive Bayes Classifier - 樸素貝葉斯分類器
簡介
在機器學習中,樸素貝葉斯分類器是一系列基于“貝葉斯原理”和“特征之間獨立分布假設”的概率分類器的總稱。把它的名稱分成兩部分來看,一部分是“貝葉斯”對應的是“貝葉斯原理”;另一部分對應的是“樸素 Naive” 對應的是 “特征之間獨立分布假設”,因為在現實世界里這明顯是一個過于簡單的假設。
自20世紀50年代以來, 樸素貝葉斯一直受到廣泛的研究。它是在1960s,作為一種流行的文本分類方法進入人們的視野。經過適當的預處理, 它在文本分類領域甚至可以與更高級的算法(比如svm)取得相當的水平; 在自動醫療診斷中也有發現其應用價值。
數學原理
樸素貝葉斯本質上是一個條件概率模型,他首先要解決的問題是求出某個狀態X=(x1,…,xn)X=(x_1, \dots, x_n)X=(x1?,…,xn?)下,發生事件CkC_kCk?的概率。數學表達式如下:
p(Ck∣x1,…,xn)p(C_k \mid x_1, \dots, x_n) p(Ck?∣x1?,…,xn?)
根據“貝葉斯原理”,上述表達式可以轉化成如下表達式,其中X=(x1,…,xn)X=(x_1, \dots, x_n)X=(x1?,…,xn?):
對于給定的x來說,p(x)其實是一定的,可以理解為是個常數。那么說明我們要求解的是上述等式的分子,分子可以用如下聯合概率(joint probability)表達式表示:
p(Ck,x1,…,xn)p(C_k , x_1, \dots, x_n) p(Ck?,x1?,…,xn?)
根據條件概率定義,可以使用鏈式法則作如下推導:
到了這個時候,該’Naive Bayes’里的Naive出來表演了,Naive指的是簡單,樸素:假設X=(x1,…,xn)X=(x_1, \dots, x_n)X=(x1?,…,xn?)里的所有xix_ixi?相互獨立。
根據這個前提假設我們可以知道:
因此,我們要求解的問題可以表達如下,其中∝\propto∝表示成正比:
可以進一步表達如下,其中
:
截止目前以上討論的都是 Naive Bayes 概率模型的推導問題,離我們要討論的 Naive Bayes Classifier 還差一步。要形成一個完整的 Naive Bayes Classifier,我們還需要一個判定法則。最通常用的一個法則是最大概率法則(MAP rule);
結合如上法則,我們可以形成一個完整的 Naive Bayes Classifier 了。
不同的 Naive Bayes Classifier 的不同之處主要體現在其對 P(xi∣y)P(x_i \mid y)P(xi?∣y) 的假設上,比如說 ‘Gaussian Naive Bayes’ 的假設是,P(xi∣y)P(x_i \mid y)P(xi?∣y) 服從高斯分布:
P(xi∣y)=12πσy2exp?(?(xi?μy)22σy2)P(x_i \mid y) = \frac{1}{\sqrt{2\pi\sigma^2_y}} \exp\left(-\frac{(x_i - \mu_y)^2}{2\sigma^2_y}\right)P(xi?∣y)=2πσy2??1?exp(?2σy2?(xi??μy?)2?)
在訓練一個 “Gaussian Naive Bayes Classifier” 的時候,我們的目的是計算出 y 的mean(μy\mu_yμy?)和std(σy2\sigma^2_yσy2?)。
優劣勢討論
樸素貝葉斯是一種基于概率理論的分類算法,其代碼實現和訓練都比較簡單,需要計算量較少。盡管它對于特征相互獨立這一假設不太符合實際,但是卻使其在在實際中更加實用。特征間關系的解耦,使得我們可以獨立地研究每個特征相對于類別的分布,有效避免了‘維度災難’(即需要處理的數據量隨著特征數量(維度)的增加呈指數級地增長)。
另一方面,盡管樸素貝葉斯在分類領域的效果不錯,是處理分類問題的一把好手,但卻不能準確預測事務的概率,它的機制設計是通過概率之間的比較輸出結果,更關注的是相對的大小。
參考文獻
維基百科 - Naive Bayes Classifier
scikit-learn - 1.9. Naive Bayes