机器学习入门学习笔记(三)决策树

一、基本流程

决策树(decision tree)是一类常见的机器学习方法。它是基于树结构来进行决策的,这恰是人类在面临决策问题时一种很自然的处理机制。

决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程道循简单且直观的“分而治之”(divide-and-conquer)策略。

1.1 决策树的结构

一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点。
根结点:包含样本全集;
内部结点:对应一个“子决策”,其包含的样本集合 根据属性测试的结果被划分到子结点中;
叶结点:对应于决策结果,其他每个结点则对应于一个属性测试;
从根结点到每个叶结点的路径对应了一个判定测试序列。
在这里插入图片描述

1.2 算法流程

显然,决策树的生成是一个递归过程。
它的三种递归返回情形:
1、当前结点包含的样本全属于同一类别,无需划分;
2、当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;
3、当前结点包含的样本集合为空,不能划分。
在第 2 和 第 3 种情形下,我们把当前结点标记为叶结点。
在这里插入图片描述

二、划分选择

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

目标:随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高。

2.1 信息增益(ID3算法)

“信息熵”(information entropy) 是度量样本集合纯度最常用的一种指标。
假定 当前样本集合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 的信息熵,再考虑到不同的分支结点所包含的样本数不同,给分支结点赋予权重|Dv|/|D|,即样本数越多的分支结点的影响越大,于是可计算出用属性a对样本集D进行划分所获得的“信息增益”(information gain):
在这里插入图片描述
信息增益越大,则意味着使用属性a来进行划分所获得的“纯度提升”越大。因此,我们可用信息增益来进行决策树的划分属性选择,即在图4.2算法第8行选择属性a* 为Gain(D,a)最大的。著名的ID3决策树学习算法就是以信息增益为准则来选择划分属性。

例子

以下表西瓜数据集为例,该数据集包含17个训练样例。
在这里插入图片描述
在决策树学习开始时,根结点包含D中的所有样例,其中正例占p1= 8/17,反例占p2= 9/17,根据式(4.1)可计算出根结点的信息熵为:
在这里插入图片描述
先考察 属性“色泽”,它有3个可能的取值 { 青绿,乌黑,浅白}若使用该属性对 D 进行划分,则可得到3个子集,分别记为:D1(色泽=青绿),D2(色泽=乌黑),D3(色泽=浅白)。

D1包含编号为 {1,4,6,10,13,17} 的 6个样例,其中正、反例分别占 p1= 3/6,p2= 3/6。
D2包含编号为 {2,3,7, 8, 9,15} 的 6个样例,其中正、反例分别占 p1= 4/6,p2= 2/6。
D3包含编号为 {5,11,12,14,16} 的 5个样例,其中正、反例分别占 p1= 1/5,p2= 4/5。

根据式(4.1)可计算出用“色泽”划分之后所获得的3个分支结点的信息熵为
在这里插入图片描述
于是,根据式(4.2)可计算出属性“色泽”的信息增益为:
在这里插入图片描述
类似的,我们可计算出其他属性的信息增益:
在这里插入图片描述
显然,属性“纹理”的信息增益最大,于是它被选为划分属性,划分的结果如下图。
在这里插入图片描述
然后,决策树学习算法将对每个分支结点做进一步划分,基于D1计算出各属性的信息增益:
在这里插入图片描述
“根蒂”、“脐部”、“触感”3个属性均取得了最大的信息增益,可任选其中之一作为划分属性。
类似的,对每个分支结点进行上述操作,最终得到的决策树如下图所示:
在这里插入图片描述
ID3算法的问题: 若把“编号”也作为一个候选划分属性,其信息增益远大于其他候选划分属性,因为“编号”将产生17个分支,每个分支结点仅包含一个样本,这些分支结点的纯度已达最大。然而,这样的决策树显然 不具有泛化能力 ,无法对新样本进行有效预测。

2.2 增益率(C4.5算法)

因为 信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的C4.5决策树算法不直接使用信息增益,而是使用“增益率”(gain ratio)来选择最优划分属性。
增益率定义为:
在这里插入图片描述
其中 IV(a) 称为属性 a 的 “固有值”(intrinsic value)。定义如下:
在这里插入图片描述
属性 a 的可能取值数目越多(即 V 越大),则 IV(a) 的值通常会越大。
例如,对表4.1的西瓜数据集,有Ⅳ(触感)=0.874 (V=2),Ⅳ(色泽)=1.580 (V=3),IV(编号)=4.088 (V=17)。

