知識準備:信息熵
熵是無序性(或不確定性)的度量指標。加入事件A的全概率劃分是(A1,A2,…An),每部分發生的概率是(p1,p2,…pn),那信息熵定義爲:
通常以2爲底數,單位爲比特(bit),在數學證明上通常採用e爲底數,單位爲奈特(Nat)
更詳細的介紹請參考百度百科
核心思想及舉例說明
ID3構造樹的基本想法是隨着樹深度的增加,節點的熵迅速地降低。熵降低的速度越快越好,這樣我們有望得到一棵高度最矮的決策樹。在決策樹各級結點上選擇屬性時,用信息增益(information gain)作爲屬性的選擇標準,以使得在每一個非葉結點進行測試時,能獲得關於被測試記錄最大的類別信息。其具體方法是:檢測所有的屬性,選擇信息增益最大的屬性產生決策樹結點,由該屬性的不同取值建立分支,再對各分支的子集遞歸調用該方法建立決策樹結點的分支,直到所有子集僅包含同一類別的數據爲止。最後得到一棵決策樹,它可以用來對新的樣本進行分類。這是理想情況,當決策樹的高度爲屬性(決策變量)的個數,葉子節點不純,這意味着要根據概率來做出決策,即選擇大概率分類作爲分類結果。
信息增益計算:
設S是n個數據樣本的集合,共分m個不同類
其中,
設屬性A具有v個不同值
其中,
那麼,在屬性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,此時的熵爲:
屬性有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的值時,信息熵爲:
因此,信息增益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實現)