文本分類學習 (四) 特徵選擇之卡方檢驗

前言:

上一篇提到了特徵提取,或者叫作降維。在文本分類中,特徵提取算法的優劣對於文本分類的結果具備很是大的影響。 因此選擇效果好的特徵提取算法是文本分類前中很重要的步驟。因而這篇就對卡方檢驗作一個介紹。這是一個效果很好的特徵提取方法。html

以前對卡方檢驗作過介紹:卡方檢驗是經過對特徵進行打分而後排序,選擇排名靠前的特徵來表示文本。算法

目錄:

  

一:卡方檢驗的介紹 

1.接下來簡單介紹一下卡方檢驗:

官方定義dom

卡方檢驗是以χ2分佈爲基礎的一種經常使用假設檢驗方法,它的無效假設H0是:觀察頻數與指望頻數沒有差異。該檢驗的基本思想是:首先假設H0成立,基於此前提計算出χ2值,它表示觀察值與理論值之間的偏離程度。根據χ2分佈及自由度能夠肯定在H0假設成立的狀況下得到當前統計量及更極端狀況的機率P。若是當前統計量大於P值,說明觀察值與理論值偏離程度太大,應當拒絕無效假設,表示比較資料之間有顯著差別;不然就不能拒絕無效假設,尚不能認爲樣本所表明的實際狀況和理論假設有差異。(摘自智庫百科分佈式

通俗的來說函數

卡方檢驗的思想是經過觀察值和理論值之間的誤差來判斷理論值的正確率是多少。若是正確率很大咱們就認爲理論值是正確的。因此咱們一開始要設定一個理論值,這個理論值是咱們根據本身的假設計算而來。post

 

2.卡方檢驗的基本公式:

卡方檢驗的基本公式,也就是χ2的計算公式,也就是觀察值和理論值之間的誤差學習

                           

 

先介紹下這個公式是如何得來的吧spa

其中A表明觀察頻數(就是觀察值),E表明指望頻數(就是理論值,咱們一開始作的那個假設獲得的值)設計

    

  • 那麼第一步,觀察值和理論值之間的誤差,就是兩者的差。將多個觀察值和理論值的誤差求和

                                                                               

  • 這樣確實能夠表示誤差,可是多個觀察值和理論值,且差值有正有負,那麼就會相互抵消,若是抵消爲0,原本有誤差的,如今變成沒有誤差            了。因此第二步,加上平方以後再求和

                                                                                

  •   這樣確實能夠表示誤差,可是多個觀察值和理論值,且差值有正有負,那麼就會相互抵消,若是抵消爲0,原本有誤差的,如今變成沒有誤差            了。因而第三步,在平以後再除以理論值以後再求和,這樣不會由於理論值的大小而影響誤差的計算了

 越是獲得了最終χ2的計算公式。再回到這個式子:
3d

 

 

A 爲觀察值,E爲理論值,k爲觀察值的個數,最後一個式子實際上就是具體計算的方法了 n 爲總的頻數,p爲理論頻率,那麼n*p天然就是理論頻數(理論值

 

3.卡方分佈:

能夠看出當觀察值和理論值十分接近的時候,也就是咱們作的假設是正確的時候,χ2的值就越趨近於0,也就是說咱們計算的誤差越小,那麼假設值就越多是對的,那麼誤差值越大,假設值就越不許確。那麼到底多大才算不許確,有沒有個衡量的數值標準呢?答案是有:卡方分佈。

因而咱們再看到官方說的第一句話:卡方檢驗是以χ2分佈爲基礎的一種經常使用假設檢驗方法

χ2分佈,就叫作卡方分佈。那麼卡方分佈是個什麼東西呢?官方定義:

若k 個隨機變量Z一、……、Zk 相互獨立,且數學指望爲0、方差爲 1(即服從標準正態分佈),則隨機變量X

    X=\sum_{n=1}^k Z_n^2

被稱爲服從自由度爲 k 的卡方分佈,記做

X\ \sim\ \chi^2(k)

 

官方的定義咱們也無論了,公式也無論了。直接用Matlab 畫出卡方分佈的圖來,咱們經過直觀圖,來看懂卡方分佈:

我寫的Matlab的卡方分佈圖的代碼:

x=0:0.01:50;
y=chi2pdf(x,1);
y1=chi2pdf(x,4);
y2=chi2pdf(x,10);
y3=chi2pdf(x,20);
y4=chi2pdf(x,50);
plot(x,y,'-r',x,y1,'-.b',x,y2,':k',x,y3,'--g',x,y4,'-m');
legend('Freedom 1','Freedom 4','Freedom 10','Freedom 20','Freedom 100');
axis([0,50,0,0.2]);

因而獲得這樣的圖:

 

先看上圖中的Freedom 這裏有5條線,分別對應Freedom=1, 4, 10, 20 , 100 。這個Freedom 就是自由度(我英語很差),俗稱:個式子中獨立變量的個數。(具體的後面再說到)。 就是卡方分佈官方定義中的k,k個符合標準正太分佈的隨機變量。先無論這個自由度是幹嗎,也無論在實際應用中是怎麼計算出來的。咱們挑一條曲線Freedom = 1 來看:

x 橫座標 其實就是咱們前面利用卡方檢驗公式計算出來的誤差χ 而y 縱座標表示假設的正確的機率。能夠看到當χ2  的值越小,假設正確的可能性無限大,值越大假設正確的可能性無限小,正好驗證了卡方檢驗的公式。(文章的最後會放上一個卡方分佈的表格)。

如今咱們回過頭看自由度,經過觀察圖能夠發現,不一樣自由度的卡方分佈能夠說差異不少。當自由度爲1時,卡方分佈式一個傾斜的曲線,當自由度逐漸增大是,卡方分佈逐步變的平緩,兩頭矮,中間高。對沒錯,隨着自由度愈來愈大,卡方分佈會愈來愈接近正態分佈(由於咱們看到卡方分佈的定義,卡方分佈原本就是由k個標準正太分佈的方差造成的分佈)。這個時候疑問就來了,當自由度爲1的時候,很好理解χ越小,機率越大,χ越大機率越小,這個好理解經過卡方檢驗的公式能夠看出。當自由度越大的時候,怎麼χ越大,對應的機率先是變大,而後再是變小呢?還有另外一個問題,卡方檢驗的自由度又是怎麼算的呢?前面說過,自由度其實就公式中獨立變量的個數,它能夠表示變量的變化範圍。這裏實在不想經過公式推導,卡方分佈自由度是怎麼得出,而且表示的是什麼,太繁瑣,不易理解,更重要的是我根本不會。

 

二:實例,經過卡方檢驗進行特徵選擇

1.四表格

帶着這兩個問題,咱們到實際的例子中去查看。

忽然想起來,這篇文章是在說卡方檢驗在文本分類的特徵提取中的應用。因此例子不能跑題,咱們看下面的四格圖表(百度四格圖表+卡方檢驗 你會發現有不少例子。若是把四格換成八格,就不多了。事實上特徵提取咱們用四格圖表就夠了。)

我這個例子和網上的都大同小異,也不能照搬別人,就本身造一點數據。

 

這是一個四格表,表示我在把文本一通分析以後發現 包含"洪秀全"這個詞且屬於中國近代史的有34個文本,而包含這個詞不屬於中國近代史的有6文本.........

經過這個四格表的提供信息,咱們來檢驗詞"洪秀全"和中國近代史類的文本的關係。

我加入C1 C2 R1 R2 分別表示第1列的合計,第2列的合計,第1行的合計,第2行的合計。n表示總數。

 

第一步咱們應該作啥?確定是先作一個假設啊,咱們假設"洪秀全"和中國近代史類的文本沒有任何關係(爲何不假設有關係呢?)

而後咱們去確認觀察值,和理論值,肯定好了以後不就能夠算誤差了嘛!

那麼觀察值是什麼?很顯然,觀察值就是表格中的數字,表示實際咱們觀察到的值。觀察值有幾個呢?很顯然是4個,由於是4格表啊。分別是:

34 (含有"洪秀全"屬於中國近代史); 6 (含有"洪秀全"不屬於中國近代史); 20 (不含有"洪秀全"屬於中國近代史);24(不含有"洪秀全"不屬於中國近代史)

那麼理論值是什麼呢?理論值也是4個,和觀察值一一對應。理論值怎麼計算呢?固然是經過假設來計算

咱們假設"洪秀全"這個詞和中國近代史類的文本沒有任何關係,那麼就表示有無"洪秀全"對它是否是中國近代史類的文本沒有影響。根據這個假設,咱們來算第一個觀察值(含有"洪秀全"屬於中國近代史)對於的理論值。咱們設爲 E11,表示第一行第一列的理論值。

根據假設,咱們能夠先算出一個文本出現"洪秀全"的機率,而後用中國近代史的文本個數乘以這個機率就獲得了理論值,很好理解的普通機率問題。(想想,這一塊兒是否是創建在咱們的假設的基礎上。若是假設是兩者不相關,那麼理論值應該怎麼算?你會發現根本不知道怎麼算)

出現"洪秀全"的機率 = 包含"洪秀全"的文本 / 總文本   這很好理解。

因而咱們能夠得出第一個理論值E= E11 (第一個1表示第一個理論值,後來兩個1表示四格表中第1行第1列,顯然兩者是等價的)

 

 

由次能夠類推Epq 表示p行q列的理論值

 

這個時候咱們就能夠算出四格表中的理論值了,咱們能夠先把四個理論值算出來,而後帶入卡方檢驗的公式中去求誤差。固然也能夠把Epq  帶入卡方檢驗的公式中而後直接根據公式來算

其實沒什麼複雜的 ,會基礎的機率知識就一下能看明白了。因而咱們就能夠算出誤差了。

經過公式能夠算出:

 

    

 

誤差值是14.2715,下一步呢?固然是去查卡方分佈表。在查看卡方分佈表的時候,咱們發現還有個自由度的問題,那麼問題來了,咱們上面的四格表中自由度是多少呢?答案是(p-1)*(q-1)也就是(行數-1)*(列數-1) 。爲何是這麼算的呢?這個暫時先無論了,根據查表咱們得知自由度設爲df,df爲1的卡方分佈以下:

 

能夠看到v=1 ,χ= 3.84 是對應的P是0.05 ,再看看上面的函數圖,的確如此。爲何0.05要塗顏色呢?這是由於在卡方分佈中機率小於0.05的叫作一個拒絕域,也就是說若是你算出來的P小於0.05,那麼原假設就不成立。在卡方分佈函數圖中表示就是一個小尾巴:

前面咱們算出來的值是14.2715 很明顯已經大約3.84 也就是P < 0.05 也就是說原假設成立的機率小於5% 那麼就意味着假設不成立,因而咱們能夠得出結論"洪秀全"和中國近代史是有關係的。

 

2.自由度的問題

這個四格表的案例就是經過卡方檢驗在文本分析中的應用。

再回到前面的兩個問題:

  1. 爲何自由度不同,卡方分佈的區別就很大,自由度越大卡方分佈越接近正太分佈
  2. 自由度是怎麼算的。

先回答第二個問題,上面說到過自由度=(行數-1)*(列數-1) 。自由度指的是計算某一統計量時,取值不受限制的變量個數。一般df=n-k。其中n爲樣本數量,k爲被限制的條件數或變量個數。

在這裏行數是兩個變量,n=2 ,四格表中的限制條件數k=1,由於四個表中有一個限制條件:總數必定。因此自由度爲2-1=1,

列數也同理。因此自由度df = (行數-1)*(列數-1)

 

 3.八格表

再看第一個問題:看一個八格表:

 

咱們假設"洪秀全","楊秀清","石達開","曾國藩"對於文本是否爲中國近代史的影響程度是不同的。

自由度df = 3

這樣就能夠理解爲何df越大就越符合正太分佈。由於"洪秀全","楊秀清","石達開","曾國藩"這四個詞對文本是否爲中國近代史影響都很是小,查看前面的公式就是(A-E)的誤差都很小,得出的χ越小,這個時候意味着這四個詞的影響程度是同樣的,也即經過卡方分佈計算的假設成立機率是很小的,在上面的卡方分佈函數圖中就能夠看出屬於卡方分佈左邊的小尾巴。同理當這個四個詞的影響都很大的時候,假設成立的機率也是很小,因此屬於卡方分佈的右邊小尾巴。

這樣經過例子就好理解一點了。

 

三,利用卡方檢驗用來特徵選擇

說到這裏,咱們再回頭看下卡方檢驗在特徵選擇中的應用。通篇大部分在說卡方檢驗,而實際應用到特徵選擇中的時候,咱們不須要知道自由度,不要知道卡方分佈,咱們只須要根據算出來的χ進行排序就行了,越大咱們就越喜歡!挑選最大的一堆,因而就完成了利用卡方檢驗來進行特徵提取。

 通常在四格表中若是第一行,第一列的值表示爲A,第二行第二列的值表示爲B,第三行第三列的值表示爲C,第四行第四列的值表示爲D

在四格表中的卡方檢驗公式能夠變換爲:

上面也說了,對於文本分類咱們只關心排序,不要求算出具體的值,對於每一個詞,n是不變的,(A+C)也就是屬於中國近代史的文本,是不變的,(B+D)也是不變的。因此能夠化簡:

然而咱們發如今四格表中,咱們只關心了出現"洪秀全"的文本,而沒有說起"洪秀全"出現了幾回,也就是忽略了詞頻。這是卡方檢驗的低詞頻性的缺點,因此實際應用的時候還須要結合詞頻的因素,考慮進去。

 

四,結語

 

原本博客的題目叫作「特徵選擇之卡方檢驗」,我如今想更名字叫作「卡方檢驗之特徵選擇」。

下一篇就要開始實戰了,利用JIEba分詞,對訓練集進行分析再特徵選擇,最後構造出一個很是合適的詞向量。

相關文章
相關標籤/搜索