樸素貝葉斯(Naive Bayes)和情感分類
Naive Bayes分類器
Naive Bayes是一個概率分類器,也就是說,在文件d中,返回所有類別c中後驗概率最大的類別$\hat{c}$:
$$\hat{c}=\text{argmax}P(c\vert d)$$
回顧一下貝葉斯法則:
$$P(x\vert y)=\frac{P(y\vert x)P(x)}{P(y)}$$
它把任何條件概率 轉化成了三個概率。
其中,$P(y)$是先驗概率 或者邊緣概率 。
貝葉斯法則可以從條件概率的定義推導,過程如下:
$$P(A\vert B) = \frac{P(A\cap B)}{P(B)}$$
又,
$$P(A\vert B)P(B) = P(A\cap B) = P(B\vert A)P(A)$$
所以,
$$P(A\vert B) = \frac{P(B\vert A)P(A)}{P(B)}$$
上面第二個公式又叫做概率乘法法則 。
回到之前的$\hat{c}$,那麼此時有:
$$\hat{c}=\text{argmax}P(c\vert d)=\text{argmax}\frac{P(d\vert c)P(c)}{P(d)}$$
因為$P(d)$對於任何$c$都是一個不變的值,所以可以省去:
$$\hat{c}=\text{argmax}P(c\vert d)=\text{argmax}P(d\vert c)P(c)$$
上式,$P(d\vert c)$叫做似然(likelihood) ,$P(c)$即先驗概率(prior probability) 。
此時,假設文件$d$由n
個特徵組成,則有:
$$\hat{c}=\text{argmax}\overbrace{P(f_1,f_2,\dots,f_n\vert c)}^{\text{likelihood}}\ \overbrace{P(c)}^{\text{prior}}$$
要計算上面的似然 ,需要很多的引數和很大的訓練集,這個很難實現。
樸素貝葉斯有兩個假設:
- 位置無關
- $P(f_i\vert c)$條件獨立,也稱樸素貝葉斯假設
所以上式可以簡化為:
$$P(f_1,f_2,\dots,f_n\vert c)=P(f_1\vert c)P(f_2\vert c)\dots P(f_n\vert c)$$
即:
$$C_{NB}=\text{argmax}P(c)\prod_{f\in F}P(f\vert c)$$
詞袋模型(bag of words)不考慮詞語的位置,把詞語出現的頻次當做特徵,於是有:
$$C_{NB}=\text{argmax}P(c)\prod_{i\in positions}P(w_i\vert c)$$
為了避免數值下溢和提高計算速度,通常使用對數形式:
$$c_{NB}=\text{argmax}\log{P(c)+\sum_{i\in positions}\log{P(w_i\vert c)}}$$
訓練樸素貝葉斯分類器
為了知道$P(c)$和$P(f_i\vert c)$,我們還是使用最大似然估計(MLE) 。
有:
$$\hat{P}(c)=\frac{N_c}{N_{doc}}$$
$$\hat{P}(w_i\vert c)=\frac{count(w_i,c)}{\sum_{w\in V}count(w,c)}$$
為了避免某個概率值為0,我們使用拉普拉斯平滑(Laplace smooth or add-one smooth) :
$$\hat{P}(w_i\vert c)=\frac{count(w_i,c)+1}{\sum_{w\in V}(count(w,c)+1)}=\frac{count(w_i,c)+1}{(\sum_{w\in V}count(w,c))+\vert V\vert}$$
對於unknown word 怎麼處理呢?答案是:直接從測試資料集中移除這些詞,不計算概率 !
評估
TODO