貝葉斯文本分類
1 、基本定義:
分類是把一個事物分到某個類別中。一個事物具有很多屬性,我們可以把它的眾多屬性轉化為向量表示形式,即 x=(x1,x2,x3,…,xn) ,分別代表每個實例有n個屬性值, 實例的集合x 記為 X ,稱為屬性集。相應的類標簽集合 C={c1,c2,…cm} ,X 和 C 的關系是不確定的,可以將X 和 C 看作是隨機變量, P(C|X) 稱為 C 的后驗概率,與之相對的, P(C) 稱為 C 的先驗概率。后驗概率是需要計算算出來的,先驗概率是天生就知道的,不需要復雜公式求解。
根據貝葉斯公式,后驗概率 P(C|X)=P(X|C)P(C)/P(X) ,但在比較不同 C 值的后驗概率時,分母 P(X) 總是常數,我們可以把它忽略掉,后驗概率 P(C|X)=P(X|C)P(C) ,先驗概率 P(C) 可以通過計算訓練集中屬于每一個類的訓練樣本所占的比例,容易估計,對類條件概率P(X|C) 的估計,這里我只說樸素貝葉斯分類器方法,因為 樸素貝葉斯假設事物屬性之間相互條件獨立, P(X|C) = ∏P(xi|ci) 。
2 、文本分類過程
例如文檔: Love makes all hard hearts gentle. 可以用一個文本特征向量來表示, x=(Love, makes, all, hard, hearts , gentle) 。
在文本分類中,我們首先需要準備一些打上標簽的訓練樣本,這里的打標簽就是分類的類別C中元素。
樸素貝葉斯分類器是一種監督學習模型,常見有兩種模型,多項式模型 (Multinomial Model) 即詞頻型和伯努利模型 (Bernoulli Model) 即文檔型。二者的計算粒度不一樣,多項式模型以單詞為粒度,伯努利模型以文件為粒度,因此二者的先驗概率和類條件概率的計算方法都不同。
計算后驗概率時,對于一個文檔 d ,在多項式模型中,只有在 d 中出現過的單詞,才會參與后驗概率計算,而在伯努利模型中,沒有在 d 中出現,但是在全局單詞表中出現的單詞,也會參與計算,不過是作為 “ 反例 ” 參與的。這里暫不考慮特征抽取、為避免消除測試文檔時類條件概率中有為 0 現象而做的取對數等問題。
2.1 多項式模型
1 )基本原理
在多項式模型中, 設某文檔 d=(t1,t2,…,tk) , tk 是該文檔中出現過的單詞,允許重復,則
先驗概率 P(c)= 類 c 下單詞總數 / 整個訓練樣本的單詞總數
類條件概率 P(tk|c)=( 類 c 下單詞 tk 在各個文檔中出現過的次數之和 +1)/( 類 c 下單詞總數 +|V|)
V 是訓練樣本的單詞表(即抽取單詞,單詞出現多次,只算一個), |V| 則表示訓練樣本包含多少種單詞。 P(tk|c) 可以看作是單詞 tk 在證明 d 屬于類 c 上提供了多大的證據,而 P(c) 則可以認為是類別 c 在整體上占多大比例 ( 有多大可能性 ) 。
2 )舉例
給定一組分好類的文本訓練數據,如下:
docId |
doc |
類別abusive? |
1 | my dog has flea problems help please |
no |
2 | maybe not take him to dog park stupid |
yes |
3 | my dalmation is so cute I love him |
no |
4 | stop posting stupid worthless garbage |
yes |
5 | mr licks ate my steak how to stop him | no |
6 | quit buying worthless dog food stupid | yes |
給定一個新樣本 I love love my stupid dalmation ,對其進行分類。該文本用屬性向量表示為 d=(I, love, love, my, stupid, dalmation) ,類別集合為 Y={yes, no} 。
類 yes 下總共有 19 個單詞,類 no 下總共有 24 個單詞,訓練樣本單詞總數為 43 ,因此P(yes)=19/43, P(no)=24/43 。類條件概率計算如下:
P(I | yes)=(0+1)/(19+32)=1/51
P(love | yes)=(0+1)/(19+32)=1/51,此處有兩個love,均為1/56
P(my | yes)=(0+1)/(19+32)=1/51
P(stupid | yes)=(3+1)/(19+32)=4/51
P(dilmation | yes)=(0+1)/(19+32)=1/51
P(I | no)=(1+1)/(24+32)=2/56
P(love | no)=(1+1)/(24+32)=2/56,此處也是兩個love均為2/56
P(my | no)=(3+1)/(24+32)=4/56
P(stupid | no)=(0+1)/(24+32)=1/56
P(dilmation | no)=(1+1)/(24+32)=2/56
分母中的 19,是指 yes 類別下 textc 的長度,也即訓練樣本的單詞總數, 32 是指訓練樣本有 32個不重復的單詞, 24 是指 no 類下共有 24 個單詞。
有了以上類條件概率,開始計算后驗概率:
P(yes | d)=(1/51) 5 ×4/51 ×19/43=76/756640375443≈1.0044401867334042e-10
P(no | d)= (2/56) 4 ×4/56×1/56 ×24/43=1536/1326162116608≈1.1582294357259384e-09
比較大小,即可知道這個文檔屬于類別 no,也就是非abusive的 。
2.2 伯努利模型
1 )基本原理
P(c)= 類 c 下文件總數 / 整個訓練樣本的文件總數
P(tk|c)=( 類 c 下包含單詞 tk 的文件數 +1)/( 類 c 下文件總數 +2)
2 )舉例
使用前面例子中的數據,模型換成伯努利模型。
類 yes 下總共有 3 個文件,類 no 下有3 個文件,訓練樣本文件總數為6 ,因此P(yes)=1/2, P(my | yes)=(0+1)/(3+2)=1/5 ,
P(dog | yes)=(2+1)/(3+2)=3/5,把所有的43個單詞的條件概率都計算出來,同理把no類別下的43個單詞的條件概率也都計算出來
有了以上類條件概率,開始計算后驗概率,
P(yes|d)=P(yes)×P(I|yes)×P(love|yes)×P(my|yes)×P(stupid|yes)×P(dalmation|yes)×(1-P(my|yes))×(1-P(...|yes))(其余所有的單詞都是1-P()的形式)
同理P(no|d)計算過程相同,此處就不羅列計算了。
計算結果誰大就是哪個類別,具體數字我就不算了,最終結果也可能與多項式模型給出的結果不一致 。
后記: 文本分類是作為離散型數據的,樸素貝葉斯用于很多方面,數據就會有連續和離散的,連續型時可用正態分布,還可用區間,將數據的各屬性分成幾個區間段進行概率計算,測試時看其屬性的值在哪個區間就用哪個條件概率。再有 TF、TDIDF,這些只是描述事物屬性時的不同計算方法,例如文本分類時,可以用單詞在本文檔中出現的次數描述一個文檔,可以用出現還是沒出現即0和1來描述,還可以用單詞在本類文檔中出現的次數與這個單詞在剩余類出現的次數(降低此屬性對某類的重要性)相結合來表述。