【引用小例子超詳細解說】ID3和C4.5決策樹詳解及應用(一)

1、引例

假如讓不瞭解NBA的社區張大媽猜去年奪冠的球隊 【去年總決賽勇士VS騎士,勇士總冠軍】 。給出的候選球隊依次爲w-1-火箭、w-2-勇士、w-3-步行者、w-4-雷霆、e-1-猛龍、e-2-凱爾特人、e-3-76人e-4-騎士這8支隊伍。當大媽每猜一次時只能給出正確與錯誤的反饋時,那麼如何讓不知情的張大媽能在最少次數下答對?

在不知情的情況下猜測,每個隊伍的奪冠概率相同,那麼最糟的情況是猜了7次,利用折半法也需要3次。因爲當概率均等時,信息熵最大,即不確定性最大。(信息熵概念下文有)那如果大媽平時偶爾瞭解過NBA並且知道球隊分爲東西部以及瞭解某幾個球隊比較有奪冠實力的話,那不就可以減少猜測的次數了?

這背後就隱藏着決策樹了,決策樹就是降低信息不確定性的過程

2、基本概念

引入決策樹前,必須要了解“信息熵”以及“信息增益”。

2.1、信息熵

想了解熵的更多信息,可以參閱另外一篇博客

熵是表示最忌變量不確定性的度量。

信息論之父克勞德·香農給出的信息熵的三個性質[1]:

1、單調性,發生概率越高的事件,其攜帶的信息量越低;

2、非負性,信息熵可以看作爲一種廣度量,非負性是一種合理的必然;

3、累加性,即多隨機事件同時發生存在的總不確定性的量度是可以表示爲各事件不確定性的量度的和,這也是廣度量的一種體現。

熵(entropy)一般用 HH 表示,單位爲比特。當概率均等時,信息熵最大,即不確定性最大。 香農從數學上嚴格證明了滿足上述三個條件的隨機變量不確定性度量函數具有唯一形式:
H(X)=Cxχp(x)logp(x)H(X) = - C\sum_{x\in \chi }p(x)\log p(x)

其中 CC 爲常數,我們將 C=1C=1 便可以得到信息熵公式。

2.2、條件熵

條件熵(condition entropy)表示在給定已知某種條件 XX 下,事物 YY 的熵即爲條件熵 H(YX)H(Y\mid X) ,其公式定義爲:
H(YX)=xXp(x)H(Yx)=xXp(x)yYp(yx)logp(yx)H(Y\mid X) = \sum_{x\in X}p(x)H(Y\mid x) = - \sum_{x\in X}p(x)\sum_{y\in Y}p(y\mid x)\log p(y\mid x)

2.3、信息增益

信息增益(information gain)表示存在某種條件 XX ,它使得條件熵 H(YX)H(Y\mid X) 儘可能的小(也就是“不確定性”減少的多),即當引入信息 XX 之後,事物 YY 的熵變小了。則信息增益記爲:
g(YX)=H(Y)H(YX)g(Y\mid X) = H(Y) - H(Y\mid X)

3、小實例(利用ID3算法處理)

【數據介紹】:14天打籃球情況,包含4種環境特徵

【目標】:構造決策樹

【數據展示】:

ID weather(天氣) temperature(溫度) humidity(溼度) windy(風況) play(是否打球)
1 sunny hot high false no
2 sunny hot high true no
3 overcast hot high false yes
4 rainy mild high false yes
5 rainy cool normal false yes
6 rainy cool normal true no
overcast cool normal true yes
8 sunny mild high false no
9 sunny cool normal false yes
10 rainy mild normal false yes
11 sunny mild normal true yes
12 overcast mild high true yes
13 overcast hot normal false yes
14 rainy mild high true no

【開始分析】:

第一步,根據標籤值(打沒打籃球),計算熵。

14天中有9天打,5天沒打,此時熵:

{χ={no,yes}p(x=yes)=914p(x=no)=514\begin{cases}\chi = \left \{ no, yes \right \} \\p(x = yes) = \tfrac{9}{14}\\p(x = no) = \tfrac{5}{14} \end{cases}

H(play)=xχp(x)logp(x)=914log914514log514=0.940H(play) = - \sum_{x\in \chi }p(x)\log p(x) = - \frac{9}{14}\log \frac{9}{14} - \frac{5}{14}\log \frac{5}{14} = 0.940

第二步,根據4種特徵分別計算條件熵。

  1. 基於weather條件。

    通過數據表格,我們知道:
    weather(14){sunny(5){yes(2)no(3)overcast(4){yes(4)no(0)rainy(5){yes(3)no(2) weather(14) \begin{cases} sunny(5)\begin{cases}yes(2)\\no(3)\end{cases} \\overcast(4)\begin{cases}yes(4)\\no(0)\end{cases} \\rainy(5)\begin{cases}yes(3)\\no(2)\end{cases} \end{cases}
    那麼,計算基於weather的條件熵:
    H(playweather)=xweatherp(x)H(playx) H(play\mid weather) = \sum_{x\in weather}p(x)H(play\mid x)

    =p(sunny)H(playsunny)+p(overcast)H(playovercast)+p(rainy)H(playrainy) = p(sunny)H(play\mid sunny)+p(overcast)H(play\mid overcast)+p(rainy)H(play\mid rainy)

    其中:
    {weather={sunny,overcast,rainy}play={yes,no}p(sunny)=514p(overcast)=414p(rainy)=514;{p(yessunny)=25p(nosunny)=35p(yesovercast)=44=1p(noovercast)=0p(yesrainy)=35p(norainy)=25 \begin{cases} weather=\left \{ sunny,overcast,rainy \right \} \\play=\left \{ yes,no \right \} \\p(sunny)=\frac{5}{14} \\p(overcast)=\frac{4}{14} \\p(rainy)=\frac{5}{14} \end{cases} ; \begin{cases} p(yes\mid sunny)=\frac{2}{5} \\p(no\mid sunny)=\frac{3}{5} \\p(yes\mid overcast)=\frac{4}{4}=1 \\p(no\mid overcast)=0 \\p(yes\mid rainy)=\frac{3}{5} \\p(no\mid rainy)=\frac{2}{5} \end{cases}

    {H(playsuny)=yplayp(ysunny)logp(ysunny)=25log2535log35=0.971H(playovercast)=yplayp(yovercast)logp(yovercast)=1×log10=0H(playrainy)=yplayp(yrainy)logp(yrainy)=35log3525log25=0.971 \begin{cases} H(play\mid suny)=-\sum_{y\in play}p(y\mid sunny)\log p(y\mid sunny)=-\frac{2}{5}\log \frac{2}{5}-\frac{3}{5}\log \frac{3}{5}=0.971 \\H(play\mid overcast)=-\sum_{y\in play}p(y\mid overcast)\log p(y\mid overcast)=-1\times\log 1-0=0 \\H(play\mid rainy)=-\sum_{y\in play}p(y\mid rainy)\log p(y\mid rainy)=-\frac{3}{5}\log \frac{3}{5}-\frac{2}{5}\log \frac{2}{5}=0.971 \end{cases}

    所以有:
    H(playweather)=514×0.971+414×0+514×0.971=0.693 H(play\mid weather)=\frac{5}{14}\times 0.971+\frac{4}{14}\times 0+\frac{5}{14}\times0.971=0.693

  2. 基於temperautre條件。

    通過數據表格,我們知道:
    temperature(14){hot(4){yes(2)no(2)mild(6){yes(4)no(2)cool(4){yes(3)no(1) temperature(14) \begin{cases} hot(4)\begin{cases}yes(2)\\no(2)\end{cases} \\mild(6)\begin{cases}yes(4)\\no(2)\end{cases} \\cool(4)\begin{cases}yes(3)\\no(1)\end{cases} \end{cases}
    爲了不贅述,計算過程同1,可以計算出基於temperature的條件熵:
    H(playtemperature)=xtemperaturep(x)H(playx)=414×1+614×0.918+414×0.811=0.911 H(play\mid temperature)=\sum_{x\in temperature}p(x)H(play\mid x)=\frac{4}{14}\times 1+\frac{6}{14}\times 0.918+\frac{4}{14}\times 0.811=0.911

  3. 基於humidity條件。

    通過數據表格,我們知道:
    humidity(14){high(7){yes(3)no(4)normal(7){yes(6)no(1) humidity(14) \begin{cases} high(7)\begin{cases}yes(3)\\no(4)\end{cases} \\normal(7)\begin{cases}yes(6)\\no(1)\end{cases} \end{cases}
    計算出基於humidity的條件熵:
    H(playhumidity)=xhumidityp(x)H(playx)=714×0.985+714×0.592=0.788 H(play\mid humidity)=\sum_{x\in humidity}p(x)H(play\mid x)=\frac{7}{14}\times 0.985+\frac{7}{14}\times 0.592=0.788

  4. 基於windy條件。

    通過數據表格,我們知道:
    windy(14){false(8){yes(6)no(2)true(6){yes(3)no(3) windy(14) \begin{cases} false(8)\begin{cases}yes(6)\\no(2)\end{cases} \\true(6)\begin{cases}yes(3)\\no(3)\end{cases} \end{cases}
    計算出基於windy的條件熵:
    H(playwindy)=xwindyp(x)H(playx)=814×0.811+614×1=0.892 H(play\mid windy)=\sum_{x\in windy}p(x)H(play\mid x)=\frac{8}{14}\times 0.811+\frac{6}{14}\times 1=0.892

第三步,計算信息增益。

根據第一步計算的熵以及第二步所計算的條件熵,我們可以計算出第一輪的信息增益:
{gain(playweather)=H(play)H(playweather)=0.9400.693=0.247gain(playtemperature)=H(play)H(playtemperature)=0.9400.911=0.029gain(playhumidity)=H(play)H(playhumidity)=0.9400.788=0.152gain(playwindy)=H(play)H(playwindy)=0.9400.892=0.048 \begin{cases} gain(play\mid weather)=H(play)-H(play\mid weather)=0.940-0.693=0.247 \\gain(play\mid temperature)=H(play)-H(play\mid temperature)=0.940-0.911=0.029 \\gain(play\mid humidity)=H(play)-H(play\mid humidity)=0.940-0.788=0.152 \\gain(play\mid windy)=H(play)-H(play\mid windy)=0.940-0.892=0.048 \end{cases}
可以得知 $gain(play\mid weather) $ 的信息增益最大 ,weather所以第一輪產生的決特徵爲\color{red}{所以第一輪產生的決特徵爲 weather },將其設置爲決策樹的根節點。

此時,根據特徵weather的劃分後,數據表爲:

ID weather(天氣) temperature(溫度) humidity(溼度) windy(風況) play(是否打球)
1 sunny\color{red}{sunny} hot high false no
2 sunny\color{red}{sunny} hot high true no
8 sunny\color{red}{sunny} mild high false no
9 sunny\color{red}{sunny} cool normal false yes
11 sunny\color{red}{sunny} mild normal true yes
3 overcast\color{green}{overcast} hot high false yes
7 overcast\color{green}{overcast} cool normal true yes
12 overcast\color{green}{overcast} mild high true yes
13 overcast\color{green}{overcast} hot normal false yes
4 rainy\color{blue}{rainy} mild high false yes
5 rainy\color{blue}{rainy} cool normal false yes
6 rainy\color{blue}{rainy} cool normal true no
10 rainy\color{blue}{rainy} mild normal false yes
14 rainy\color{blue}{rainy} mild high true no

根據特徵 weather 劃分後的表格可以清晰的看到,在 weather 爲 overcast\color{green}{overcast} 的情況下都去打球了。

此時決策樹第一步的畫法:

在這裏插入圖片描述

第四步,重複第二、三倆步驟,選出第二個特徵。

​ 此時還剩下三個特徵,則開始計算除了 overcast\color{green}{overcast} 的其餘10條數據的熵,因爲這10天裏,有5天打球5天沒打,所以此時的熵爲:
H(play)=510×log510510×log510=1 H(play)=-\frac{5}{10}\times \log \frac{5}{10}-\frac{5}{10}\times \log \frac{5}{10}=1
​ 和第一輪一樣的處理流程,我們分別計算餘下的三個特徵的條件熵:

  1. 基於 temperature 的條件熵。

    通過劃分後的數據表格,我們知道:
    temperature(10){hot(2){yes(0)no(2)mild(5){yes(3)no(2)cool(3){yes(2)no(1) temperature(10) \begin{cases} hot(2)\begin{cases}yes(0)\\no(2)\end{cases} \\mild(5)\begin{cases}yes(3)\\no(2)\end{cases} \\cool(3)\begin{cases}yes(2)\\no(1)\end{cases} \end{cases}

    H(playtemperature)=xtemperaturep(x)H(playx) H(play\mid temperature) = \sum_{x\in temperature}p(x)H(play\mid x)

    =p(hot)H(playhot)+p(mild)H(playmild)+p(cool)H(playcool) =p(hot)H(play\mid hot)+p(mild)H(play\mid mild)+p(cool)H(play\mid cool)

    其中:
    {p(hot)=210p(mild)=510p(cool)=310;{p(yeshot)=0p(nohot)=1p(yesmild)=35p(nomild)=25p(yescool)=23p(yescool)=13 \begin{cases}p(hot)=\frac{2}{10} \\p(mild)=\frac{5}{10} \\p(cool)=\frac{3}{10} \end{cases} ; \begin{cases}p(yes\mid hot)=0 \\p(no\mid hot)=1 \\p(yes\mid mild)=\frac{3}{5} \\p(no\mid mild)=\frac{2}{5} \\p(yes\mid cool)=\frac{2}{3} \\p(yes\mid cool)=\frac{1}{3} \end{cases}

    {H(playhot)=yplayp(yhot)logp(yhot)=01×log1=0H(playmild)=yplayp(ymild)logp(ymild)=35×log3525×log25=0.971H(playcool)=yplayp(ycool)logp(ycool)=23×log2313×log13=0.918 \begin{cases}H(play\mid hot)=-\sum_{y\in play}p(y\mid hot)\log p(y\mid hot)=-0-1\times \log 1=0 \\H(play\mid mild)=-\sum_{y\in play}p(y\mid mild)\log p(y\mid mild)=-\frac{3}{5}\times \log \frac{3}{5}-\frac{2}{5}\times \log \frac{2}{5}=0.971 \\H(play\mid cool)=-\sum_{y\in play}p(y\mid cool)\log p(y\mid cool)=-\frac{2}{3}\times \log \frac{2}{3}-\frac{1}{3}\times \log \frac{1}{3}=0.918 \end{cases}

    所以有:
    H(playtemperature)=xtemperaturep(x)H(playx)=210×0+510×0.971+310×0.918=0.761 H(play\mid temperature)=\sum_{x\in temperature}p(x)H(play\mid x)=\frac{2}{10}\times 0+\frac{5}{10}\times 0.971+\frac{3}{10}\times 0.918=0.761

  2. 基於 humidity 的條件熵。

    通過劃分後的數據表格,我們知道:
    humidity(10){high(5){yes(1)no(4)normal(5){yes(4)no(1) humidity(10) \begin{cases} high(5)\begin{cases}yes(1)\\no(4)\end{cases} \\normal(5)\begin{cases}yes(4)\\no(1)\end{cases} \end{cases}
    同上,計算得:
    H(playhumidity)=xhumidityp(x)H(playx)=510×0.722+510×0.722=0.722 H(play\mid humidity)=\sum_{x\in humidity}p(x)H(play\mid x)=\frac{5}{10}\times0.722+\frac{5}{10}\times0.722=0.722

  3. 基於 windy 的條件熵。

    通過劃分後的數據表格,我們知道:
    windy(10){false(6){yes(4)no(2)true(4){yes(1)no(3) windy(10) \begin{cases} false(6)\begin{cases}yes(4)\\no(2)\end{cases} \\true(4)\begin{cases}yes(1)\\no(3)\end{cases} \end{cases}
    同上,計算得:
    H(playwindy)=xwindyp(x)H(playx)=610×0.918+410×0.811=0.875 H(play\mid windy)=\sum_{x\in windy}p(x)H(play\mid x)=\frac{6}{10}\times0.918+\frac{4}{10}\times0.811=0.875

  4. 計算新一輪的信息增益,並選出最大的作爲下一個決策特徵。

    第二輪的信息增益爲:
    {gain(playtemperature)=H(play)H(playtemperature)=10.761=0.0.239gain(playhumidity)=H(play)H(playhumidity)=10.722=0.278gain(playwindy)=H(play)H(playwindy)=10.875=0.125 \begin{cases} gain(play\mid temperature)=H(play)-H(play\mid temperature)=1-0.761=0.0.239 \\gain(play\mid humidity)=H(play)-H(play\mid humidity)=1-0.722=0.278 \\gain(play\mid windy)=H(play)-H(play\mid windy)=1-0.875=0.125 \end{cases}
    可知,gain(palyhumidity)gain(paly\mid humidity) 最大,第二輪產生的決策特徵爲humidity\color{red}{humidity}

    此時,根據特徵 humidity 的劃分後,數據表爲:

    ID weather(天氣) temperature(溫度) humidity(溼度) windy(風況) play(是否打球)
    1 sunny\color{red}{sunny} hot high\color{red}{high} false no
    2 sunny\color{red}{sunny} hot high\color{red}{high} true no
    8 sunny\color{red}{sunny} mild high\color{red}{high} false no
    4 rainy\color{blue}{rainy} mild high\color{red}{high} false yes
    14 rainy\color{blue}{rainy} mild high\color{red}{high} true no
    9 sunny\color{red}{sunny} cool normal\color{blue}{normal} false yes
    11 sunny\color{red}{sunny} mild normal\color{blue}{normal} false yes
    5 rainy\color{blue}{rainy} cool normal\color{blue}{normal} false yes
    6 rainy\color{blue}{rainy} cool normal\color{blue}{normal} true no
    10 rainy\color{blue}{rainy} mild normal\color{blue}{normal} false yes
    3 overcast\color{green}{overcast} hot high false yes
    7 overcast\color{green}{overcast} cool normal true yes
    12 overcast\color{green}{overcast} mild high true yes
    13 overcast\color{green}{overcast} hot normal false yes

    根據特徵 humidity劃分後的表格可以清晰的看到,在 weather 爲 sunny\color{red}{sunny} 並且 humidity 爲 hight\color{red}{hight} 的情況下都沒打球,在 weather 爲 sunny\color{red}{sunny} 並且 humidity 爲 normal\color{blue}{normal} 的情況下都打球了。

    所以此時補充決策樹的畫法:

在這裏插入圖片描述

第五步,重複二、三倆步驟,選出第三個特徵。

。。。 。。。

後面運算以及表格的變化都與前面的操作相似,由於篇幅有限,這裏就不贅述了,直接給出最後的分劃數據表以及決策樹。

第三個選出來的特徵爲 windy ,然後全部決策並劃分結束。

ID weather(天氣) temperature(溫度) humidity(溼度) windy(風況) play(是否打球)
4 rainy\color{blue}{rainy} mild high\color{red}{high} false\color{red}{false} yes
5 rainy\color{blue}{rainy} cool normal\color{blue}{normal} false\color{red}{false} yes
10 rainy\color{blue}{rainy} mild normal\color{blue}{normal} false\color{red}{false} yes
14 rainy\color{blue}{rainy} mild high\color{red}{high} true\color{blue}{true} no
6 rainy\color{blue}{rainy} cool normal\color{blue}{normal} true\color{blue}{true} no
1 sunny\color{red}{sunny} hot high\color{red}{high} false no
2 sunny\color{red}{sunny} hot high\color{red}{high} true no
8 sunny\color{red}{sunny} mild high\color{red}{high} false no
9 sunny\color{red}{sunny} cool normal\color{blue}{normal} false yes
11 sunny\color{red}{sunny} mild normal\color{blue}{normal} false yes
3 overcast\color{green}{overcast} hot high false yes
7 overcast\color{green}{overcast} cool normal true yes
12 overcast\color{green}{overcast} mild high true yes
13 overcast\color{green}{overcast} hot normal false yes

最後的決策樹畫法:

在這裏插入圖片描述


參考

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