机器学习-周志华 学习笔记5(第4章 决策树)

第四章  决策树

4.1基本流程

决策树(decision tree)是一类常见的机器学习方法。

一般的,一棵决策树包含一个根节点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个节点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集。从根结点到每个叶结点的路径对应了一个判定测试序列。决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”(divide-and-conquer)策略。

4.2划分选择

4.2.1信息增益

       “信息熵”(informationentropy)是度量样本集合纯度最常用的一种指标。假定当前样本集合D中第k类样本所占的比例为pk(k=1,2,…,|y|),则D的信息熵定义为

Ent(D)的值越小,则D的纯度越高。

       假定离散属性a有V个可能的取值{a1,a2,…,aV},若使用a来对样本集D进行划分,则会产生V个分支结点,其中第V个分支结点包含了D中所有在属性a上取值为aV的样本,记为DV。我们科根据式(4.1)计算出|DV|/|D|,即样本数越多的分支结点的影响越大,于是可计算出用属性a对样本集D进行划分所获得的“信息增益”(information gain)

       一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的“纯度提升”越大。因此,我们可用信息增益来进行决策树的划分属性选择,即在图4.2算法第8行选择属性 。著名的ID3决策树学习算法就是以信息增益为准则来选择划分属性。具体举例见书本P75

       实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的C4.5决策树算法不直接使用信息增益,而是使用“增益率”(gain rate)来选择最优划分属性。采用与式4.2相同的符号表示,增益率定义为:

其中

 

称为属性a的“固有值”(intrinsicvalue)。属性a的可能取值数目越多(即V越大),则IV(a)的值通常会很大。

4.2.3基尼指数

       CART决策树使用“基尼指数”(Gini index)来选择划分属性,数据集D的纯度可用基尼值来度量:

直观来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此,Gini(D)越小,则数据集D的纯度越高。

属性a的基尼指数定义为

于是,我们在候选属性集合A中,选择那个使得划分后基尼指数最小的属性作为最优化分属性,即

4.3剪枝处理

剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段。通过主动去掉一些分支来降低过拟合的风险。、

决策树剪枝的基本策略有“预剪枝”(perpruning)和“后剪枝”(post-pruning)。预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化提升,则将该子树替换为叶结点。

判断决策树泛化性能是否提升使用2.2中讲到的性能评估法。本节假定采用留出法,即预留一部分数据用作“验证集”,以进行性能评估。以表4.1为例,编号为{1,2,3,6,7,10,14,15,16,17}的样例组成训练集,编号为{4,5,8,9,11,12,13}的样例组成验证集。

       假定以4.2.1中的信息增益准则来进行划分属性选择,则从表4.2的训练集生成如图4.5所示的决策树。

 

 

 

4.3.1预剪枝

讨论预剪枝,基于信息增益准则,选择属性“脐部”来对训练集进行划分,并产生3个分支,如图4.6所示。

基于预剪枝策略,从表4.2数据生成的决策树如图4.6所示,其验证精度为71.4%。这是一棵仅有一层划分的决策树,亦称“决策树桩”(decision stump)。

       对比图4.5和4.6可看出,预剪枝使得决策树的很多分支都没有展开,不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销。但是有些分支的当前划分虽然不能提升泛化性能但是在其基础上的后续划分可能会使性能显著提高;预剪枝基于“贪心”本质禁止这些分支展开,給预剪枝决策树带来了欠拟合的风险。

4.3.2后剪枝

       后剪枝先从训练集生成一棵完整决策树,例如基于表4.2的数据得到如图4.5所示的决策树,易知该决策树的验证集精度为42.9%。

      

最终,基于后剪枝策略从表4.2数据所生成的决策树如图4.7所示,其验证集精度为71.4%。后剪枝决策树通常比预剪枝决策树保留了更多的分支。一般情况下后剪枝决策树的欠拟合风险值要很小,泛化性能由于预剪枝但是其训练时间开支较大。

 

4.4连续值与缺失值

4.4.1连续值处理

已经讨论了基于离散属性来生成决策树,现实中常会遇见连续属性,现讨论如何在决策树中使用连续属性。

由于不能直接根据连续属性的可取值来对结点进行划分,所以使用连续属性离散化技术。最简单的策略是采用二分法(bi-partition)对连续属性进行处理。C4.5决策树算法采用这种机制。

给定样本集D和连续属性a,假定a在D上出现了n个不同的取值,将这些值从小到大进行排序,记为{a1,a2,…,an}。基于划分点t可将D分为子集Dt-和Dt+,其中Dt-包含那些属性a上取值不大于t的样本,而Dt+则包含那些属性a上取值大于t的样本。显然对于相邻属性取值ai与ai+1来说,t在区间[ai,ai+1)中取任意值所产生的划分结果相同。因此,对连续属性a,我们可考察n-1个元素的候选划分点集合

即把区间[ai,ai+1)的中位点 作为候选划分点。然后就可以像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分。

       需注意,与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。

4.4.2缺失值处理

       现实中会遇到不完整样本,样本某些属性值确实。尤其在属性数目较多的情况下,往往会有大量样本出现缺失值。不能因此而放弃有缺失值的样本。

       我们需解决两个问题:(1)如何在属性值缺失的情况下进行划分属性选择?(2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?

       给定训练集D和属性a,令D(~)表示D在属性a上没有缺失值的样本子集。对问题(1),显然我们仅可根据D(~)来判断属性a 的优劣。

       对问题(2),若样本x在划分属性a上的取值已知,则将x划入与其取值对应的子结点,且样本权值在子结点中保持为wx。若样本x在划分属性a上的取值未知,则将x同时划入所有子结点,且样本权值与属性值av对应的子结点调整为r(~)*wx;直观的看,这就是让同一个样本以不同的概率划入到不同的子结点中去。

4.5多变量决策树

      若我们把每个属性视为坐标空间中的一个坐标轴,则d个属性描述的样本就对应了d维空间中的一个数据点,对样本分类则意味着在这个坐标空间中寻找不同类样本之间的分类边界。决策树所形成的分类边界有一个明显的特点:轴平行(axis-parallel),即它的分类边界由若干个与坐标轴平行的分段组成。

 

显然分类边界的每一段都是与坐标轴平行的。这样的分类边界使得学习结果由较好的可解释性,因为每一段划分都直接对应了某个属性的取值,。但在学习任务的真实分类边界比较复杂时,必须使用很多段划分才能得到较好的近似。如图4.12所示;此时的决策树会相当复杂,由于要进行大量的属性测试,预测时间开销会很大。

       进行斜的划分边界,如图4.12中红色线段所示,则决策树模型将大为简化,“多变量决策树”(multivariate decision tree)就是能实现这样的“斜划分”甚至更复杂划分的决策树。以实现斜划分的多变量决策树为例,在此类决策树中,非叶结点不再是仅对某个属性,而是对属性的线性组合进行测试;换言之,每个非叶结点都是一个形如 的线性分类器,其中wi是属性ai的权重,wi和t可在该节点所含的样本集合属性集上学得。于是,与传统的“单变量决策树”(univariate decision tree)不同,在多变量决策树的学习过程中,不是为每个非叶结点寻找一个最佳划分属性,而是试图建立一个合适的线性分类器。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值