大量摘自維基百科、百度百科。
TF*IDF
1. 一個詞預測主題能力越強,權重就越大,反之,權重就越小。我們在網頁中看到“原子能”這個詞,或多或少地能瞭解網頁的主題。我們看到“應用”一次,對主題基本上還是一無所知。因此,“原子能“的權重就應該比應用大。
2. 應刪除詞的權重應該是零。
entropy
information gain
信息增益是針對一個一個的特徵而言的,就是看一個特徵t,系統有它和沒它的時候信息量各是多少,兩者的差值就是這個特徵給系統帶來的信息量,即增益。系統含有特徵t的時候信息量很好計算,就是剛纔的式子,它表示的是包含所有特徵時系統的信息量。
問題是當系統不包含t時,信息量如何計算?我們換個角度想問題,把系統要做的事情想象成這樣:說教室裏有很多座位,學生們每次上課進來的時 候可以隨便坐,因而變化是很大的(無數種可能的座次情況);但是現在有一個座位,看黑板很清楚,聽老師講也很清楚,於是校長的小舅子的姐姐的女兒託關係 (真輾轉啊),把這個座位定下來了,每次只能給她坐,別人不行,此時情況怎樣?對於座次的可能情況來說,我們很容易看出以下兩種情況是等價的:(1)教室 裏沒有這個座位;(2)教室裏雖然有這個座位,但其他人不能坐(因爲反正它也不能參與到變化中來,它是不變的)。
對應到我們的系統中,就是下面的等價:(1)系統不包含特徵t;(2)系統雖然包含特徵t,但是t已經固定了,不能變化。
我們計算分類系統不包含特徵t的時候,就使用情況(2)來代替,就是計算當一個特徵t不能變化時,系統的信息量是多少。這個信息量其實也有專門的名稱,就叫做“條件熵”,條件嘛,自然就是指“t已經固定“這個條件。
但是問題接踵而至,例如一個特徵X,它可能的取值有n多種(x1,x2,……,xn), 當計算條件熵而需要把它固定的時候,要把它固定在哪一個值上呢?答案是每一種可能都要固定一下,計算n個值,然後取均值纔是條件熵。而取均值也不是簡單的 加一加然後除以n,而是要用每個值出現的概率來算平均(簡單理解,就是一個值出現的可能性比較大,固定在它上面時算出來的信息量佔的比重就要多一些)。
因此有這樣兩個條件熵的表達式:
這是指特徵X被固定爲值xi時的條件熵,
這是指特徵X被固定時的條件熵,注意與上式在意義上的區別。從剛纔計算均值的討論可以看出來,第二個式子與第一個式子的關係就是:
具體到我們文本分類系統中的特徵t,t有幾個可能的值呢?注意t是指一個固定的特徵,比如他就是指關鍵詞“經濟”或者“體育”,當我們說特徵“經濟”可能的取值時,實際上只有兩個,“經濟”要麼出現,要麼不出現。一般的,t的取值只有t(代表t出現)和(代表t不出現),注意系統包含t但t 不出現與系統根本不包含t可是兩回事。
因此固定t時系統的條件熵就有了,爲了區別t出現時的符號與特徵t本身的符號,我們用T代表特徵,而用t代表T出現,那麼:
與剛纔的式子對照一下,含義很清楚對吧,P(t)就是T出現的概率,就是T不出現的概率。這個式子可以進一步展開,其中的
另一半就可以展開爲:
因此特徵T給系統帶來的信息增益就可以寫成系統原本的熵與固定特徵T後的條件熵之差:
公式中的東西看上去很多,其實也都很好計算。比如P(Ci),表示類別Ci出現的概率,其實只要用1除以類別總數就得到了(這是說你平等的看待每個類別而忽略它們的大小時這樣算,如果考慮了大小就要把大小的影響加進去)。再比如P(t),就是特徵T出現的概率,只要用出現過T的文檔數除以總文檔數就可以了,再比如P(Ci|t)表示出現T的時候,類別Ci出現的概率,只要用出現了T並且屬於類別Ci的文檔數除以出現了T的文檔數就可以了。
從以上討論中可以看出,信息增益也是考慮了特徵出現和不出現兩種情況,與開方檢驗一樣,是比較全面的,因而效果不錯。但信息增益最大的問題 還在於它只能考察特徵對整個系統的貢獻,而不能具體到某個類別上,這就使得它只適合用來做所謂“全局”的特徵選擇(指所有的類都使用相同的特徵集合),而 無法做“本地”的特徵選擇(每個類別有自己的特徵集合,因爲有的詞,對這個類別很有區分度,對另一個類別則無足輕重)。
================
一個例子:
================
任務:
根據天氣預測否去打網球
數據:
這個數據集來自Mitchell的機器學習,叫做是否去打網球play-tennis,以下數據仍然是從帶逗號分割的文本文件,複製到紀事本,把後綴直接改爲.csv就可以拿Excel打開:
*play-tennis data,其中6個變量依次爲:編號、天氣{Sunny、Overcast、Rain}、溫度{熱、冷、適中}、溼度{高、正常}、風力{強、弱}以及最後是否去玩的決策{是、否}。一個建議是把這些數據導入Excel後,另複製一份去掉變量的數據到另外一個工作簿,即只保留14個觀測值。這樣可以方便地使用Excel的排序功能,隨時查看每個變量的取值到底有多少。*/
NO. , Outlook , Temperature , Humidity , Wind , Play
1 , Sunny , Hot , High , Weak , No
2 , Sunny , Hot , High , Strong , No
3 , Overcast , Hot , High , Weak , Yes
4 , Rain , Mild , High , Weak , Yes
5 , Rain , Cool , Normal , Weak , Yes
6 , Rain , Cool , Normal , Strong , No
7 , Overcast , Cool , Normal , Strong , Yes
8 , Sunny , Mild , High , Weak , No
9 , Sunny , Cool , Normal , Weak , Yes
10 , Rain , Mild , Normal , Weak , Yes
11 , Sunny , Mild , Normal , Strong , Yes
12 , Overcast , Mild , High , Strong , Yes
13 , Overcast , Hot , Normal , Weak , Yes
14 , Rain , Mild , High , Strong , No
用決策樹來預測:
決策樹的形式類似於“如果天氣怎麼樣,去玩;否則,怎麼着怎麼着”的樹形分叉。那麼問題是用哪個屬性(即變量,如天氣、溫度、溼度和風力)最適合充當這顆樹的根節點,在它上面沒有其他節點,其他的屬性都是它的後續節點。
那麼借用上面所述的能夠衡量一個屬性區分以上數據樣本的能力的“信息增益”(Information Gain)理論。
如果一個屬性的信息增益量越大,這個屬性作爲一棵樹的根節點就能使這棵樹更簡潔,比如說一棵樹可以這麼讀成,如果風力弱,就去玩;風力強,再按天氣、溫度等分情況討論,此時用風力作爲這棵樹的根節點就很有價值。如果說,風力弱,再又天氣晴朗,就去玩;如果風力強,再又怎麼怎麼分情況討論,這棵樹相比就不夠簡潔了。
用熵來計算信息增益:
1 計算分類系統熵
類別是 是否出去玩。取值爲yes的記錄有9個,取值爲no的有5個,即說這個樣本里有9個正例,5 個負例,記爲S(9+,5-),S是樣本的意思(Sample)。那麼P(c1) = 9/14, P(c2) = 5/14
這裏熵記爲Entropy(S),計算公式爲:
Entropy(S)= -(9/14)*log2(9/14)-(5/14)*log2(5/14)用Matlab做數學運算
2 分別以Wind、Humidity、Outlook和Temperature作爲根節點,計算其信息增益
我們來計算Wind的信息增益
當Wind固定爲Weak時:記錄有8條,其中正例6個,負例2個;
同樣,取值爲Strong的記錄6個,正例負例個3個。我們可以計算相應的熵爲:
Entropy(Weak)=-(6/8)*log(6/8)-(2/8)*log(2/8)=0.811
Entropy(Strong)=-(3/6)*log(3/6)-(3/6)*log(3/6)=1.0
現在就可以計算出相應的信息增益了:
所以,對於一個Wind屬性固定的分類系統的信息量爲 (8/14)*Entropy(Weak)+(6/14)*Entropy(Strong)
Gain(Wind)=Entropy(S)-(8/14)*Entropy(Weak)-(6/14)*Entropy(Strong)=0.940-(8/14)*0.811-(6/14)*1.0=0.048
這個公式的奧祕在於,8/14是屬性Wind取值爲Weak的個數佔總記錄的比例,同樣6/14是其取值爲Strong的記錄個數與總記錄數之比。
同理,如果以Humidity作爲根節點:
Entropy(High)=0.985 ; Entropy(Normal)=0.592
Gain(Humidity)=0.940-(7/14)*Entropy(High)-(7/14)*Entropy(Normal)=0.151
以Outlook作爲根節點:
Entropy(Sunny)=0.971 ; Entropy(Overcast)=0.0 ; Entropy(Rain)=0.971
Gain(Outlook)=0.940-(5/14)*Entropy(Sunny)-(4/14)*Entropy(Overcast)-(5/14)*Entropy(Rain)=0.247
以Temperature作爲根節點:
Entropy(Cool)=0.811 ; Entropy(Hot)=1.0 ; Entropy(Mild)=0.918
Gain(Temperature)=0.940-(4/14)*Entropy(Cool)-(4/14)*Entropy(Hot)-(6/14)*Entropy(Mild)=0.029
這樣我們就得到了以上四個屬性相應的信息增益值:
Gain(Wind)=0.048 ;Gain(Humidity)=0.151 ; Gain(Outlook)=0.247 ;Gain(Temperature)=0.029
最後按照信息增益最大的原則選Outlook爲根節點。子節點重複上面的步驟。這顆樹可以是這樣的,它讀起來就跟你認爲的那樣: