樸素貝葉斯分類——大道至簡

分類問題

已知m個樣本 $(x^1,y^1), ...... (x^m,y^m)$,x是特徵變量,y是對應的類別。
要求一個模型函數h,對於新的樣本 $x^t$,可以儘可能準確的預測出 $y^t = h(x^t)$。html

機率角度

不少機器學習算法從偏差角度來構建模型函數h,也就是先假設一個h,而後定義一個h(x)與y的偏差,經過逐步減小h(x)與y的偏差來得到一個擬合的模型h。git

如今咱們從機率的角度來考慮一下。
假設y有m個類別,即 $y_1,......y_n ∈ \{C_1,......C_m\}$,
對於樣本 $x^t$,若是能計算出每一個類別的條件機率 $P(C_1|x^t),......P(C_m|x^t)$,那麼能夠認爲機率最大的那個類別就是 $x^t$ 所屬的類別。(關於條件機率和貝葉斯定理請參考 理解貝葉斯定理)。即算法

$$ h(x) = C_x = \arg\max \limits_{k \in \{1,2,...K\}} \Big(P(C_k|x) \Big) \quad(1) $$機器學習

樸素貝葉斯分類器

已知m個樣本 $(x^1,y^1),(x^2,y^2), ...... (x^m,y^m)$,
x是n維特徵變量,即 $x=(x_1,x_2,......x_n)$,
y是對應的類別,設有K個類別,即 $y^1,y^2,......y^m ∈ \{C_1,C_2,......C_K\}$,函數

對任一給定的x,咱們須要分別計算出x屬於各分類的機率 $P(C_1|x),P(C_2|x),......P(C_K|x)$,其中有最大值的$P(C_k|x)$,x即屬於該分類$C_k$,即樣本x屬於分類學習

$$ C_x = \arg\max \limits_{k \in \{1,2,...K\}} \Big(P(C_k|x) \Big) \quad(2) $$編碼

如今須要計算 $P(C_k|x)$,應用貝葉斯定理:spa

$$ P(C_k|x) = \frac{P(C_k)}{P(x)} P(x|C_k) \quad(3) \\ = \frac{P(C_k)}{P(x)} P(x_1,x_2,......x_n|C_k) \quad(4) $$orm

這裏 $P(x_1,x_2,......x_n|C_k)$ 是一個條件聯合機率,意思是在分類 $C_k$ 中,特徵 $(x_1,x_2,......x_n)$ 取一組特定值(也就是須要預測的樣本x的各特徵的值)的機率。這個機率不容易計算,爲了方便,因而樸素貝葉斯(Naive Bayes) 隆重登場。在這裏樸素的意思是,假定 x 的各特徵 $x_1,x_2,......x_n$ 是條件獨立的。(參考維基百科 - 條件獨立)。所以htm

$$ P(x_1,x_2,......x_n|C_k) = P(x_1|C_k)P(x_2|C_k)......P(x_n|C_k) \quad(5) $$

這個轉換其實就是 獨立變量的聯合分佈 = 各變量先驗分佈的乘積(參考 維基百科 - 聯合分佈),只不過這裏是條件機率,可是由於變換先後都有一樣的條件 $C_k$,從樣本空間 $C_k$ 的角度看,其實就是聯合分佈轉換成先驗分佈的乘積。(對樣本空間的理解請參考 理解貝葉斯定理)。

將(5)帶回(4)得

$$ P(C_k|x) = \frac{P(C_k)}{P(x)} P(x_1|C_k)P(x_2|C_k)......P(x_n|C_k) \\ = \frac{P(C_k)}{P(x)} \prod_{j=1}^{n}P(x_j|C_k) \quad(6) $$

對任一給定的樣本x的值是肯定的,且x不依賴於C,因此P(x)能夠看做常量。因此能夠忽略 $P(x)$。

$$ P(C_k|x) \propto P(C_k) \prod_{j=1}^{n}P(x_j|C_k) \\ C_x = \arg\max \limits_{k \in \{1,2,...K\}} \Big(P(C_k) \prod_{j=1}^{n}P(x_j|C_k) \Big) \quad(7) $$

這就是樸素貝葉斯分類的模型函數。

參數估計

上述公式中主要有兩項,分別考察一下如何計算。

參數1:$P(C_k)$

上式中 $P(C_k)$ 比較容易計算,用頻率來估算機率,統計m個樣本中屬於 $C_k$ 的樣本的頻率便可。設m個樣本中有 $m_k$ 個樣本的類別是 $C_k$,則

$$ P(C_k) = m_k / m \quad(8) $$

參數2:$P(x_j|C_k)$

對$P(x_j|C_k)$的計算須要事先假設樣本特徵$x_j$的數據分佈狀況。對特徵分佈的假設,咱們稱之爲事件模型,一般會採用如下三種假設。

  1. 多項式分佈

若是特徵$x_j$是離散值,能夠假設它符合 多項式分佈。能夠統計$x_j$的某個特徵在樣本中的頻率來估算其機率。
假設 特徵$x_j$ 有 $S_j$ 個可能的取值(好比天氣有陰、晴、雨三種狀態,則 $S_j=3$),而且在n個樣本中,類別爲 $C_k$、特徵 $x_j$ 取值爲 s 的樣本有 $m_{kjs}$ 個。則

$$ P(x_{js}|C_k) = m_{kjs} / m_k \quad(9) $$

有時候樣本中某個特徵的特定取值的樣本數 $m_{kjs} = 0$,這將致使整個 $P(C_k) \prod_{j=1}^{n}P(x_j|C_k) = 0$,嚴重扭曲了該特徵的機率分佈。所以,一般能夠採用拉普拉斯平滑來避免這種狀況發生。即

$$ P(x_{js}|C_k) = (m_{kjs} + \lambda) \big/ (m_k + S_j \lambda) \quad(10) $$

一般取 $\lambda = 1$
將(8)和(10)帶入貝葉斯分類器(7),獲得

$$ C_x = \arg\max \limits_{k \in \{1,2,...K\}} \Big(P(C_k) \prod_{j=1}^{n}P(x_j|C_k) \Big) \\ k = \arg\max \limits_{k \in \{1,2,...K\}} \Big( \frac{m_k}{m} \prod_{j=1}^{n} \frac{m_{kjs} + \lambda}{m_k + S_j \lambda} \Big) \quad(11) $$

用一個粗略的示意圖來理解一下特徵爲離散值時,條件機率$P(x_{js}|C_k)$如何根據樣本集來進行估算:

特徵爲離散值
圖中表示整個樣本空間,有兩個類別 $C_1, C_2$,每一個樣本有兩個特徵 $x_1, x_2$,其中 $x_1$ 有3個可取的離散值 $S_{11}, S_{12}, S_{13}$,$x_2$ 有4個可取的離散值 $S_{21}, S_{22}, S_{23}, S_{24}$。圖中橙色部分就是 $m_{111}$,即 類別=$C_1$,特徵=$x_1$,特徵值=$S_{11}$時(k=1,j=1,s=1)的樣本數,藍色部分就是 $m_{123}$,即 類別=$C_1$,特徵=$x_2$,特徵值=$S_{23}$時(k=1,j=2,s=3)的樣本數。整個灰色部分是 $m_1$,即類別爲 $C_1$的樣本數。

舉例:根據天氣狀況決定是否打網球
本案例來自 樸素貝葉斯分類器

打網球樣本

上面表格是某同窗在不一樣天氣狀況下的打網球決策數據。
假設今每天氣情況是:Outlook=sunny, Temperature=cool,Humidity=high,Wind=strong,該同窗是否會去打網球呢?
這裏的幾個特徵,天氣、溫度、溼度、風速都是離散型變量,適合採用上面的多項式貝葉斯分類方法。將上面的公式寫在這裏便於查看。

$$ k = \arg\max \limits_{k \in \{1,2,...K\}} \Big( \frac{m_k}{m} \prod_{j=1}^{n} \frac{m_{kjs} + \lambda}{m_k + S_j \lambda} \Big) \quad(11) $$

咱們須要計算 $k=\{yes, no\}$ 兩種狀況下,$x=(sunny,cool,high,strong)$ 的估算機率。
統計上表中各類狀況下的樣本數量可知:
總樣本數 m=14

打球(k=yes)的樣本數 $m_{yes}$ = 9
不打球(k=no)的樣本數 $m_{no}$ = 5

天氣的取值 $S_{Outlook}=3$(Sunny/Overcast/Rain)
晴天打球(k=yes,j=Outlook,s=sunny)的樣本數 $m_{kjs}=2$
晴天不打球(k=no,j=Outlook,s=sunny)的樣本數 $m_{kjs}=3$

溫度的取值 $S_{Temperature}=3$(Hot/Mild/Cool)
冷天打球(k=yes,j=Temperature,s=cool)的樣本數 $m_{kjs}=3$
冷天不打球(k=no,j=Temperature,s=cool)的樣本數 $m_{kjs}=1$

溼度的取值 $S_{Humidity}=2$(High/Normal)
潮溼天打球(k=yes,j=Humidity,s=high)的樣本數 $m_{kjs}=3$
潮溼天不打球(k=no,j=Humidity,s=high)的樣本數 $m_{kjs}=4$

風力的取值 $S_{Wind}=2$(Strong/Weak)
大風天打球(k=yes,j=Wind,s=strong)的樣本數 $m_{kjs}=3$
大風天不打球(k=no,j=Wind,s=strong)的樣本數 $m_{kjs}=3$

將上述數據代入公式(11),對於樣本 $x=(sunny,cool,high,strong)$ ,打球(k=yes)的機率

$$ k=yes \\ \frac{m_k}{m} \prod_{j=1}^{n} \frac{m_{kjs} + \lambda}{m_k + S_j \lambda} \\ = \frac{9}{14} \Big( \frac{2 + 1}{9 + 3} \Big) \Big( \frac{3 + 1}{9 + 3} \Big) \Big( \frac{3 + 1}{9 + 2} \Big) \Big( \frac{3 + 1}{9 + 2} \Big) \\ = 0.007084 $$

不打球(k=nos)的機率

$$ k=no \\ \frac{m_k}{m} \prod_{j=1}^{n} \frac{m_{kjs} + \lambda}{m_k + S_j \lambda} \\ = \frac{5}{14} \Big( \frac{3 + 1}{5 + 3} \Big) \Big( \frac{1 + 1}{5 + 3} \Big) \Big( \frac{4 + 1}{5 + 2} \Big) \Big( \frac{3 + 1}{5 + 2} \Big) \\ = 0.01822 $$

這裏 0.01822 > 0.007084,因此該同窗可能不會去打球。通過歸一化,
不打球的機率 = 0.01822 / (0.01822 + 0.007084) = 72%
(注:這裏計算結果與原案例中的數值不一樣,由於這裏有作拉普拉斯平滑,原案例中沒有。本案例中其實沒有出現特定特徵的樣本數爲0的狀況,能夠不用作拉普拉斯平滑,不過這裏是按照公式寫下來的,就按公式計算了)

  1. 伯努利分佈

若是特徵$x_j$是稀疏二項離散值,能夠假設它符合 伯努利分佈。上面打網球的案例中,溼度取值是 {high,normal},風力取值是 {strong,weak},這兩個特徵都是二項離散值。
伯努利分佈只有兩種可能的取值,咱們將其編碼爲 {0,1},則

$$ P(x_{js}|C_k) = \begin{cases} P(x_{js}=1|C_k) \\ P(x_{js}=0|C_k) = 1 - P(x_{js}=1|C_k) \end{cases} \quad(12) $$

另外注意到伯努利分佈實際上是多項式分佈的特例,因此咱們能夠用上面公式(12)計算,也能夠用以前多項式分佈公式(11)計算。

垃圾郵件分類等涉及文本的任務中能夠採用伯努利分佈,好比構造一個5000個不一樣單詞的向量做爲輸入特徵x,對於一段文本,其中有出現的單詞,在x中對應單詞的位置設爲1,其它位置爲0,這樣x中的每一個特徵(單詞)的取值爲1或0,符合伯努利分佈。

  1. 高斯分佈

若是特徵$x_j$是連續變量,能夠假設它符合 高斯分佈(正態分佈)。準確點說,是假設每一個類別 $C_k$ 下的 $x_{kj}$ 符合高斯分佈。這樣,咱們能夠經過高斯分佈的機率密度函數來計算樣本中 $x_j$ 某個特定值的條件機率 $P(x_{js}|C_k)$。高斯分佈的機率密度函數爲:

$$ f(x;\mu,\sigma) = \frac{1}{\sigma \sqrt{2 \pi}} exp \Big( - \frac{(x-\mu)^2}{2 \sigma ^2} \Big) $$

其中 $\mu$ 是均值,$\sigma^2$是方差。
假設在類別 $C_k$ 中,特徵 $x_j$ 的均值爲 $\mu_{kj}$,方差爲 $\sigma_{kj}^2$(這兩項能夠經過樣本數據統計出來)。則

$$ P(x_{j}|C_k) = \frac{1}{\sigma_{kj} \sqrt{2 \pi}} exp \Big( - \frac{(x_j-\mu_{kj})^2}{2 \sigma_{kj} ^2} \Big) $$

案例請參考 維基百科 - 案例 - 性別分類

處理連續數值問題的另外一種經常使用的技術是經過離散化連續數值的方法。一般,當訓練樣本數量較少或者是精確的分佈已知時,經過幾率分佈的方法是一種更好的選擇。
而在大量樣本的情形下離散化的方法表現更優,由於大量的樣本能夠學習到數據的實際分佈,而不用「樸素」的假設其分佈。典型狀況下不少任務都會提供大量的樣本,因此這時選擇離散化方法會比機率分佈估計的方法更好。

題外話

順便說一句,每次看到樸素這個詞,我就彷彿看到貝葉斯穿着一身打滿補丁衣服的樣子。而naive意思是缺少經驗的;幼稚的;無知的;輕信的。從公式推導過程來看,樸素貝葉斯分類器採用了一些簡化條件的假設,好比假設 x 的各特徵 $x_1,x_2,......x_n$ 是條件獨立的,假設樣本特徵數據符合多項式分佈、伯努利分佈、高斯分佈等,這些假設均可能不徹底符合實際狀況,由於對險惡的現實世界的無知從而採用了一些天真的假設。
不過,樸素還有一層含義是專注、純粹,在這個意義上,貝葉斯分類也算大道至簡,大智若愚了。

優缺點

樸素貝葉斯的主要優勢有:

1)算法簡單,有穩定的分類效率。
2)對小規模的數據表現很好,能個處理多分類任務,適合增量式訓練,尤爲是數據量超出內存時,咱們能夠一批批的去增量訓練。
3)對缺失數據不太敏感。

樸素貝葉斯的主要缺點有:   
1)「樸素」的假設若是與實際狀況不符,會影響模型效果。
2)輸入特徵數據的表現形式,好比是連續特徵,離散特徵仍是二元特徵,會影響機率計算和模型的分類效果。

參考

樸素貝葉斯算法原理小結
樸素貝葉斯分類器
維基百科 - Naive Bayes classifier
理解貝葉斯定理

相關文章
相關標籤/搜索