当前位置:   article > 正文

决策树算法_决策树之ID3算法

决策树id3算法

3b5191713540e7a0de1d4a5433a68f94.png

初识决策树

假设我们现在有这样一个数据集,记录了每次打篮球的时候,当天的天气、温度、湿度、刮风等情况

e185a897648d7d45c72f88309edf329a.png

然后根据历史的数据集,我们用决策树算法生成了如下的图形:

4ea243fef692a0b225852621d618d3db.png

这幅图相信大家很容易看懂,就是当天气是晴天的时候,打篮球;小雨的时候,不打篮球;如果是阴天,那就再看一下温度,温度低的话不打篮球,温度中的话打篮球。

如果用if else来描述这幅图就是

bf4e19d2d76dc5018599f00e81666d8d.png

很多人写过类似if else的判断语句。但是你有没有想过,有这么多判断条件,为什么会先选这个条件做if判断,其他条件后做if判断呢?很多时候我们是根据自己的经验和分析,构建if else的判断分支。

而决策树模型会根据大量的历史样本数据,运用算法选择合适的属性作为节点,最终构造出类似流程图的树状结构。

决策树的基本结构包含根节点、子节点(有子节点就有父节点,子和父是相对的,一个子节点可能是下一个分支节点的父节点)、叶子节点。

1.根节点:就是决策树最开始的节点,刚才我们生成的决策树图中,根节点就是“天气”

2.子节点:就是树中间的一些节点,比如“温度”

3.叶子节点:最底部的节点,已经不能再分下去,也是决策的结果

在决策树的算法中,不管是ID3(信息增益),C4.5(信息增益率)还是CART(基尼系数),都在解决同样的问题:

1.选择哪个属性作为根节点

2.选择那些属性作为子节点

3.什么时候停止得到决策的结果,即叶子节点

ID3算法

为什么学决策树算法之前,要学习信息和熵的概念呢?

我们知道熵是用来衡量事物的不确定性,事物的不确定性越大,熵就越大。

同样的道理,如果一个数据集决策属性越杂,我们就说数据集的纯度越低,熵越大。如果决策属性的值都是打篮球,数据集纯度是最高的,没有任何不确定性,熵为0。当数据集决策属性的值有两个,一半是打篮球,一半是不打篮球,纯度最低,熵为1。

cf8ca6df1f46ccc3f1acd4304d565670.png

但是如果我们能找到某个条件属性(表中的天气、温度、湿度、刮风都称作条件属性),通过对数据集进行划分,使得决策属性(表中的是否打篮球称做决策属性)的不确定性降低,那么这个条件属性我们就作为决策树的节点。

根节点确认以后(比如例子中的天气),根据根节点的属性值(晴天、小雨、阴天都是天气属性的值),整个数据集又被划分为不同的子数据集(按照晴天、小雨、阴天,整个数据集分为不同的部分),然后对子数据集重复同样的计算,求出子数据集中使得决策属性不确定性最低的属性,将该属性作为子节点,直到不能再继续分下去,到叶子节点停止。

上面的表述可能有点不太好理解,我们还是以打篮球的例子,来重复整个ID3算法的过程。

我们有11个样本的数据集D,其中标签属性中有7个输出为打篮球,4个为不打篮球。数据集D的不确定性是0.9457。

172dafa3eb0a4d467bd820abbb13b482.png

我们可以看到,如果以天气作为属性进行划分,样本D的不确定性,从最初的0.9457降低到0.2504。由于ID3算法求的是信息增益,不确定性降低多少,实际上就是信息增加多少:

c2aa8c18f84b5a7eb1d9f39c887a6d14.png

如果以温度作为属性划分,信息增益为0.5911。

4c57c561fc0fb1da36fbf5e9242ce12e.png

湿度、刮风的计算细节就不再展示,同样的方法计算得出,当湿度作为属性进行划分,信息增益为0.6176;刮风作为属性进行划分,信息增益为0.0238。

计算结果显示,当天气作为属性时,信息增益最大。因为ID3算法就是寻找信息增益最大的属性作为节点,所以我们最终选取天气作为根节点。

天气已经确定为根节点,所以天气这个属性后面也不必再重复计算,以确保已经确定为节点的属性在任意路径最多只出现一次。

当天气等于晴天时,所有的结果都是打篮球,没有任何不确定性,所以不必再继续分下去,叶子节点就是打篮球;

当天气等于小雨时,所有的结果都是不打篮球,没有任何不确定性,所以也不必再继续分下去,叶子节点就是不打篮球;

当天气等于阴天时,结果有打篮球,也有不打篮球。所以我们必须再从温度、湿度、刮风等条件属性中,找到信息增益最大的属性作为节点,继续分裂下去。

计算方法和上面一样,分别求出当条件是温度、湿度、刮风时的信息增益。经过计算我们会发现选择属性温度时,信息增益最大,所以阴天这个分支,继续选择温度作为子节点。

温度作为节点之后,再继续分裂,没有任何不确定性。当温度为中的时候,结果都是打篮球,低的时候,结果是不打篮球。所以整个决策树就构造完成了。

b32840ace0f2c7f5597ade565d391d23.png


我们可以看到,刮风这个属性并没有在决策树中。说明刮风作为属性的时候,没有降低任何不确定性,对判断是否打篮球没有帮助,所以被算法排除掉了。


ID3算法的规则非常简单,就是寻找信息增益最大的属性作为节点。信息增益最大,意味着使用这个属性之后,结果的不确定性最低。


熵的公式:

信息增益(information gain)的公式如下:

Ent是熵Entropy的缩写;

n是属性a所有值的数量,比如天气属性有三个值,{晴天、小雨、阴天},那么n=3;

Ent(D)是原集合D的熵;

是相应属性值对应的子集,
是各个子集的熵的加权和,权值为
的数量占原集合D的比例。

这个公式描述的就是原集合D的熵在知道属性a之后熵减少了多少。熵减少意味着不确定减少,熵减少的数量就是信息增加的数量,获取信息可以减少不确定性。熵和信息的数量相等,意义相反。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/398740
推荐阅读
相关标签
  

闽ICP备14008679号