转自: https://blog.csdn.net/u012328159/article/details/79396893
前面两篇博客分别介绍了如何构造决策树(根据信息增益,信息增益率,基尼指数等)和如何对决策树进行剪枝(预剪枝和后剪枝),但是前面两篇博客主要都是基于离散变量的,然而我们现实的机器学习任务中会遇到连续属性,这篇博客主要介绍决策树如何处理连续值。
| 连续值处理
因为连续属性的可取值数目不再有限,因此不能像前面处理离散属性枚举离散属性取值来对结点进行划分。因此需要连续属性离散化,常用的离散化策略是二分法,这个技术也是C4.5中采用的策略。下面来具体介绍下,如何采用二分法对连续属性离散化:
![](https://i-blog.csdnimg.cn/blog_migrate/8e35f56d29aad394059472872bf83824.jpeg)
下面举个具体的例子,来看看到底是怎样划分的。给定数据集如下(数据集来自周志华《机器学习》,我已经把数据集放到github上了,地址为:西瓜数据集3.0):
![](https://i-blog.csdnimg.cn/blog_migrate/154667c2812c4d68c33de1546de2920e.jpeg)
对于数据集中的属性“密度”,决策树开始学习时,根节点包含的17个训练样本在该属性上取值均不同。我们先把“密度”这些值从小到大排序:
![](https://i-blog.csdnimg.cn/blog_migrate/0a9caf8ea99b37b881788d11cf71f5ff.gif)
根据上面计算
的公式,可得:
![](https://i-blog.csdnimg.cn/blog_migrate/e93894495c923328400ac3f1beeef9b1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a6218e918e4dbc2ad42e5344e60dca06.gif)
下面开始计算t 取不同值时的信息增益:
![](https://i-blog.csdnimg.cn/blog_migrate/c0d3a2233c1f1143379940e85b574ef1.jpeg)
对属性“含糖率”,同样的计算,能够计算出:
![](https://i-blog.csdnimg.cn/blog_migrate/6e9569714c798b92a243782e11fe1876.jpeg)
再由第一篇博客中决策树(一)计算得到的各属性的信息增益值:
![](https://i-blog.csdnimg.cn/blog_migrate/7a12f2f2aaca3dd6135541f43d87cd88.jpeg)
比较能够知道纹理的信息增益值最大,因此,“纹理”被选作根节点划分属性,下面只要重复上述过程递归的进行,就能构造出一颗决策树:
![](https://i-blog.csdnimg.cn/blog_migrate/ab7bc5d620a1cfb9120514e7e12a5c8f.jpeg)
**有一点需要注意的是:与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。**
如下图所示的一颗决策树,“含糖率”这个属性在根节点用了一次,后代结点也用了一次,只是两次划分点取值不同。
![](https://i-blog.csdnimg.cn/blog_migrate/119b918ba9f4f0548cb8ec04b26de071.jpeg)
以上就是决策树如何处理连续值的内容,关于如何处理缺失值,因为我会写的比较详细,所以如果和连续值放在一起,会显得篇幅过长,因此放在下一篇博客中单独介绍。