常规的决策树id3.c4.5 cart 构建了树这个体系的根基
https://blog.csdn.net/u012328159/article/details/79285214
这次看到的讲到的 主要来自这个博客,当然这个博客的内容是西瓜书里面的原内容,只不过有了电子版的,算是给自己复习了一下。
其实面试过程中,决策树的剪枝,决策树连续值,缺失值的处理还是经常被问到。
所以在这写一写自己的理解,加深印象
1.剪枝
1.为什么要剪枝
2.如何剪枝
对于第一个问题:无论是根据信息增益还是信息增益率,还是基尼系数,决策树一直生长下去本身就会过拟合,通过剪枝来提升树模型的泛化能力,防止树的过拟合
对于第二个问题:如何剪枝?
在剪枝的时候,我们要明确一个目的,就是剪枝好坏的评价标准是什么?评价标准就是, 剪枝前后,模型在测试集中的表现如何(即模型的泛化能力),以此来剪枝
剪枝的方式有两种,预剪枝和后剪枝
预剪枝:预剪枝就是在构造决策树的过程中,先对每个结点在划分前进行估计,若果当前结点的划分不能带来决策树模型泛华性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。
后剪枝(post-pruning):后剪枝就是先把整颗决策树构造完毕,然后自底向上的对非叶结点进行考察,若将该结点对应的子树换为叶结点能够带来泛华性能的提升,则把该子树替换为叶结点。
预剪枝总结: 对比未剪枝的决策树和经过预剪枝的决策树可以看出:预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销。但是,另一方面,因为预剪枝是基于“贪心”的,所以,虽然当前划分不能提升泛华性能,但是基于该划分的后续划分却有可能导致性能提升,因此预剪枝决策树有可能带来欠拟合的风险。
后剪枝总结:对比预剪枝和后剪枝,能够发现,后剪枝决策树通常比预剪枝决策树保留了更多的分支,一般情形下,后剪枝决策树的欠拟合风险小,泛华性能往往也要优于预剪枝决策树。但后剪枝过程是在构建完全决策树之后进行的,并且要自底向上的对树中的所有非叶结点进行逐一考察,因此其训练时间开销要比未剪枝决策树和预剪枝决策树都大得多。
连续值处理
连续值处理
因为连续属性的可取值数目不再有限,因此不能像前面处理离散属性枚举离散属性取值来对结点进行划分。因此需要连续属性离散化,常用的离散化策略是二分法,这个技术也是C4.5中采用的策略。下面来具体介绍下,如何采用二分法对连续属性离散化:
![](https://img.haomeiwen.com/i14040686/d2cf362e16dc9df7.png)
有一点需要注意的是:与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。如下图所示的一颗决策树,“含糖率”这个属性在根节点用了一次,后代结点也用了一次,只是两次划分点取值不同。
![](https://img.haomeiwen.com/i14040686/6718253aae0c15fc.png)
缺失值处理
现实生活中的数据集中的样本通常在某系属性上是缺失的,如果属性值缺失的样本数量比较少,我们可以直接简单粗暴的把不完备的样本删除掉,但是如果有大量的样本都有属性值的缺失,那么就不能简单地删除,因为这样删除了大量的样本,对于机器学习模型而言损失了大量有用的信息,训练出来的模型性能会受到影响。
在决策树中处理含有缺失值的样本的时候,需要解决两个问题:
如何在属性值缺失的情况下进行划分属性的选择?(比如“色泽”这个属性有的样本在该属性上的值是缺失的,那么该如何计算“色泽”的信息增益?)
给定划分属性,若样本在该属性上的值是缺失的,那么该如何对这个样本进行划分?(即到底把这个样本划分到哪个结点里?)
![](https://img.haomeiwen.com/i14040686/36ba396bb418447b.png)
概括来说就是:比如17个样本里面,色泽这个属性缺失的有2个,那么计算色泽的信息增益的时候,把那两个缺失的去掉,只算这15个的信息增益的情况
比如 最后确定按色泽进行划分, 则把15个样本分成了 5 4 6 三个分支
那么剩下来的2个缺失值的样本如何分?是按照5/15 4/15 6/15的权重分别进入这三个的分支进行计算,而不缺失的值的样本的权重为1,就是这样。。。。
立个flag,有空一定看看
gcForest,树的深度模型
网友评论