ID3決策樹

知識準備:信息熵

是無序性(或不確定性)的度量指標。加入事件A的全概率劃分是(A1,A2,…An),每部分發生的概率是(p1,p2,…pn),那信息熵定義爲:

entropy(p1,p2,,pn)=p1log2p1p2log2p2pnlog2pn

通常以2爲底數,單位爲比特(bit),在數學證明上通常採用e爲底數,單位爲奈特(Nat)
更詳細的介紹請參考百度百科

核心思想及舉例說明

ID3構造樹的基本想法是隨着樹深度的增加,節點的熵迅速地降低。熵降低的速度越快越好,這樣我們有望得到一棵高度最矮的決策樹。在決策樹各級結點上選擇屬性時,用信息增益(information gain)作爲屬性的選擇標準,以使得在每一個非葉結點進行測試時,能獲得關於被測試記錄最大的類別信息。其具體方法是:檢測所有的屬性,選擇信息增益最大的屬性產生決策樹結點,由該屬性的不同取值建立分支,再對各分支的子集遞歸調用該方法建立決策樹結點的分支,直到所有子集僅包含同一類別的數據爲止。最後得到一棵決策樹,它可以用來對新的樣本進行分類。這是理想情況,當決策樹的高度爲屬性(決策變量)的個數,葉子節點不純,這意味着要根據概率來做出決策,即選擇大概率分類作爲分類結果。

信息增益計算:
設S是n個數據樣本的集合,共分m個不同類Ci(i=1,,m) 。設ni 是類Ci 中的樣本數。則該樣本分類所需的期望信息由下式給出:

I(n1,n2,,nm)=i=1mpilog2(pi)

其中,pi=ni/n ,是樣本屬於類Ci 的概率。
設屬性A具有v個不同值a1,a2,,av 。可以用屬性A將S劃分爲v個子集{S1,S2,,Sv} ,設nij 是子集Sj 中屬於類Ci 的樣本數。由A劃分子集的熵或信息期望由如下式給出:
E(A)=j=1v(n1j+n2j++nmj)/nI(n1j,n2j,+,nmj)

其中,
I(n1j,n2j,+,nmj)=mi=1pijlog2(pij)
pij=nij/(n1j+n2j++nmj) ,是Sj 中屬於類Ci 的概率。
那麼,在屬性A上分支將獲得的信息增益是:
Gain(A)=I(n1,n2,,nm)E(A)

ID3算法的優點:算法的理論清晰,方法簡單,學習能力較強。
ID3算法的缺點:只對比較小的數據集有效,且對噪聲比較敏感,當訓練數據集加大時,決策樹可能會隨之改變。

實例說明:
參考文章-歸納決策樹ID3(Java實現)

outlook temperature humidity windy play
sunny hot high FALSE no
sunny hot high TRUE no
overcast hot high FALSE yes
rainy mild high FALSE yes
rainy cool normal FALSE yes
rainy cool normal TRUE no
overcast cool normal TRUE yes
sunny mild high FALSE no
sunny cool normal FALSE yes
rainy mild normal FALSE yes
sunny mild normal TRUE yes
overcast mild high TRUE yes
overcast hot normal FALSE yes
rainy mild high TRUE no

以上是14天的氣象數據(指標包括outlook,temperature,humidity,windy),並已知這些天氣是否打球(play),訓練決策樹以對新數據進行預測。
在無天氣信息時,根據歷史數據,打球的概率是9/14,不打球的概率是5/14,此時的熵爲:

914log2914514log2514=0.940

屬性有4個:outlook,temperature,humidity,windy。首先確定根節點。
outlook=sunny時,2/5的概率打球,3/5的概率不打球。entropy=0.971
outlook=overcast時,entropy=0
outlook=rainy時,entropy=0.971
而根據歷史統計數據,outlook取值爲sunny、overcast、rainy的概率分別是5/14、4/14、5/14,所以當已知變量outlook的值時,信息熵爲:
5/14×0.971+4/14×0+5/14×0.971=0.693

因此,信息增益gain(outlook)=0.940-0.693=0.247
同理可以計算得到gain(temperature)=0.029, gain(humidity)=0.152, gain(windy)=0.048
可以看出gain(outlook)最大(即outlook在第一步使系統的信息熵下降得最快),因此選擇outlook作爲根節點。

這裏寫圖片描述

同理可以計算之後的節點,最終結果如下:
這裏寫圖片描述

附錄

1.Java實現
ID3決策樹(Java實現)

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