條件概率和貝葉斯公式
條件概率
\(p(x|y)\) 表示在 \(y\) 發生的條件下 \(x\) 發生的概率。
條件概率公式:
已知 \(p(x)\) 和 \(p(y)\),以及\(x\), \(y\)同時發生的概率\(p(xy)\),那麼
\[p(x|y) = \frac{p(xy)}{p(y)}\]
\[p(y|x) = \frac{p(xy)}{p(x)}\]
貝葉斯公式
由以上兩個公式我們還可以得到
\[p(x|y) = \frac{p(y|x)p(x)}{p(y)}\]
這就是貝葉斯公式。其中,
\(p(x)\) 稱爲 \(x\) 的先驗概率,
\(p(y)\) 稱爲 \(y\) 的先驗概率,
\(p(y|x)\) 稱爲 \(y\) 在 \(x\) 發生後的後驗概率,
\(p(x|y)\) 稱爲 \(x\) 在 \(y\) 發生後的後驗概率。
我們把其中的\(x, y\)替換成“特徵”,“類別”,於是就有更容易理解的公式:
\[p(類別|特徵) = \frac{p(特徵|類別)p(類別)}{p(特徵)}\]
使用樸素貝葉斯算法對數據進行分類
基本原則:
假設我們有兩種類別\(c_1, c_2\),如何對特徵\(\vec{w}\)進行分類?只要計算\(p(c_1|\vec{w})\)與\(p(c_2|\vec{w})\),然後判斷哪個概率更大。
\(\text{if}\ p(c_1|\vec{w}) > p(c_1|\vec{w})\ \text{then} \ \vec{w} \in c_1\)
\(\text{if}\ p(c_1|\vec{w}) < p(c_1|\vec{w})\ \text{then} \ \vec{w} \in c_2\)
例1:簡單的數據分類
已知某女擇偶標準可分爲[帥,富,高,上進]四個特徵。其中根據四個特徵分別取值1和0,根據該女過去的相親記錄,有如下分佈:
帥 | 富 | 高 | 上進 | 嫁 |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | 0 | 0 |
0 | 0 | 1 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 1 | 1 | 0 | 1 |
0 | 1 | 1 | 1 | 1 |
1 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 0 |
1 | 1 | 1 | 0 | 1 |
現在有一男,特徵分別是[帥,不富,高,不上進],請問是否符合該女的擇偶標準?
解:根據貝葉斯公式,我們要求的量是 \(p(嫁|[帥,不富,高,不上進])\) 和 \(p(不嫁 | [帥,不富,高,不上進])\)。
我們先計算比較容易計算的量:\(p([帥,不富,高,不上進])\),由於樸素貝葉斯的條件,我們認爲這四個特徵是彼此獨立的。因此
\[\begin{align*}
p([帥,不富,高,不上進]) & = p(帥)p(不富)p(高)p(不上進) \\
& = 0.3 \times 0.6 \times 0.5 \times 0.5 \\
& = 0.045
\end{align*}\]
另外我們還可以求得
\[p(嫁) = 0.5, p(不嫁) = 0.5\]
由於各特徵彼此獨立,所以
\[\begin{align*}p([帥,不富,高,不上進] | 嫁) &= p(帥|嫁)p(不富|嫁)p(高|嫁)p(不上進|嫁) \\
& = \frac{p(帥,嫁)}{p(嫁)} \times \frac{p(不富,嫁)}{p(嫁)} \times \frac{p(高,嫁)}{p(嫁)} \times \frac{p(不上進,嫁)}{p(嫁)} \\
& = \frac{0.1}{0.5} \times \frac{0.1}{0.5} \times \frac{0.4}{0.5} \times \frac{0.2}{0.5} \\
& = 0.0128
\end{align*}\]
\[\begin{align*}p([帥,不富,高,不上進] | 不嫁) &= p(帥|不嫁)p(不富|不嫁)p(高|不嫁)p(不上進|不嫁) \\ & = \frac{p(帥,不嫁)}{p(不嫁)} \times \frac{p(不富,不嫁)}{p(不嫁)} \times \frac{p(高,不嫁)}{p(不嫁)} \times \frac{p(不上進,不嫁)}{p(不嫁)} \\ & = \frac{0.2}{0.5} \times \frac{0.5}{0.5} \times \frac{0.1}{0.5} \times \frac{0.3}{0.5} \\ & = 0.048 \end{align*}\]
所以
\[\begin{align*}
p(嫁|[帥,不富,高,不上進]) &= \frac{p([帥,不富,高,不上進] | 嫁)p(嫁)}{p([帥,不富,高,不上進])} \\
&=\frac{0.0128 \times 0.5}{0.045} \\
&=0.142
\end{align*}\]
\[\begin{align*} p(不嫁 | [帥,不富,高,不上進]) &= \frac{p([帥,不富,高,不上進] | 不嫁)p(不嫁)}{p([帥,不富,高,不上進])} \\ &= \frac{0.048 \times 0.5}{0.045} \\ &= 0.533 \end{align*}\]
顯然 \(p(不嫁 | [帥,不富,高,不上進]) > p(嫁|[帥,不富,高,不上進])\),所以該男不符合該女的擇偶標準。
但是,這個例子僅僅是通過現有的數據和貝葉斯公式直接得出結論,缺少訓練的步驟。下面這個例子會通過對垃圾郵件進行分類來詳細說明訓練和測試的步驟。
例二:垃圾郵件分類
本質上,垃圾郵件分類可以用貝葉斯公式表示如下:
\[p(是垃圾郵件|詞向量\vec{w_i}) = \frac{p(\vec{w_i}|是垃圾郵件)p(是垃圾郵件)}{p(\vec{w_i})}\]
因此,我們要計算的就是等式右邊的三個概率。
- 文本人工標註,確定 \(p(是垃圾郵件)\) 和 \(p(不是垃圾郵件)\)。
對文本進行劃分,求 \(p(\vec{w_i})\)。
\(p(\vec{w_i})\) 的本質是,在\(\vec{w_i}\)中出現的所有詞佔全部詞的比例。
假定所有單詞出現的概率是彼此獨立的,那麼
\[p(\vec{w_i}) = p(w_0)p(w_1)p(w_2)...p(w_n), \ w0,w1,...w_n \in \vec{w_i}\]
因此
\[p(\vec{w_i}) = \prod_{k=1}^N \frac{在文本t_i中w_k出現的次數}{w_k出現的總次數}\]計算\(p(\vec{w_i} | 是垃圾郵件)\)
同樣地,由於各單詞出現的概率彼此獨立,因此
\[\begin{align*} p(\vec{w_i} | 是垃圾郵件) & = \prod_{i=1}^N \frac{p(\vec{w_i}, 是垃圾郵件)}{p(是垃圾郵件)} \end{align*}\]
使用對數可以消除乘除法帶來的誤差,所以上述公式又可表示成
\[\begin{align*} \ln p(是垃圾郵件|\vec{w_i}) & = \ln p(\vec{w_i} | 是垃圾郵件) + \ln p(是垃圾郵件) - \ln p(\vec{w_i})\\ \end{align*}\]