增益率准则对可取值数目较少的属性有所偏好,因此,C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

2.3 基尼指数(CART 决策树)

数据集 D 的纯度可用 基尼值 来度量:
在这里插入图片描述
Gini(D)反映了从 数据集D 中随机抽取两个样本,其类别标记不一致的概率。因此,Gini(D)越小,则数据集D的纯度越高。
属性a的 基尼指数 定义为:
在这里插入图片描述
我们在候选属性集合A中,选择那个使得划分后 基尼指数最小的属性 作为最优划分属性。

三、决策树的剪枝处理

决策树中的过拟合问题:为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,以致于把训练集自身的一些特点当作所有数据都具有的一般性质而导致过拟合。

剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段,决策树剪枝的基本策略:
预剪枝(prepruning): 在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。
后剪枝(postpruning): 先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。

本节假定采用留出法,将其随机划分为两部分,如表4.2所示。
在这里插入图片描述
假定采用 信息增益准则 来进行划分属性选择,则从表4.2的训练集将会生成一棵如图4.5所示的决策树。为便于讨论,对图中的部分结点做了编号。
在这里插入图片描述

3.1 预剪枝

使用上述划分的的数据集,基于信息增益准则,我们会选取属性“脐部”来对训练集进行划分,并产生3个分支,如图4.6所示,然而,是否应该进行这个划分呢?预剪枝要对划分前后的泛化性能进行估计。

在划分之前,所有样例集中在根结点。
若不进行划分,则根据算法4.2第6行,该结点将被标记为叶结点,其类别标记为训练样例数最多的类别,假设我们将这个叶结点标记为“好瓜”。用表4.2的验证集对这个单结点决策树进行评估,则编号为 {4,5,8} 的样例被分类正确,另外4个样例分类错误,于是,验证集精度为 3/7 x100% = 42.9%。
在这里插入图片描述
用属性“脐部”划分之后,图4.6中的结点 ②、③、④ 分别包含编号为 {1,2,3,14 }、{ 6,7,15,17 }、{ 10,16 } 的训练样例,因此这3个结点分别被标记为叶结点 “好瓜”、“好瓜”、“坏瓜”。

此时,验证集中编号为 { 4,5,8,11,12 } 的样例被分类正确,验证集精度为 5/7 x 100% = 71.4% > 42.9%。于是,用“脐部”进行划分得以确定。

同理,决策树算法对结点②进行划分,基于信息增益准则将挑选出划分属性“色泽”。然而,在使用“色泽”划分后,编号为 { 5 } 的验证集样本分类结果会由正确转为错误,使得验证集精度下降为 57.1%。于是,预剪枝策略将禁止结点②被划分。

对结点③,最优划分属性为“根蒂”,划分后验证集精度仍为71.4%。这个划分不能提升验证集精度,于是,预剪枝策略禁止结点③被划分。

对结点④,其所含训练样例已属于同一类,不再进行划分。

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

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

3.2 后剪枝

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

后剪枝首先考察图4.5中的结点⑥。若将其分支剪除,则相当于把⑥替换为叶结点。替换后的叶结点包含编号为 { 7,15 } 的训练样本,于是,该叶结点的类别标记为“好瓜”,此时决策树的验证集精度提高至57.1% 。于是,后剪枝策略决定剪枝,如图4.7所示。
在这里插入图片描述
然后考察结点⑤,若将其领衔的子树替换为叶结点,则替换后的叶结点包含编号为 { 6,7,15 } 的训练样例,叶结点类别标记为“好瓜”,此时决策树验证集精度仍为57.1%。于是,可以不进行剪枝。

对结点②,若将其领衔的子树替换为叶结点,则替换后的叶结点包含编号为 {1,2,3,14} 的训练样例,叶结点标记为“好瓜”,此时决策树的验证集精度提高至71.4%。于是,后剪枝策略决定剪枝。

对结点①和③,若将其领衔的子树替换为叶结点,则所得决策树的验证集精度分别为71.4%与42.9%,均未得到提高。于是它们被保留。

最终,基于后剪枝策略从表4.2数据所生成的决策树如图4.7所示,其验证集精度为71.4%.

对比图4.7和图4.6可看出,后剪枝决策树通常比预剪枝决策树保留了更多的分支.一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。

