【分类算法】决策树(二)

上集回顾

今天我们继续学习决策树的相关知识。这里首先回顾一下上期的知识。在上一期里面我们主要讲到了:

  • 什么是决策树
  • 决策树的训练过程
  • 熵和Gini系数的计算

这里如果忘记或者忘记这些知识的可以去回顾一下。特别是熵和Gini系数的计算!!!因为接下来我将围绕他们去手动构建一棵完整的决策树。

决策树的构建过程

这里首先提一下决策树的构造思路。随着树深度的增加,节点的熵值要迅速的降低(速度越快越好),这样我们有希望得到一棵高度最矮的决策树。那么为什么要最矮呢?其实是因为随着决策树深度的增加,我们的模型就会约复杂。我相信假如效果是一致的情况下,其实没有人想要将事情做负责的对不对。有了这个思路之后,我们就开始举例子,然后手动构建一棵决策树了。
假设小坤是一个热爱篮球的男生,他放假经常去打篮球。但决定他去打篮球的因素其实还有很多。

outlooktemperaturehumiditywindyplay
sunnyhothighfalseno
sunnyhothightrueno
overcasthothighfalseyes
rainymildhighfalseyes
rainycoolnormalfalseyes
rainycoolnormaltrueno
overcastcoolnormaltrueyes
sunnymildhighfalseno
sunnycoolnormalfalseyes
rainymildnormalfalseyes
sunnymildnormaltrueyes
overcastmildhightrueyes
overcasthotnormalfalseyes
rainymildhightrueno

这里可以看到,小坤打不打篮球的先决条件一共有4个。他们分别是天气、温度、湿度、是否大风。好,接下来我们就结合熵或Gini系数来构建一颗决策树。为了方便大家回顾,这里还是列一些熵的公式:
熵 = − ∑ i = 1 n p i ∗ l o g 2 ( p i ) 熵 = -\sum_{i=1}^np_i*log_2(p_i) =i=1npilog2(pi)
步骤一:这里我们可以得到:
{ P ( 打 篮 球 ) = 9 14 P ( 不 打 篮 球 ) = 5 14 \begin{cases} P(打篮球) = \frac{9}{14}\\ P(不打篮球) =\frac{5}{14} \end{cases} {P()=149P()=145
忽略所有因素不算,我们只关注是否打篮球,这样我们可以得到一个初始的熵值
熵 ( 初 始 ) = − ( 9 14 ∗ l o g 2 ( 9 14 ) + 5 14 ∗ l o g 2 ( 5 14 ) ) ≈ 0.94 熵(初始)=- (\frac{9}{14}*log_2(\frac{9}{14})+\frac{5}{14}*log_2(\frac{5}{14}))\approx0.94 ()=(149log2(149)+145log2(145))0.94
步骤二:以outlook为例,我们可以得到

outlook
sunny
overcast
rainy
yes x 2
no x 3
yes x 4
yes x 3
no x 2

当outlook为sunny的时候,对应的熵值为:
熵 ( s u n n y ) = − ( 2 5 ∗ l o g 2 ( 2 5 ) + 3 5 ∗ l o g 2 ( 3 5 ) ) ≈ 0.971 熵(sunny) = - (\frac{2}{5}*log_2(\frac{2}{5})+\frac{3}{5}*log_2(\frac{3}{5}))\approx0.971 (sunny)=(52log2(52)+53log2(53))0.971
熵 ( o v e r c a s t ) = − ( 1 ∗ l g ( 1 ) ) = 0 熵(overcast)=-(1*lg(1))=0 (overcast)=(1lg(1))=0
熵 ( r a i n y ) = − ( 2 5 ∗ l o g 2 ( 2 5 ) + 3 5 ∗ l o g 2 ( 3 5 ) ) ≈ 0.971 熵(rainy) = - (\frac{2}{5}*log_2(\frac{2}{5})+\frac{3}{5}*log_2(\frac{3}{5}))\approx0.971 (rainy)=(52log2(52)+53log2(53))0.971
这里我给出利用python计算上述公式的代码,大家只要套进去就好,不需要再按计算机了,以熵(sunny)为例子:

import math
a = -((2/5)*math.log((2/5),2)+(3/5)*math.log((3/5), 2))
print(a)

最后,我们可以把outlook的每一个因素的熵整合起来。同样的使用熵的公式:
熵 ( o u t l o o k ) = P ( s u n n y ) ∗ 熵 ( s u n n y ) + P ( o v e r c a s t ) ∗ 熵 ( o v e r c a s t ) + P ( r a i n y ) ∗ 熵 ( r a i n y ) 熵(outlook)=P(sunny)*熵(sunny)+P(overcast)*熵(overcast)+P(rainy)*熵(rainy) (outlook)=P(sunny)(sunny)+P(overcast)(overcast)+P(rainy)(rainy)
熵 ( o u t l o o k ) = 5 14 ∗ 0.971 + 4 14 ∗ 0 + 5 14 ∗ 0.971 ≈ 0.693 熵(outlook)=\frac{5}{14}*0.971+\frac{4}{14}*0+\frac{5}{14}*0.971\approx0.693 (outlook)=1450.971+1440+1450.9710.693
如此做法,假如我们使用outlook这个因素进行第一次分支,我已使整体熵值从0.94减少到0.639。换句话说,他的信息增益(信息增益就是熵值下降的幅度,所以实际项目中,信息增益值越大越好)就是
G a i n ( o u t l o o k ) = 0.94 − 0.693 = 0.247 Gain(outlook)=0.94-0.693=0.247 Gain(outlook)=0.940.693=0.247
同样的手法,我们可以得到:
{ G a i n ( o u t l o o k ) = 0.247 G a i n ( t e m p e r a t u r e ) = 0.029 G a i n ( h u m i d i t y ) = 0.152 G a i n ( w i n d y ) = 0.048 \begin{cases} Gain(outlook)=0.247\\ Gain(temperature)=0.029\\ Gain(humidity)=0.152\\ Gain(windy)=0.048 \end{cases} Gain(outlook)=0.247Gain(temperature)=0.029Gain(humidity)=0.152Gain(windy)=0.048
所以,我们应该从outlook开始作为决策树的分支。以及最终的数据应该是

  1. outlook
  2. humidity
  3. windy
  4. temperature

决策树相关算法

现在,我们已经讲完决策树的构建过程。以及我们已经可以手动的构建一棵属于我们自己的决策树。那么接下来我就提一下决策树常用的算法。当然这里就不展开说明了,假如有需要的小伙伴,可以自行查阅资料。一般来讲,决策树有如下集中算法:

算法分支依据说明
ID3信息增益这是上面我们手动算的这个算法。最开始的决策树构建就以来于他,所以他属于决策树元组的算法。
C4.5信息增益率信息增益率=信息增益/自身的熵值。通常情况下只依赖信息增益判断节点是不靠谱的,所以引入信息增益率。信息增益率越大越好。
GARTGini系数具体的计算方式我有在上期的知识说过,可以点击翻一下

总结

这次我们主要学习了决策树的最初是的算法。以及假如给我们简单的数据,我们如何手动构建一棵决策树。当然啦,这在实际项目中是不需要的。但手动构建决策树,可以让我们更假迅速的了解决策树的原理。然后基于它学习决策树的优化。
没错,下一篇文章我们将学习决策树的优化。这里线抱歉,本来想2篇文章讲完决策树,但最后发现内容还是有点多。但我想控制一篇文章2000~3000字左右,这样内容不会太多,比较记住。没关系,我们还是分三章慢慢学吧。下一篇文章我将分享的剪枝叶以及代码实现。

点我阅读更多算法分享

参考文献

https://www.bilibili.com/video/av26086646?p=4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值