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

前言:

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

之前對卡方檢驗做過介紹:卡方檢驗是通過對特徵進行打分然後排序,選擇排名靠前的特徵來表示文本。

目錄:

文本分類學習(一)開篇
文本分類學習(二)文本表示
文本分類學習(三)特徵權重(TF/IDF)和特徵提取   
文本分類學習 (四) 特徵選擇之卡方檢驗

一:卡方檢驗的介紹

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

(官方定義)

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

(通俗的來講)

卡方檢驗的思想是通過觀察值和理論值之間的偏差來判斷理論值的正確率是多少。如果正確率很大我們就認爲理論值是正確的。所以我們一開始要設定一個理論值,這個理論值是我們根據自己的假設計算而來。

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

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

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

其中A代表觀察頻數(就是觀察值),E代表期望頻數(就是理論值,我們一開始做的那個假設得到的值)

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

這樣確實可以表示偏差,但是多個觀察值和理論值,且差值有正有負,那麼就會相互抵消,如果抵消爲0,本來有偏差的,現在變成沒有偏差 了。所以第二步,加上平方之後再求和

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

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

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

3.卡方分佈:

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

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

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

若k 個隨機變量Z1、……、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 橫座標 其實就是我們前面利用卡方檢驗公式計算出來的偏差χ2 而y 縱座標表示假設的正確的概率。可以看到當χ2 的值越小,假設正確的可能性無限大,值越大假設正確的可能性無限小,正好驗證了卡方檢驗的公式。(文章的最後會放上一個卡方分佈的表格)。

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

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

1.四表格

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

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

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

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

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

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

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

然後我們去確認觀察值,和理論值,確定好了之後不就可以算偏差了嘛!

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

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

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

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

根據假設,我們可以先算出一個文本出現"洪秀全"的概率,然後用中國近代史的文本個數乘以這個概率就得到了理論值,很好理解的普通概率問題。(想一想,這一起是不是建立在我們的假設的基礎上。如果假設是二者不相關,那麼理論值應該怎麼算?你會發現根本不知道怎麼算)

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

於是我們可以得出第一個理論值E1 = E11 (第一個1表示第一個理論值,後來兩個1表示四格表中第1行第1列,顯然二者是等價的)

由次可以類推Epq 表示p行q列的理論值

這個時候我們就可以算出四格表中的理論值了,我們可以先把四個理論值算出來,然後帶入卡方檢驗的公式中去求偏差。當然也可以把Epq 帶入卡方檢驗的公式中然後直接根據公式來算

其實沒什麼複雜的 ,會基礎的概率知識就一下能看明白了。於是我們就可以算出偏差了。

通過公式可以算出:

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

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

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

2.自由度的問題

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

再回到前面的兩個問題:

爲什麼自由度不一樣,卡方分佈的區別就很大,自由度越大卡方分佈越接近正太分佈
自由度是怎麼算的。
先回答第二個問題,上面說到過自由度=(行數-1)*(列數-1) 。自由度指的是計算某一統計量時,取值不受限制的變量個數。通常df=n-k。其中n爲樣本數量,k爲被限制的條件數或變量個數。

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

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

3.八格表

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

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

自由度df = 3

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

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

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

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

一般在四格表中如果第一行,第一列的值表示爲A,第二行第二列的值表示爲B,第三行第三列的值表示爲C,第四行第四列的值表示爲D

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

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

然而我們發現在四格表中,我們只關心了出現"洪秀全"的文本,而沒有提及"洪秀全"出現了幾次,也就是忽略了詞頻。這是卡方檢驗的低詞頻性的缺點,所以實際應用的時候還需要結合詞頻的因素,考慮進去。

四,結語

本來博客的題目叫做“特徵選擇之卡方檢驗”,我現在想改名字叫做“卡方檢驗之特徵選擇”。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章