因爲我常常查看,因此直接轉載過來。原文地址:http://www.blogjava.net/zhenandaci/archive/2008/08/31/225966.htmlhtml
前文提到過,除了分類算法之外,爲分類文本做處理的特徵提取算法也對最終效果有巨大影響,而特徵提取算法又分爲特徵選擇和特徵抽取兩大類,其中特徵選擇算法有互信息,文檔頻率,信息增益,開方檢驗等等十數種,此次先介紹特徵選擇算法中效果比較好的開方檢驗方法。java
你們應該還記得,開方檢驗實際上是數理統計中一種經常使用的檢驗兩個變量獨立性的方法。(什麼?你是文史類專業的學生,沒有學過數理統計?那你作什麼文本分類?在這搗什麼亂?)算法
開方檢驗最基本的思想就是經過觀察實際值與理論值的誤差來肯定理論的正確與否。具體作的時候經常先假設兩個變量確實是獨立的(行話就叫作「原假設」),而後觀察實際值(也能夠叫作觀察值)與理論值(這個理論值是指「若是二者確實獨立」的狀況下應該有的值)的誤差程度,若是誤差足夠小,咱們就認爲偏差是很天然的樣本偏差,是測量手段不夠精確致使或者偶然發生的,二者確確實實是獨立的,此時就接受原假設;若是誤差大到必定程度,使得這樣的偏差不太多是偶然產生或者測量不精確所致,咱們就認爲二者其實是相關的,即否認原假設,而接受備擇假設。性能
那麼用什麼來衡量誤差程度呢?假設理論值爲E(這也是數學指望的符號哦),實際值爲x,若是僅僅使用全部樣本的觀察值與理論值的差值x-E之和spa
來衡量,單個的觀察值還好說,當有多個觀察值x1,x2,x3的時候,極可能x1-E,x2-E,x3-E的值有正有負,於是互相抵消,使得最終的結果看上好像誤差爲0,但實際上每一個都有誤差,並且都還不小!此時很直接的想法即是使用方差代替均值,這樣就解決了正負抵消的問題,即便用.net
這時又引來了新的問題,對於500的均值來講,相差5實際上是很小的(相差1%),而對20的均值來講,5至關於25%的差別,這是使用方差也沒法體現的。所以應該考慮改進上面的式子,讓均值的大小不影響咱們對差別程度的判斷3d
式(1)htm
上面這個式子已經至關好了。實際上這個式子就是開方檢驗使用的差值衡量公式。當提供了數個樣本的觀察值x1,x2,……xi ,……xn以後,代入到式(1)中就能夠求得開方值,用這個值與事先設定的閾值比較,若是大於閾值(即誤差很大),就認爲原假設不成立,反之則認爲原假設成立。blog
在文本分類問題的特徵選擇階段,咱們主要關心一個詞t(一個隨機變量)與一個類別c(另外一個隨機變量)之間是否相互獨立?若是獨立,就能夠說詞t對類別c徹底沒有表徵做用,即咱們根本沒法根據t出現與否來判斷一篇文檔是否屬於c這個分類。但與最普通的開方檢驗不一樣,咱們不須要設定閾值,由於很難說詞t和類別c關聯到什麼程度纔算是有表徵做用,咱們只想借用這個方法來選出一些最最相關的便可。排序
此時咱們仍然須要明白對特徵選擇來講原假設是什麼,由於計算出的開方值越大,說明對原假設的偏離越大,咱們越傾向於認爲原假設的反面狀況是正確的。咱們能不能把原假設定爲「詞t與類別c相關「?原則上說固然能夠,這也是一個健全的民主主義社會賦予每一個公民的權利(笑),但此時你會發現根本不知道此時的理論值該是多少!你會把本身繞進死衚衕。因此咱們通常都使用」詞t與類別c不相關「來作原假設。選擇的過程也變成了爲每一個詞計算它與類別c的開方值,從大到小排個序(此時開方值越大越相關),取前k個就能夠(k值能夠根據本身的須要選,這也是一個健全的民主主義社會賦予每一個公民的權利)。
好,原理有了,該來個例子說說到底怎麼算了。
好比說如今有N篇文檔,其中有M篇是關於體育的,咱們想考察一個詞「籃球」與類別「體育」之間的相關性(任誰都看得出來二者很相關,但很遺憾,咱們是智慧生物,計算機不是,它一點也看不出來,想讓它認識到這一點,只能讓它算算看)。咱們有四個觀察值可使用:
1. 包含「籃球」且屬於「體育」類別的文檔數,命名爲A
2. 包含「籃球」但不屬於「體育」類別的文檔數,命名爲B
3. 不包含「籃球」但卻屬於「體育」類別的文檔數,命名爲C
4. 既不包含「籃球」也不屬於「體育」類別的文檔數,命名爲D
用下面的表格更清晰:
特徵選擇 |
1.屬於「體育」 |
2.不屬於「體育」 |
總 計 |
1.包含「籃球」 |
A |
B |
A+B |
2.不包含「籃球」 |
C |
D |
C+D |
總 數 |
A+C |
B+D |
N |
若是有些特色你沒看出來,那我說一說,首先,A+B+C+D=N(這,這不廢話嘛)。其次,A+C的意思其實就是說「屬於體育類的文章數量」,所以,它就等於M,同時,B+D就等於N-M。
好,那麼理論值是什麼呢?以包含「籃球」且屬於「體育」類別的文檔數爲例。若是原假設是成立的,即「籃球」和體育類文章沒什麼關聯性,那麼在全部的文章中,「籃球」這個詞都應該是等機率出現,而無論文章是否是體育類的。這個機率具體是多少,咱們並不知道,但他應該體如今觀察結果中(就比如拋硬幣的機率是二分之一,能夠經過觀察屢次拋的結果來大體肯定),所以咱們能夠說這個機率接近
(由於A+B是包含「籃球」的文章數,除以總文檔數就是「籃球」出現的機率,固然,這裏認爲在一篇文章中出現便可,而無論出現了幾回)而屬於體育類的文章數爲A+C,在這些個文檔中,應該有
篇包含「籃球」這個詞(數量乘以機率嘛)。
但實際有多少呢?考考你(讀者:切,固然是A啦,表格裏寫着嘛……)。
此時對這種狀況的差值就得出了(套用式(1)的公式),應該是
一樣,咱們還能夠計算剩下三種狀況的差值D12,D21,D22,聰明的讀者必定能本身算出來(讀者:切,明明是本身懶得寫了……)。有了全部觀察值的差值,就能夠計算「籃球」與「體育」類文章的開方值
把D11,D12,D21,D22的值分別代入並化簡,能夠獲得
詞t與類別c的開方值更通常的形式能夠寫成
式(2)
接下來咱們就能夠計算其餘詞如「排球」,「產品」,「銀行」等等與體育類別的開方值,而後根據大小來排序,選擇咱們須要的最大的數個詞彙做爲特徵項就能夠了。
實際上式(2)還能夠進一步化簡,注意若是給定了一個文檔集合(例如咱們的訓練集)和一個類別,則N,M,N-M(即A+C和B+D)對同一類別文檔中的全部詞來講都是同樣的,而咱們只關心一堆詞對某個類別的開方值的大小順序,而並不關心具體的值,所以把它們從式(2)中去掉是徹底能夠的,故實際計算的時候咱們都使用
式(3)
好啦,並不高深對不對?
針對英文純文本的實驗結果代表:做爲特徵選擇方法時,開方檢驗和信息增益的效果最佳(相同的分類算法,使用不一樣的特徵選擇算法來獲得比較結果);文檔頻率方法的性能同前二者大致至關,術語強度方法性能通常;互信息方法的性能最差(文獻[17])。
但開方檢驗也並不是就十全十美了。回頭想一想A和B的值是怎麼得出來的,它統計文檔中是否出現詞t,卻無論t在該文檔中出現了幾回,這會使得他對低頻詞有所偏袒(由於它誇大了低頻詞的做用)。甚至會出現有些狀況,一個詞在一類文章的每篇文檔中都只出現了一次,其開方值卻大過了在該類文章99%的文檔中出現了10次的詞,其實後面的詞纔是更具表明性的,但只由於它出現的文檔數比前面的詞少了「1」,特徵選擇的時候就可能篩掉後面的詞而保留了前者。這就是開方檢驗著名的「低頻詞缺陷「。所以開方檢驗也常常同其餘因素如詞頻綜合考慮來揚長避短。
好啦,關於開方檢驗先說這麼多,有機會還將介紹其餘的特徵選擇算法。
附:給精通統計學的同窗多說幾句,式(1)其實是對連續型的隨機變量的差值計算公式,而咱們這裏統計的「文檔數量「顯然是離散的數值(全是整數),所以真正在統計學中計算的時候,是有修正過程的,但這種修正仍然是隻影響具體的開方值,而不影響大小的順序,故文本分類中不作這種修正。