引入
“这个瓜是好瓜吗?”我们对这样的问题进行决策时,通常会进行一系列的判断或子决策:我们先看“它是什么颜色?”如果它是“青绿色”的,那我们再看“它的根蒂是什么形态?”,如果是“蜷缩”,我们再判断“它敲起来是什么声音?”,如果是“浊响”,那么最后,我们得到最终的决策结果——它是个好瓜……这是人类在面临决策问题时一种很自然的处理机制,而决策树就是基于这样的树结构进行建立的。
一、简单概念
1. 决策树是一种常见的机器学习算法,它是基于树结构来进行决策的。
2. 一般的,一棵决策树包含一个根节点、若干个内部结点和若干个叶节点。
3. 叶结点对应于决策结果,其他每个结点则对应一个属性测试。
4. 每个结点包含的样本集合根据属性测试的结果被划分到子结点中,特别地,根节点包含样本全集。
5.从根节点到每一个叶节点的路径对应了一个判定测试序列。
6.决策树学习的目的是为了产生一棵泛化能力强,即处理未知样本能力强的决策树,其基本流程遵循简单而直观的“分而治之”策略。
二、决策树学习基本算法
先摆出基本算法的伪代码
解释:
决策树的生成是一个递归的过程,在决策树的基本算法中,有三种情形会导致递归返回:
(1)当前结点包含的样本全属于同一个类别,无需划分;
(2)当前属性集为空,或是所有样本在所有属性上的取值相同,无法划分;
在(2)中的情形下,我们把当前结点标记为当前叶节点,并将其类别设定为该节点所含样本最多的类别
(3)当前结点包含的样本集合为空,不能划分;
在(3)中的情形中下,同样把当前结点标记为叶节点,但将其类别设定为其父结点所含样本最多的样本
注意:情形(2)是在利用当前结点的后验分布,而情形(3)则是把父结点的样本分布作为当前节点的先验分布。
接下来用Titanic简化数据集来具体说明三种情况
数据集D中有7组数据,Xi代表各组数据下不同属性下的不同取值,y即存活情况,y i 代表最终分类结果。X i ={性别 i,船舱等级 i,登船港口 i},y i={0,1}
根据上面的数据集画出的决策树如下:
红色数字代表第几类递归返回,蓝色圆圈中的数字代表叶结点。
(1)结点1在“ 性别 = 女 ”这一分类下,所有的存活情况全部为1 ,没有继续划分的必要,遂把该结点直接作为叶结点,种类就为1.
(2)结点2在“ 船舱等级 = 1”这一划分之后,所有的经过结点2的数据集Dv在所有的属性上的取值相同,无法继续划分,所以把该结点标记为叶结点,划分的种类为Dv中出现次数最多的类别0. (数据集Dv包含数组3,4,7,均为M,1,S,结果种类为0,1,0)
结点4和结点5,同理所有属性取值相同或者说是划分完了所有的属性(新属性集为空),无法继续划分,直接标记为叶结点,虽然就只有一组数据但是他们也是属于第二类递归返回的范围。
(3)结点3,在“ 性别 = 男 ”之后,“ 船舱等级 = 3”的样本集合为空集,不能划分,直接标记为叶结点,返回的种类为父结点 (也就是“ 性别 = 男 ”时)数据集的类别中出现次数最多的类别0. (从全部数据集中我们可以看出Pclass属性的取值为1,2,3,但是数据组3,4,5,6,7中都没有“ 船舱等级 = 3”,所以该取值下为空集)
三、划分选择
决策树学习的关键是算法第8行,即如何选择最优划分属性。一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。
3.1度量样本集合纯度的指标
3.1.1信息增益
在使用信息增益之前我们先来了解一下信息熵。
信息熵是对事件中不确定信息的量度。自信息量是信源发出某一具体消息所含有的信息量,发出的消息不同所 含有的信息量不同。因此自信息量不能用来表征整个信源的不确定度。 我们定义平均自信息量来表征整个信源的不确定度。平均自信息量又称 为信息熵、信源熵,简称熵。
那么,如何计算信息熵?这是一个概率的计算问题:
![](https://i-blog.csdnimg.cn/blog_migrate/120c63342a86e2b3e7d059f88763d489.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9c1ef0e6017df8ad2ca26f80bcc9898f.png)
信息增益越大,表示使用属性a划分所获得的"纯度提升“越大,结果越好。
著名的ID3算法就是以信息增益为准则进行属性选择。
用信息增益进行划分的过程实际上类似于一个递归过程,小栗子在这里附上了自己的理解,如有错误请在下方评论。
结合上面的过程,我们可以再来理解一下西瓜书上的例子
3.2 信息增益率
![](https://i-blog.csdnimg.cn/blog_migrate/2d9488daf22faa62a9d745a5f201a815.png)
其中
3.3 基尼指数
使 用 “基 尼 指 数 "( Gini index) 来选择划分属性.采用与
![](https://i-blog.csdnimg.cn/blog_migrate/dca3dd45fd34b89deab46ca29f4bf74a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/11b369155e8ef53c90adf726d04fd7ef.png)
![](https://i-blog.csdnimg.cn/blog_migrate/79a22f25288bb11df3d8b232f960818b.png)
四、剪枝处理
剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段.在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学得“太好”了,以致于把训练集自身 的一些特点当作所有数据都具有的一般性质而导致过拟合.因此,可通过主动去掉一些分支来降低过拟合的风险.
决策树剪枝的基本策略有“预剪枝”(prepruning)和 “后剪枝 " (post-pruning) [Quinlan, 1993].
4.1 预剪枝
预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。
如何判断决策树泛化性能是否提升呢?这可使用2.2节介绍的性能评估方法.
预剪枝方法提炼
(1)不选择当前属性划分,该结点将被标记为叶节点,比较好瓜样例数和坏瓜样例数,将其类别标记为训练样例数最多的类别;(依据决策树算法第6行)
然后用验证集对其评估,得到验证集精度 z1;
(2)如果依据当前属性划分,其分支结点将被标记为叶节点,同样将其类别标记为样例数最多的类别;
然后用验证集对其评估,计算验证集精度 z2;
(3)比较两次的精度,如果z1>z2,则不选择当前属性划分;如果z1<z2,则选择当前属性进行划分。
我们根据以上提炼的方法对西瓜书上的例子进行进一步的理解。
预剪枝优缺点
(1)优点:
预剪枝使得决策树的很多分支都没有“展 开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销.
(2)缺点:
但另一方面,有些分支的当前划分虽不能提升泛化性能,甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高;预剪枝基于“贪心”本质禁止这些分支展开,给预剪枝决策树带来了 欠拟合的风险。
4.2 后剪枝
后剪枝方法提炼
(1)已知构造出的完整的决策树的精度是z1;
(2)自底向上找到一个非叶结点,若剪除其领衔的分支,并将其替换为叶结点后的决策树的精度z2>z1,则将该非叶结点剪除,若z2<z1,则不进行剪除。
后剪枝的优缺点
(1)优点:
一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。
(2)缺点:
后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都大得多。
五、连续与缺失值
5.1 连续值处理
到目前为止我们仅讨论了基于离散属性来生成决策树。现实学习任务中常会遇到连续属性,有必要讨论如何在决策树学习中使用连续属性。
由于连续属性的可取值数目不再有限,因此,不能直接根据连续属性的可取值来对结点进行划分。
此时,连续属性离散化技术可派上用场。
最简单的策略是采用二分法对连续属性进行处理。这正是C4.5决策树算法中采用的机制。
![](https://i-blog.csdnimg.cn/blog_migrate/b3bcb23ce5b4aadf4c66754432044de3.png)
5.2缺失值处理
5.2.1 问题一 如何在属性值缺失的情况下进行划分属性的选择?
5.2.2 问题二 给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
六、多变量决策树
![](https://i-blog.csdnimg.cn/blog_migrate/75c622f7257118e0bdf876a30ed70c89.png)
![](https://i-blog.csdnimg.cn/blog_migrate/70a59c5b0df2f38ed07ba3966eb45d0c.png)
![\omega _{i}](https://i-blog.csdnimg.cn/blog_migrate/99a1bbdf7c78b51e9d9e355df7745b97.gif)