四、连续与缺失值

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) 的中位点 (ai+ai+1) / 2 作为候选划分点。然后,我们就可像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分。例如,可对 信息增益公式 稍加改造:
在这里插入图片描述
其中 Gain(D,a,t) 是样本集D基于划分点 t 二分后的信息增益。于是,我们就可选择使Gain(D,a,t)最大化的划分点。

例子:
增加两个连续属性“密度”和“含糖率”,如表4.3所示
在这里插入图片描述
对属性“密度”,在决策树学习开始时,根结点包含的17个训练样本在该属性上取值均不同。该属性的候选划分点集合包含16 个候选值:T密度 = { 0.244,,0.294,0.351,0.381,0.420,0.459, 0.518,0.574, 0.600,0.621,0.636,0.648,0.661,0.681,0.708,0.746}。再由公式可计算出属性“密度”的 信息增益为 0.262,对应于划分点0.381。

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

4.2 缺失值处理

现实任务中常会遇到不完整样本,即样本的某些属性值缺失,尤其是在属性数目较多的情况下,往往会有大量样本出现缺失值。

如果简单地放弃不完整样本,仅使用无缺失值的样本来进行学习,显然是对数据信息极大的浪费。例如表4.4,如果放弃不完整样本,则仅有编号 { 4,7,14,16 } 的4个样本能被使用。显然,有必要考虑利用有缺失属性值的训练样例来进行学习。
在这里插入图片描述
我们需解决两个问题:
(1)如何在属性值缺失的情况下进行划分属性选择?
(2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?

给定训练集 D 和属性 a ,令 D’ 表示 D 中在属性 a 上没有缺失值的样本子集。

对问题(1),我们仅可根据 D’ 来判断属性 a 的优劣,假定属性 a 有 V 个可取值 { a1,a2,…,aV},令 D’v 表示 D 中在属性 a 上取值为 av 的样本子集,D’k 表示D中属于第 k 类(k=1,2,…|Y|)的样本子集,则显然有
在这里插入图片描述
在这里插入图片描述
假定我们为每个样本x赋予一个权重wx,并定义
在这里插入图片描述
直观地看,对属性a,
ρ表示无缺失值样本所占的比例,
p’k 表示无缺失值样本中第k类所占的比例,
r’v则表示无缺失值样本中在属性a上取值av的样本所占的比例显然
在这里插入图片描述
基于上述定义,我们可将信息增益的计算式推广为
在这里插入图片描述
其中,信息熵有:
在这里插入图片描述
对问题(2),若样本 x 在划分属性 a 上的取值已知,则将 x 划入与其取值对应的子结点,且样本权值在子结点中保持为wx。若样本 x 在划分属性 a 上的取值未知,则将 x 同时划入所有子结点,且样本权值在与属性值 av 对应的子结点中调整为
在这里插入图片描述
直观地看,这就是让同一个样本以不同的概率划入到不同的子结点中去。

五、多变量决策树

如果我们把每个属性视为坐标空间中的一个坐标轴,则d个属性描述的样本就对应了d维空间中的一个数据点,对样本分类则意味着在这个坐标空间中寻找不同类样本之间的分类边界。

决策树所形成的分类边界有一个明显的特点:轴平行(axis-parallel),即它的分类边界由若干个与坐标轴平行的分段组成。

以表4.5中的西瓜数据3.0a为例,将它作为训练集可学得图4.10所示的决策树,这棵树所对应的分类边界如图4.11所示。
在这里插入图片描述
在这里插入图片描述
显然,分类边界的每一段都是与坐标轴平行的。这样的分类边界使得学习结果有较好的可解释性,因为每一段划分都直接对应了某个属性取值。但在学习任务的真实分类边界比较复杂时,必须使用很多段划分才能获得较好的近似,如下图所示,那么决策树会相当复杂,由于要进行大量的属性测试,预测时间开销会很大。
在这里插入图片描述
若能使用斜的划分边界,如图4.12中红色线段所示,则决策树模型将大为简化。
在这里插入图片描述
“多变量决策树”(multivariate decision tree):就是能实现这样的“斜划分”甚至更复杂划分的决策树。其非叶结点不再是仅对某个属性,而是对属性的 线性组合 进行测试,试图建立一个合适的线性分类器。例如对西瓜数据3.0a,我们可学得图4.13 这样的多变量决策树,其分类边界如图4.14所示。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/chengdong996/article/details/107185237