在做文本挖掘,特別是有監督的學習時,常常需要從文本中提取特征,提取出對學習有價值的分類,而不是把所有的詞都用上,因此一些詞對分類的作用不大,比如“的、是、在、了”等停用詞。這里介紹兩種常用的特征選擇方法:
互信息
一個常用的方法是計算文檔中的詞項t與文檔類別c的互信息MI,MI度量的是詞的存在與否給類別c帶來的信息量,互信息的基本定義如下:
應用到文本特征選擇:
U、C都是二值隨機變量,當文檔包含詞項t時,U的取值為$e_t=1$,否則$e_t=0$;當文檔屬於類別c時,C的取值$e_c=1$,否則$e_c=0$,用最大似然估計時,上面的概率值都是通過統計文檔中詞項和類別的數目阿里計算的。於是實際計算公式如下:
其中$N_{xy}$表示$x=e_t$和$y=e_c$情況下對應的文檔數目,比如$N_{10}$表示包含詞項t(此時$e_t=1$)但不屬於類別c(此時$e_c=0$)的;$N_{1.}=N_{10}+N_{11}$表示所有包含詞項t的文檔數目。$N_{.1}=N_{11}+N_{01}$表示所有屬於類c的文檔數目,$N=N_{00}+N_{01}+N_{10}+N_{11}$表示所有文檔數目。
舉例:路透社的語料庫Retuters-RCV1的一個類別poultry及詞項export。類別和詞項的四種組合的文檔數如下:
計算類別poultry和詞export之間的類別的互信息為:
我們可以對每一個類計算各個詞項與其的互信息,並選取值最大的k個詞項,當然有可能兩個類會選取相同的特征詞,去重一下即可。
互信息度量的是詞項是否被類別包含所帶來的信息量,如果某個詞項均勻的分布在各個類別,那么$I(U;C)=0$,當某詞項總是出現在當前類別,而在其他類別中很少出現時,$I(U;C)$就會比較大。使用互信息能夠保留具有信息含量的詞項的同時,去掉那些沒有信息含量的詞項,從而提高正確率。
$X^2$統計量
在統計學中,$X^2$統計量經常用來檢測兩個事件的獨立性。在特征選擇中,兩個事件分別指詞項的出現與類別的出現,計算公式如下:
依然是前面的類別poultry及詞項export的例子,我們有
其他的類似計算,得到:
查卡方的分布表,置信度為0.999的卡方臨界值是10.83,也就是當卡方值$X^2(D,t,c)>10.83$時,我們有99.9%的把握,t與c不獨立,這里284顯然大於10.83,因此我們認為poultry與export不獨立,也就是export對poultry是一個強特征。同樣我們計算所有詞的卡方值,取值最大的前k個詞項作為特征詞。
卡方是基於顯著統計性來選擇特征的,因此他會比MI選出更多的罕見詞項,而這些詞項對分類並不靠譜。
雖然卡方和互信息的出發點不同,但它們的准確性卻相差不多,因為大部分文本分類問題中,只有很少的強特征,大部分都是弱特征。只要所有的強特征和很多弱特征被選出,那么分類的准確率就不會低。
另外上面介紹的兩種特征選擇主要用於文本的分類等用監督學習,而不適宜聚類等無監督學習,因為聚類我們不知道每篇文檔屬於的類別,也就無從計算互信息和卡方值,這時一般使用TF-IDF作為特征詞的選取方法,關於TF-IDF可以參看阮一峰的日志,這里不做總結。
本文內容主要來自:《Introduction to Information Retrieval》
轉載請注明出處:http://www.cnblogs.com/fengfenggirl/