1. 程式人生 > >[機器學習]決策樹中的資訊增益和資訊增益比

[機器學習]決策樹中的資訊增益和資訊增益比

一、特徵選擇中的資訊增益
什麼是資訊增益?

資訊增益是特徵選擇中的一個重要的指標,它定義為一個特徵能為分類系統帶來多少資訊,資訊越多,該特徵就越重要。

這樣就又有一個問題:如何衡量一個特徵為分類系統帶來了多少資訊呢?

對一個特徵而言,系統有它的時候和沒有它的時候資訊量將會發生變化,前後的資訊量的差值就是這個特徵給系統帶來的資訊量。

資訊量——在資訊理論中就是熵。

二、計算資訊增益:利用熵

1.資訊理論中的熵

有一個隨機變數x,它可能的取值有n種,x1,x2,......,xn,每一種取到的概率是p1,p2,......,pn,那麼x的熵就定義為:

式中的對數以2為底的時候熵的單位是位元(bit),以e為底的時候單位是納特(nat)。

意思就是一個變數可能的變化越多(就是取值的種類越多,反而跟變數具體的取值沒有任何關係,只和值的種類多少以及發生概率有關),它攜帶的資訊量就越大。

2.分類系統中的熵

對分類系統來說,類別C是變數,它可能的取值是C1,C2,……,Cn,而每一個類別出現的概率是P(C1),P(C2),……,P(Cn),因此n就是類別的總數。此時分類系統的熵就可以表示為:

3.資訊增益和熵的關係

資訊增益是針對一個一個的特徵而言的。那麼我們就是一個一個特徵來看,系統含有特徵a時的資訊量很好計算,就是上面的式子,它表示的是包含所有特徵時的資訊量。

當系統中不包含特徵a時,資訊量(熵)該如何計算?

這裡有一個例子:教室裡有很多座位,學生們每次上課進來的時 候可以隨便坐,因而變化是很大的(無數種可能的座次情況);但是現在有一個座位,看黑板很清楚,聽老師講也很清楚,於是校長的小舅子的姐姐的女兒託關係 (真輾轉啊),把這個座位定下來了,每次只能給她坐,別人不行,此時情況怎樣?對於座次的可能情況來說,我們很容易看出以下兩種情況是等價的:(1)教室 裡沒有這個座位;(2)教室裡雖然有這個座位,但其他人不能坐(因為反正它也不能參與到變化中來,它是不變的)。

從例子中可以看出,下面兩個命題是等價的:1.系統中不包含特徵a。2.系統中包含特徵a,但是a已經固定,不能變化。

那麼我們計算系統中不包含特徵a的情況時,就用2來代替。當一個特徵a不能變化時,系統的資訊量是多少?

這個資訊量有個專門的名稱:條件熵。

一個特徵X,它可能的取值有n多種(x1,x2,……,xn), 當計算條件熵而需要把它固定的時候,要把它固定在哪一個值上呢?答案是每一種可能都要固定一下,計算n個值,然後取均值才是條件熵。而取均值也不是簡單的 加一加然後除以n,而是要用每個值出現的概率來算平均(簡單理解,就是一個值出現的可能性比較大,固定在它上面時算出來的資訊量佔的比重就要多一些)。


條件熵的表示式:

特徵x被固定為xi時的條件熵。

特徵x被固定時的條件熵。

上面兩個式子的關係。

具體到我們文字分類系統中的特徵T,T有幾個可能的值呢?注意t是指一個固定的特徵,比如他就是指關鍵詞“經濟”或者“體育”,當我們說特徵“經濟”可能的取值時,實際上只有兩個,“經濟”要麼出現,要麼不出現。一般的,T的取值只有T(代表t出現)和非T(代表t不出現),注意系統包含t但t 不出現與系統根本不包含t可是兩回事。

固定t時條件熵就有了,則

P(t)就是T出現的概率,就是T不出現的概率。式子進一步展開;

那麼特徵T給系統帶來的資訊增益為;

三:資訊增益比

以資訊增益作為劃分訓練資料集的特徵,存在偏向於選擇取值較多的特徵的問題。使用資訊增益比可以對這一問題進行矯正。

特徵A對訓練資料集D的資訊增益比定義為其資訊增益與訓練資料集D關於特徵A的值的熵之比。

式子;


四:一個例子

任務:

根據天氣預測否去打網球

資料:

複製程式碼
這個資料集來自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為根節點。子節點重複上面的步驟。這顆樹可以是這樣的,它讀起來就跟你認為的那樣: