【引用小例子超详细解说】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(playweather)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与机器学习实战
©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值