在文本分類中,需要先對文本分詞,原始的文本中可能由幾十萬個中文詞條組成,維度非常高。另外,為了提高文本分類的准確性和效率,一般先剔除決策意義不大的詞語,這就是特征詞提取的目的。本文將簡單介紹幾種文本特征詞提取算法。
信息增益(IG)
對於一個系統,其信息熵為\(H(S)=-\sum_{i}^{C}P_ilog_2(P_i)\).\(C\)表示類別個數,\(P_i\)表示第\(i\)的類別的概率。某個特征\(F\),有該特征和沒有該特征,信息量的變化,就是信息增益。
對特征\(F\),它的取值有\(n\)種(\(x_1\), \(x_2\), ... , \(x_n\)),計算每個值的條件熵,並取均值
$$H(C|F) = \sum_i^nP_{i}H(C|X=x_i)$$
在分類中,特征詞\(f\)只有存在(取值1)和不存在(取值為0)。那么\(H(C|f)=P(f=0)H(C|f=0) + P(f=1)H(C|f=1)\)。所以信息增益為
$$IG(F)=H(F)-H(C|F)=-\sum_{i=1}^{n}P(C_i)log(P(C_i) + $$
$$\quad \qquad P(f=1)\sum_{i=1}^{n}P(C_i|f=1)logP(C_i|f=1)+P(f=0)\sum_{i=1}^{n}P(C_i|f=0)logP(C_i|f=0)$$
信息增益提取特征詞步驟:
1,統計正負分類的文檔數,記為\(N_1\), \(N_2\).
2, 統計每個詞在正文檔出現的頻率(A),負文檔出現的頻率(B),正文檔不出現的頻率(C),負文檔不出現的頻率(D).
3,計算信息熵
$$H(S)=-(\frac{N_1}{N_2+N_1}log(\frac{N_1}{N_1+N_2})+\frac{N_2}{N_1+N_2}log(\frac{N_1}{N_1+N_2}))$$
4,計算每個詞\(w\)的信息增益
$$IG(w) = H(S)+\frac{A+B}{N_1+N_2}(\frac{A}{A+B}log(\frac{A}{A+B})+\frac{B}{A+B}log(\frac{B}{A+B}))$$
$$\qquad\qquad +\frac{A+B}{N_1+N_2}(\frac{A}{A+B}log(\frac{A}{A+B})+\frac{B}{A+B}log(\frac{B}{A+B}))$$
5,按照信息增益的大小排序,取topxx就行。
卡方校驗(chi-square)
卡方檢驗最基本的思想就是通過觀察實際值與理論值的偏差來確定理論的正確與否。具體做的時候常常先假設兩個變量確實是獨立的(“原假設”),然后觀察實際值(觀察值)與理論值(這個理論值是指“如果兩者確實獨立”的情況下應該有的值)的偏差程度,如果偏差足夠小,我們就認為誤差是很自然的樣本誤差,是測量手段不夠精確導致或者偶然發生的,兩者確確實實是獨立的,此時就接受原假設;如果偏差大到一定程度,使得這樣的誤差不太可能是偶然產生或者測量不精確所致,我們就認為兩者實際上是相關的,即否定原假設,而接受備擇假設。
假設理論值是\(E\),實際值是\(x\),偏差程度的計算公式為:
$$\sum_{i}^{n}\frac{(x_i-E)^2}{E}$$
這個公式就是卡方檢驗使用的差值衡量公式,\(x_i\)表示樣本。如果差值很大,則認為與原假設不符合,認為詞與類別很相關。現在有N篇文章,分類有體育和非體育兩類,考察“足球”和體育類別的關系:
特征選擇 | 屬於體育 | 不屬於體育 | 總計 |
包含“足球”單詞 | A | B | A+B |
不包含“足球”單詞 | C | D | C+D |
總計 | A+C | B+D | N |
如果“足球”與體育不相關,則體育類文章包含“足球”的比例等同於所有文章包含“足球”的比例,所以A的理論值是
$$E_{11}=(A+C)\frac{A+B}{N}$$
卡方差值
$$D_{11}=\frac{(A-E_{11})^2}{E_{11}}$$
同樣可以求出\(D_{12}, D_{21}, D_{22}\),最后求出“足球”與“體育”類的卡方值
$$\chi^2(足球,體育)=D_{11}+D_{12}+D_{21}+D_{22}=\frac{N(AD-BC)^2}{(A+C)(A+B)(B+D)(C+D)}$$
卡方檢驗的缺點:只考慮了詞是否出現,而沒有考慮出現了多少次,容易誇大低頻詞的價值。如一個單詞a在一類文章中都出現一次,而另外一個單詞b在該類99%的文章中都出現了10次,但是b計算出來的卡方值要小於a,所以,在篩選的時候,容易篩掉單詞b,這就是“低頻詞缺陷”,通常,考慮也需要考慮詞頻。
卡方提取特征詞步驟:
1,統計正負分類的文檔數,記為\(N_1\), \(N_2\).
2, 統計每個詞在正文檔出現的頻率(A),負文檔出現的頻率(B),正文檔不出現的頻率(C),負文檔不出現的頻率(D).
3,計算卡方
$$\chi^2=D_{11}+D_{12}+D_{21}+D_{22}=\frac{N(AD-BC)^2}{(A+C)(A+B)(B+D)(C+D)}$$
5,按照卡方值從大到小,取topxx就行。
http://www.pycpp.com/2015/06/27/%E6%96%87%E6%9C%AC%E7%89%B9%E5%BE%81%E8%AF%8D%E6%8F%90%E5%8F%96%E7%AE%97%E6%B3%95/