决策树算法详解

基本流程

一般的,一个决策树包含一个根节点、若干个内部结点和若干个叶子结点;叶子结点对应于决策结果,其他每个节点则对应一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集,从根结点到每个叶结点的路径对应了一个判定测试序列。决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的"分而治之" (divide-and-conquer) 策略。
在这里插入图片描述
显然,决策树的生成是一个递归过程.在决策树基本算法中,有三种情形会导致递归返回: (1) 当前结点包含的样本全属于同一类别,无需划分; (2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分; (3) 当前结点包含的样本集合为空,不能划分。在第(2)种情形下,我们把当前结点标记为叶结点,井将其类别设定为该结点所含样本最多的类别;在第(3) 种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别。注意这两种情形的处理实质不同:情形(2)是在利用当前结点的后验分布,而情形(3)则是把父结点的样本分布作为当前结点的先捡分布。

划分选择

决策树的关键是如何选择最优的划分属性;

  1. 信息增益(ID3算法)
    1.1 信息熵(information entropy)
    假定当前样本集合D中第K类样本所占的比例为Pk,则D的信息熵为:
    在这里插入图片描述
    Ent(D)的值越小,则D的纯度越高;
    1.2 信息增益(information gain)
    在这里插入图片描述
    一般而言,信息增益越大,则意味着使用属性a来划分所获得的“纯度提升”越大;
  2. 增益率(C4.5算法)
    信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,提出了“增益率”,利用“增益率”来选择最优划分属性;
    在这里插入图片描述在这里插入图片描述
    IV(a)称为属性a的“固有值”,属性a的可能取值数目越多,则IV(a)的值通常越大。
    注意:增益率准则对可取值数目较少的属性有所偏好,因此C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
  3. 基尼指数
    CART决策树使用基尼指数来选择划分属性,数据集D的纯度可用基尼指数来度量:
    在这里插入图片描述
    直观来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率,因此Gini(D)越小,数据集D的纯度越高。
    属性a的基尼指数表示为:
    在这里插入图片描述
    选择那个划分后基尼指数最小的属性作为最优划分属性。

剪枝处理

剪枝是决策树学习算法中对付’过拟合‘的主要手段。当决策树把训练集自身的一些特点当作数据都具有的一般性质时,会导致过拟合,可通过主动去掉一些分支来降低过拟合的风险。

决策树剪枝的基本策略有:预剪枝(prepruning)和后剪枝(post-pruning);
1.预剪枝
预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前点的划分不能带来决策树泛化性能提升,则停止划分,并将当前结点标记为叶节点;

2.后剪枝
后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树泛化能力的提升,则将该子树替换为叶结点。

如何判断决策树泛化性能是否提升呢?可以使用留出法,也就是预留出一部分数据集作为“验证集”来进行性能的评估。看下面的一个示例:

对下表中的西瓜数据集,将其随机划分为两部分:
在这里插入图片描述
利用信息增益准则来进行划分属性的选择,得到如下决策树:
在这里插入图片描述
1.预剪枝
基于信息准则,选取“脐部”来对训练集进行划分,产生三个分支,那么是否应该进行这个划分呢?预剪枝要对划分前后的泛化性能进行估计。
在划分之前,所有样例集中在根节点,若不进行划分,该结点将被标记为叶结点,其类别标记为训练样例最多的类别,假设将其标记为好瓜,用验证集对这个单结点决策树进行评估,则编号{4,5,8}的样例被分类正确,另外4个样例分类错误,于是验证集精度为:3/7=42.9%
在利用属性“脐部”划分之后,结点②③④分别包含编号为{1,2,3,14},{6,7,15,17},{10,16}的训练样例,因此这三个结点分别被标记为叶节点“好瓜”,“好瓜”,“坏瓜”,此时{4,5,8,11,12}的样例被分类正确,验证集精度为5/7=71.4%>42.9%,于是用“脐部”划分正确。
依次进行下去,可得到一棵如下的树:
在这里插入图片描述从图中可以看出,预剪枝使得决策树的很多分支都没有展开,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销;但另一方面,有些分支的房钱划分虽不能提高泛化性能,甚至可能导致泛化性能的暂时下降,但在其基础上进行的后续划分却又可能导致性能显著提高;预剪枝基于“贪心”本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险。

2.后剪枝
后剪枝先从训练集生成一棵完整决策树,易知决策树验证集精度为42.9%。
后剪枝首先考察图中的结点⑥,若将其领衔的分支剔除,则相当于将⑥替换为叶节点,“好瓜”,此时验证集精度提高至57.1%,于是决定剪枝;
然后继续考察其他结点,最终得到如下的决策树:
在这里插入图片描述从图中可以看出,后剪枝决策树通常比预剪枝决策树保留了更多的分支,一般来说,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树;但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中地所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。

连续与缺失值

1.连续值处理
由于连续属性的可取值数目不再有限,因此不能直接根据连续属性的可能取值来对结点进行划分。此时需要利用连续属性离散化方法,最简单的是采用二分法策略。

2.缺失值处理
需要解决两个问题:(1)如何在属性值缺失的情况下进行划分属性选择?(2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
在这里插入图片描述在这里插入图片描述在这里插入图片描述示例,为下表的数据创建一棵决策树:
在这里插入图片描述在学习开始时,根节点包含样本集D中全部17个样例,各样例的权值均为1,以属性色泽为例,该属性上无缺失值的样例子集 D ~ \widetilde{D} D 包含编号为{2,3,4,6,7,8,9,10,11,12,14,15,16,17}的14个样例,显然:
在这里插入图片描述在这里插入图片描述"纹理"在所有属性中取得了最大的倍息增益,被用于对根结点进行划分.划分结果是使编号为{1,2,3,4,5,6,15} 的样本进入"纹理=清晰"分支,编号为{7,9, 13, 14, 17} 的样本边入"统理=稍糊"分支,而编号为{11,12, 16} 的样本进入"纹理=模糊"分支,且样本在各子结点中的权重保持为1.需注意的是,编号为{8} 的样本在属性"纹理"上出现了缺失值,因此它将同时进入三个分支中,但权重在三个子结点中分别调整为7/15,5/15,3/15,编号为{10}的样本有类似划分结果。
在这里插入图片描述

多变量决策树

若我们把每个属性视为坐标空间中的一个坐标轴,则d个属性描述的样本就对应了d维空间中的一个数据点,对样本分类则意味着在这个坐标空间中寻找不同类样本之间的分类边界。决策树所形成的分类边界有一个明显的特点:轴平行,即它的分类边界由若干个与坐标轴平行的分段组成。
示例如下:
在这里插入图片描述在这里插入图片描述
在学习任务的真实分类边界比较复杂时,必须使用很多段划分才能获得较好的近似,此时的决策树会相当复杂,由于要进行大量的属性测试,预测时间开销会很大。
若能使用斜的划分边界,决策树模型将大为简化。“多变量决策树”可以实现这样的“斜划分”。以实现斜划分的多变量决策树为例,在此类决策树中,非叶节点不再是仅对某个属性,而是对属性的线性组合进行测试;换言之,每个非叶节点是一个形如:多个变量加权和的线性分类器。
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值