西瓜书学习笔记(第四章、决策树)

系列文章目录

西瓜书学习笔记(第二章、模型评估与选择)

西瓜书学习笔记(第三章、线性模型)


第四章、决策树 

目录

目录

一、基本流程

二、划分选择

        1.信息增益

        2.增益率

三、剪枝处理

        1.预剪枝

        2.后剪枝 

四、连续与缺失值

        1.连续值处理

        2.缺失值处理

五、多变量决策树

总结


 一、基本流程

决策树(decision tree)是一类常见的基于树结构的机器学习方法,亦称判定树。

一般,一个决策树包含一个根结点、若干个内部结点和若干个叶结点,叶结点对应于决策过程、其他每个结点则对应于一个属性测试。决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”(divide-and-conquer)策略:

 


二、划分选择

1.信息增益

信息熵”(information entropy)是度量样本集合纯度最常用的一种指标。假定当前样本集合D中第k类样本所占的比例为p_{k},则D的信息熵定义为:

Ent(D)=-\sum_{k=1}^{\left | \lambda \right |}p_{k}\log_{2}p_{k}

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

这里可以稍微举一些特例进行理解:

比如二分类问题中,D中只包含正样本(即p_{0}=1, p_{1}=0),此时D的纯度最高,由此得到Ent(D)=0;

若D中正负样本各占一半(即p_{0}=0.5, p_{1}=0.5),此时D的纯度是最低的,由此得到Ent(D)=\log _{2}2

假定离散属性a有V个可能的取值,若使用a 对D进行划分,则会产生V个分支结点,其中第v个分支结点包含了D中所有在属性a上取值为a^{v}的样本,记为D^{v}。根据信息熵的计算公式,同样可以计算出D^{v}的信息熵,考虑到不同的分支结点所包含的样本数不同,我们给分支结点赋予权重(即样本数越多的分支结点其影响也越大)\left | D^{v} \right |/\left | D \right |,由此,可以得到用属性a对D进行划分所获得的信息增益(information gain):

Gain\left ( D,a \right )=Ent(D)-\sum_{v=1}^{V}\frac{\left | D^{v} \right |}{\left | D \right |}Ent(D^{v})

 一般而言,信息增益越大,则意味着使用属性a来划分所获得的“纯度提升”越大,因此我们可用信息增益来进行决策树的划分属性选择,即:

a_{*}=\underset{a\in A}\arg\max Gain(D,a)

 著名的ID3决策树学习算法就是以信息增益为准则来选择划分属性的。

实例说明:

 以西瓜数据集为例:

可以发现正例(好瓜)占8个,负例(坏瓜)占9个,由此可以计算出D的信息熵为: 

 

接着我们将计算各个属性的信息增益,以属性“色泽”为例 ,它有3个可能的取值:{青绿、乌黑、浅白},其中青绿的样本有6个(正反例各有3个)、乌黑的样本有6个(正反例分别为4个和2个)、浅白的样本有5个(正反例分别有1个和4个)。由此可以计算出:

 由上述计算可以得到,应选取“纹理”作为最优划分属性。继续进行上述操作,可以得到最终基于信息增益生成的决策树:

 2.增益率

 在西瓜数据集2.0中,我们忽略了“编号”这一属性,我们不妨想一想如果将“编号”这一属性加入考虑,又会发生什么呢?“编号”有17个离散值,对应17个分支,每个分支只有一个样本,这样每个分支都达到最高纯度,因此若采用信息增益的方法抉择,它一定是最优划分属性(事实上可计算出该属性的信息增益为0.998),然而这是不符合常理的。 

因此我们可以发现,信息增益准则对可取值数目较多的属性有所偏好,因此我们将介绍“增益率”:

Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)} 

其中

IV(a)=-\sum_{V}^{v=1}\frac{\left | D^{v} \right |}{\left |D \right |}\log _{2}\frac{\left | D^{v} \right |}{\left |D \right |}

称为属性a的“固有值”(intrinsic value) ,属性a的可能取值数目越多(即V越大),则IV(a)的值通常也越大。比如,IV(触感)=0.874(V=2),IV(编号)=4.088(V=17).

由此可见,增益率可以在一定程度上修正属性可能取值数目造成的偏差。

3.基尼指数 

CART决策树使用“基尼指数”(Gini index)来选择划分属性(其余算法思路和ID3算法保持一致),一个数据集D的纯度可用基尼值来度量:

Gini(D)=\sum_{k=1}^{\left | \lambda \right |}\sum_{k^{'}\neq k}^{}p_{k}p_{k'}=1-\sum_{k=1}^{\left | \lambda \right |}p_{k}^{2}

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

属性a的基尼指数定义为 

Gini\_index(D,a)=\sum_{V}^{v=1}\frac{\left | D^{v} \right |}{\left | D \right |}Gini(D^{v}) 

这样,我们在进行选择划分属性时,应该选择那个使得划分后基尼指数最小的属性作为最优划分属性。 


三、剪枝处理

 剪枝(pruning)是决策树学习算法中对付过拟合(在这里主要指分支过细)的主要手段。决策树剪枝的基本策略有“预剪枝”(prepruning)和“后剪枝”(postpruning)。

1.预剪枝

预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶节点(其类别标记为训练样例最多的类别)。

那么问题来了,如何判断决策树泛化性能有提升呢?我们采用“留出法”预留一部分验证集以进行性能评估。如图,我们将编号为{4,5,8,9,11,12,13}的样例作为验证集。

采用ID3算法,利用信息增益准则,我们首先得到“脐部”为最优划分属性,由此将产生三个分支。此时,根据预剪枝的思想,我们要使用验证集来决定是否使用“脐部”进行划分: 

 由于划分后其精度较高,因此在这里我们需要进行划分。

递归使用该思路进行判断,可以得到使用预剪枝而生成的决策树为:

这是一棵仅有一层划分的决策树,亦称“决策树桩”(decision stump)。预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销;但是虽然有些分支在当前划分不能提升泛化性能,但在其基础上进行的后续划分可能导致性能显著提高,预剪枝基于“贪心”的本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险。 

2.后剪枝 

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

由后剪枝生成的决策树为:

一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝,但后剪枝过程是在生成完全决策树之后进行的,并且需要自底向上地对树中所有非叶结点进行逐一考察,因此其训练时间要大得多。  

 


 四、连续与缺失值

1.连续值处理

 我们之前讨论的都是关于离散值的处理,但当我们遇到连续属性,又该如何处理呢?由于连续属性的可取值数目不再有限,因此不能直接根据连续属性的可取值来对结点进行划分。此时,连续属性离散化技术可以用得上,最简单的策略就是采用二分法(bi-partition)对连续属性进行处理。

 给定样本集D和连续属性a,假定a在D上出现了n个不同的取值,将这些值从小到大进行排序,记为{a^{1},a^{2},...,a^{n}},基于划分点t可将D分为子集D_{t}^{-}D_{t}^{+}

关于t的选择,可以发现对相邻的两个属性取值a^{i}a^{i+1}来说,t在区间 [a^{i},a^{i+1})中任取一个值其划分结果都是相同的,我们不妨取 [a^{i},a^{i+1})的中位数作为t的取值,即:

T_{a}=\left \{ \frac{a^{i}+a^{i+1}}{2}|1\leqslant i\leqslant n-1 \right \}

然后,我们就可以像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分:

Gain(D,a)=\underset{t\in T_{a}}{\max }Ent(D)-\sum_{\lambda \in \left \{ -,+ \right \}}^{}\frac{\left | D_{t}^{\lambda } \right |}{\left | D \right |}Ent(D_{t}^{\lambda })

 2.缺失值处理

 现实任务重常会遇到不完整样本,即样本的某些属性值缺失,如下图:

 如果简单的放弃不完整样本,显然对数据信息是极大的浪费(比如如果放弃不完整样本,上图数据集仅有4个样本能被使用)。

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

首先需要说明几个重要的变量和参数:

在这里可以先不用管权重是什么,先理解每个变量的含义:\rho代表无缺失值样本所占的比例;\widetilde{p_{k}}代表无缺失值样本中第k类样本所占的比例;\widetilde{r_{v}}代表无缺失样本中在属性a上取值a^{v}的样本所占的比例。

 基于上述定义,我们可以得到推广后的信息增益的计算式为:

Gain(D,a)=\rho \times Gain(\tilde{D},a)=\rho \times(Ent(\tilde{D})-\sum_{v=1}^{V}\tilde{r_{v}}Ent(\tilde{D^{v}}))

由此我们回答了问题(1),只需要在推广后信息增益基础上进行抉择即可。

对问题(2),若样本x在划分属性a上的取值已知,则将x划入与其取值对应的子结点,且样本权值保持为 \omega _{x} ;若样本权值在划分属性a上的取值未知,则将x同时划入所有子结点,且样本权值在与属性值a^{v}对应的子结点中调整为\tilde{r_{v}}\cdot \omega _{x}。其实就是让同一个样本以不同的概率划入到不同的子结点中去。

 实例说明:

在这里我们以前面缺失数据集为例说明,首先计算“色泽”属性的信息增益:

同理,可以计算出其余属性的信息增益,可以得到还是“纹理”属性的信息增益最大,由此得到根结点的最优划分属性为“纹理”,但是有样本在“纹理”属性上缺失值,因此这里还需对部分样本权重值进行调整:

由此可以得到最终生成的决策树为:

 


 五、多变量决策树

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

如下图由含糖率和密度生成的决策树所对应的分类边界为:

 这样的分类边界使得学习结果有比较好的可解释性,但在学习真实任务时,其分类边界不会如此简单,想要使用轴平行的方法去拟合分类边界,可能需要很多段划分才能获得较好的近似,此时决策树会十分复杂。

若能使用斜的划分边界(不与轴平行),则决策树模型将大为简化:

多变量决策树”(multivariate decision tree)就是能实现这样的“斜划分”甚至更复杂划分的决策树,在此类决策树中,每个非叶结点不再是仅仅针对某个属性,而是多个属性的线性组合,如下图:

 此时在学习过程中,也并非是为每个非叶结点寻找一个最优划分属性,而是试图建立一个合适的线性分类器。


总结

本章最重要的部分在于如何理解和计算信息增益,并且要有能力复现出ID3算法,除此之外剪枝的思想也很重要。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值