4.1基本流程
决策树的结构
一个决策树包含一个根结点、若干个内部结点和若干个叶结点;
叶结点对应于决策结果,其他每个结点则对应于一个属性测试;
每个结点包含的样本集合根据属性测试的结果被划分到子结点中;
根结点包含样本全集,从根结点到每个叶结点的路径对应了一个判定测试序列。
仅有一层划分的决策树,也称“决策树桩”(decision stump);决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树
决策树学习基本算法
显然,决策树的生成是一个递归过程。在决策树的基本算法中,有三种情形会导致递归返回:
(1)当前结点包含的样本全部属于同一类,无需划分
(2)当前属性集为空,或所有样本在所有属性上取值相同,无法划分
(3)当前结点包含的样本为空,不能划分
对各种情形的处理方式:
情形(2):属性集为空或所有样本属性上取值相同
把当前结点标记为叶结点,其类别设定为该结点样本集合中最多的类别;
此为利用当前结点的后验分布
情形(3):样本为空
把当前结点标记为叶结点,其类别设定为父结点样本集合中最多的类别
把父结点的样本分布作为当前结点的先验分布
4.2划分选择
决策树学习的关键在于如何选择最优划分属性也就是第8步。一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高。(也即信息熵越低),下面举出常见的几种重要指标:
4.2.1信息增益
“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标,假定当前样本集合D中第k类样本所占比例为Pk(k=1,2,...,|y|),则D的信息熵定义为:
值越小,纯度越高。也可用于算某个属性某个类别的信息熵,比如色泽属性的青绿类别的信息熵,计算信息熵时约定:
离散属性a有v个可能的取值
用a来进行划分,则会产生v个分支结点,其中第v个分支结点包含了D中所有在属性a上取值为av的样本,记为Dv 。a可以理解为属性,Dv可以理解为属性中的类别。Gain(D,a)可以理解为样本中的a属性的信息增益,其中需要计算a的各个类别的信息熵。 则可计算出用属性a对样本集D进行划分所获得的“信息增益”:
Dv/D的绝对值为分支结点权重,样本数越多的分支结点的影响越大,一般而言,信息增益越大,则意味着使用属性 a 来进行划分所获得的“纯度提升”越大。ID3决策树学习算法[Quinlan, 1986]就是以信息增益为准则来选择划分属性。
信息增益示例:
接下来,分别将清晰、稍糊、模糊所对应的数据集合定成 D1 、D2 、D3,再次计算信息增益率以寻求向下的节点:
Gain(D1 ,色泽)=0.043; Gain(D1 ,根蒂)=0.458;
Gain(D1 ,敲声) =0.331; Gain(D1 ,胳部)=0.458;
Gain(D1,触感)=0.458.
根蒂” 、 “脐部” 、 “ 触感 ” 3个属性均取得了最大的信息增益,可任选其中之一作为划分属性.类似的,对每个分支结点进行上述操作,最终得到的 决策树如下图所示:
4.2.2增益率
若把“编号”也作为一个候选划分属性,则其信息增益一般远大于其他属性。显然,这样的决策树不具有泛化能力,无法对新样本进行有效预测,信息增益对可取值数目较多的属性有所偏好。著名的C4.5决策树算法不直接采用信息增益而是采用增益率来选择最优划分属性。
增益率定义:
其中:
称为属性 a 的“固有值” [Quinlan, 1993] ,属性 a 的可能取值数目越多(即 V 越大),则 IV(a) 的值通常就越大。
但是也有缺陷:增益率准则对可取值数目较少的属性有所偏好
C4.5 [Quinlan, 1993]使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选取增益率最高的
4.2.3基尼指数
也是一种划分属性的方法。数据集D的纯度可用基尼值来度量,定义如下:
基尼值反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率,因此基尼值越小,数据集D的纯度越高。基尼值对应信息熵。下面的基尼指数对应于信息增益:
应选择那个使划分后基尼指数最小的属性作为最优划分属性,即:
CART [Breiman et al., 1984]就是采用“基尼指数”来选择划分属性
4.3剪枝处理
剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段,决策树分支过多,结点划分过程不断重复,以致于把训练集自身的一些特点当做所有数据都具有的一般性质而导致过拟合,“预剪枝”prepruning和“后剪枝”postpruning是决策树剪枝的两种基本策略。
预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;
后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能的提升,则将该子树替换为叶结点。
判别决策树泛化性能提升:留出法:预留一部分数据用作“验证集”以进行性能评估根据上节中的一些准则选择属性划分。
优缺点评价:
预剪枝根据划分前后的对验证集预测结果进行评判是否继续划分,降低了过拟合的风险,显著减少了决策树的训练时间开销和测试时间开销,但有些分支的当前划分虽不能提升泛化性能、甚至导致下降,但在其基础上进行后续划分有可能导致性能显著提高,预剪枝基于“贪心”本质禁止这些分支展开,带来了欠拟合风险。
后剪枝从训练集生成一颗完整的决策树,自底向上决定是否剪枝,后剪枝决策树通常比预剪枝决策树保留了更多的分支,一般泛化能力优于预剪枝决策树,欠拟合风险小,但是后剪枝决策树在生成完全决策树之后进行,并且要自底向上对树中所有非叶结点逐一考察,训练时间开销比预剪枝和未剪枝都要大很多。
4.4 连续与缺失值处理
连续值处理
到目前为止讨论的一直都是基于离散属性来生成决策树,现实中也会碰到连续属性,有必要讨论一下。其核心思想是连续属性离散化。
实例演示:
缺失值处理
如果我们使用的数据存在缺失即属性存在缺失,当使用这些数据进行训练使用时候,不仅不能训练到好的泛化性能的模型反而会造成数据的极大浪费。这里要讨论的问题是:
1、如何在属性缺失的情况下进行划分属性选择?
2、给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
下面是对第一个问题的解释:
基于以上定义,可得信息增益的计算式:
其中,
下面是对第二个问题的解释:
实例演示:
4.5 多变量决策树
若将每个属性视为坐标空间中的一个坐标轴,则d个属性描述的样本就对应了d维空间中的一个数据点,对样本分类则意味着在这个坐标空间中寻找不同类样本的分类边界。
决策树形成的分类边界由若干个与坐标轴平行的分段组成,这些分类边界使得学习结果有较好的可解释性,因为每一段划分都对应了一个属性的取值的划分。
但是,像这样的单变量划分的话,当学习任务的真实分类边界比较复杂时,就需要有很多的分段才能有较好的近似,此时的决策树会相当复杂,需进行大量属性测试,时间开销很大。我们想到若能使用斜的划分边界,则决策树模型将大为简化。多变量决策树正是适合能实现这样的“斜划分”甚至更复杂划分的决策树。
我们看看单变量决策树和多变量决策树的区别:
成熟的软件包:
ID3,C4.5,C5.0 http://www.rulequest.com/Personal/
J48 http://www.cs.waikato.ac.nz/ml/weka/
4.6阅读材料
决策树学习算法最著名的代表是ID3 , C4.5 , CARTC4.5Rule是一个将C4.5转化为符号规则的算法,最终规则集的泛化性能甚至可能优于原决策树。
除了信息增益,增益率,基尼指数之外,还有许多其他准则用于决策树划分选择,要注意的是,虽然这些准则对决策树的尺寸有较大影响,但对泛化性能影响很有限
本质上,各种特征选择方法君可用于决策树的划分属性选择(见第11章)
信息增益和基尼指数仅在2%的情况下会有所不同
剪枝方法和程度对决策树的泛化性能的影响相当显著,在数据带有噪声时通过剪枝甚至可将决策树的泛化性能提高25%
多变量决策树算法主要有OC1和[Brodley and Utgoff,1995]提出的一系列算法
OC1先贪心地寻找每个属性的最优权值,在局部优化的基础上再对分类边界进行随机扰动以试图找到更好的边界
[Brodley and Utgoff,1995]直接引入线性分类器学习的最小二乘法
一些多变量决策树算法在决策树的叶结点上嵌入神经网络,以结合这两种学习机制的优势(如感知机树)
一些决策树学习算法可进行“增量学习”(incremental learning),主要机制是通过调整分支路径上的划分属性次序来对树进行部分重构,代表性算法有ID4,ID5R,ITI。增量学习可以有效降低每次接收到新样本后的训练时间开销,但多步增量学习后的模型会与基于全部数据训练而得的模型有较大差别