天天看點

文本挖掘之特征選擇(Python版)

  機器學習算法的空間、時間複雜度依賴于輸入資料的規模,次元規約(dimensionality reduction)則是一種被用于降低輸入資料維數的方法。次元規約可以分為兩類:

特征選擇(feature selection),從原始的d維空間中,選擇為我們提供資訊最多的k個維(這k個維屬于原始空間的子集)

特征提取(feature extraction),将原始的d維空間映射到k維空間中(新的k維空間不輸入原始空間的子集)

  在文本挖掘與文本分類的有關問題中,常采用特征選擇方法。原因是文本的特征一般都是單詞(term),具有語義資訊,使用特征選擇找出的k維子集,仍然是單詞作為特征,保留了語義資訊,而特征提取則找k維新空間,将會喪失了語義資訊。

  對于一個語料而言,我們可以統計的資訊包括文檔頻率和文檔類比例,所有的特征選擇方法均依賴于這兩個統計量,目前,文本的特征選擇方法主要有:df, mi, ig, chi,wllr,wfo六種。

  為了友善描述,我們首先一些機率上的定義:

    p(t):一篇文檔x包含特征詞t的機率。

    

文本挖掘之特征選擇(Python版)

:文檔x不屬于ci的機率。

    p(ci|t):已知文檔x的包括某個特征詞t條件下,該文檔屬于ci的機率

文本挖掘之特征選擇(Python版)

: 已知文檔屬于ci 條件下,該文檔不包括特征詞t的機率

  類似的其他的一些機率如p(ci), 

文本挖掘之特征選擇(Python版)

文本挖掘之特征選擇(Python版)

等,有着類似的定義。

為了估計這些機率,我們需要通過統計訓練樣本的相關頻率資訊,如下表:

文本挖掘之特征選擇(Python版)

 其中:

   aij: 包含特征詞ti,并且類别屬于cj的文檔數量    bij: 包含特征詞ti,并且類别屬于不cj的文檔數量

   cij:不包含特征詞ti,并且類别屬于cj的文檔數量 dij:不包含特征詞ti,并且類别屬于不cj的文檔數量

   aij + bij: 包含特征詞ti的文檔數量          cij  + dij:不包含特征詞ti的文檔數量

   aij + cij:cj類的文檔數量資料             bij + dij:非cj類的文檔數量資料

   aij + bij + cij  + dij = n :語料中所有文檔數量。

有了這些統計量,有關機率的估算就變得容易,如:

    p(ti) =     (aij + bij) / n;    p(cj) = (aij +  cij) / n;  

    p(cj|tj) = aij  / (aij + bij)        

  ......類似的一些機率計算可以依照上表計算。

  介紹了事情發展的前因,現在進入正題:常見的四種特征選擇方法如何計算。

  1)df(document frequency)

df:統計特征詞出現的文檔數量,用來衡量某個特征詞的重要性,df的定義如下:

文本挖掘之特征選擇(Python版)

  df的動機是,如果某些特征詞在文檔中經常出現,那麼這個詞就可能很重要。而對于在文檔中出現很少(如僅在語料中出現1次)特征詞,攜帶了很少的資訊量,甚至是"噪聲",這些特征詞,對分類器學習影響也是很小。

  df特征選擇方法屬于無監督的學習算法(也有将其改成有監督的算法,但是大部分情況都作為無監督算法使用),僅考慮了頻率因素而沒有考慮類别因素,是以,df算法的将會引入一些沒有意義的詞。如中文的"的"、"是", "個"等,常常具有很高的df得分,但是,對分類并沒有多大的意義。

  2)mi(mutual information)

  互資訊法用于衡量特征詞與文檔類别直接的資訊量,互資訊法的定義如下:

文本挖掘之特征選擇(Python版)

  繼續推導mi的定義公式:

文本挖掘之特征選擇(Python版)

  從上面的公式上看出:如果某個特征詞的頻率很低,那麼互資訊得分就會很大,是以互資訊法傾向"低頻"的特征詞。相對的詞頻很高的詞,得分就會變低,如果這詞攜帶了很高的資訊量,互資訊法就會變得低效。

  3)ig(information gain)

  資訊增益法,通過某個特征詞的缺失與存在的兩種情況下,語料中前後資訊的增加,衡量某個特征詞的重要性。

資訊增益的定義如下:

文本挖掘之特征選擇(Python版)

  依據ig的定義,每個特征詞ti的ig得分前面一部分:

文本挖掘之特征選擇(Python版)

計算值是一樣,可以省略。是以,ig的計算公式如下:

文本挖掘之特征選擇(Python版)

ig與mi存在關系:

文本挖掘之特征選擇(Python版)

是以,ig方式實際上就是互資訊

文本挖掘之特征選擇(Python版)

與互資訊

文本挖掘之特征選擇(Python版)

權重。

4)chi(chi-square)

chi特征選擇算法利用了統計學中的"假設檢驗"的基本思想:首先假設特征詞與類别直接是不相關的,如果利用chi分布計算出的檢驗值偏離門檻值越大,那麼更有信心否定原假設,接受原假設的備則假設:特征詞與類别有着很高的關聯度。chi的定義如下:

文本挖掘之特征選擇(Python版)

對于一個給定的語料而言,文檔的總數n以及cj類文檔的數量,非cj類文檔的數量,他們都是一個定值,是以chi的計算公式可以簡化為:

文本挖掘之特征選擇(Python版)

chi特征選擇方法,綜合考慮文檔頻率與類别比例兩個因素

5)wllr(weighted log likelihood ration)

wllr特征選擇方法的定義如下:

文本挖掘之特征選擇(Python版)

  計算公式如下:

文本挖掘之特征選擇(Python版)

6)wfo(weighted frequency and odds)

最後一個介紹的算法,是由蘇大李壽山老師提出的算法。通過以上的五種算法的分析,李壽山老師認為,"好"的特征應該有以下特點:

好的特征應該有較高的文檔頻率

好的特征應該有較高的文檔類别比例

wfo的算法定義如下:

如果

文本挖掘之特征選擇(Python版)

文本挖掘之特征選擇(Python版)

否則:

文本挖掘之特征選擇(Python版)

不同的語料,一般來說文檔詞頻與文檔的類别比例起的作用應該是不一樣的,wfo方法可以通過調整參數

文本挖掘之特征選擇(Python版)

,找出一個較好的特征選擇依據。

-----------------------------------------分割線---------------------------------------------

 筆者實作了三種特征選擇方法:ig,mi和wllr,看官如果對其他特征選擇方法感興趣,可以嘗試實作一下~ 好了,啥也不說了,上代碼,特征選擇子產品代碼:

文本挖掘之特征選擇(Python版)
文本挖掘之特征選擇(Python版)

    在movie語料裡面比較着三種特征選擇方法,調用方法如下:

文本挖掘之特征選擇(Python版)
文本挖掘之特征選擇(Python版)

  輸出的結果:

文本挖掘之特征選擇(Python版)

  從上面的圖看出:分類的性能随着特征選擇的數量的增加,呈現“凸”形趨勢:1)在特征數量較少的情況下,不斷增加特征的數量,有利于提高分類器的性能,呈現“上升”趨勢;2)随着特征數量的不斷增加,将會引入一些不重要的特征,甚至是噪聲,是以,分類器的性能将會呈現“下降”的趨勢。這張“凸”形趨勢展現出了特征選擇的重要性:選擇出重要的特征,并降低噪聲,提高算法的泛化能力。

參數文獻:

    1.y. yang and j. pedersen. 1997. a comparative study on feature selection in text categorization.

    2.shoushan li, rui xia, chengqing zong and chu-ren huang.2009.a framework of feature selection methods for text categorization

    3.老闆的課件