决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”(divide-and-conquer)策略。
1.基本流程
决策树是基于树结构来进行决策的,这恰是人类在面临决策问题时一种很自然的处理机制.例如,我们要对“这是好瓜吗?”这样的问题进行决策时,通常会进行一系列的判断或“子决策”:我们先看“它是什么颜色?”,如果是“青绿色”,则我们再看“它的根蒂是什么形态?”,如果是“蜷缩”,我们再判断“它敲起来是什么声音?”,最后,我们得出最终决策:这是个好瓜.这个决策过程如下图所示。
下图是决策树学习的基本算法。在决策树基本算法中,有三种情形会导致递归返回:(1)当前结点包含的样本全属于同一类别,无需划分。(2)当前属性值为空,或是所有样本在所有属性上取值相同,无法划分。(3)当前结点包含的样本集合为空,不能划分。
2.划分选择
从决策树基本算法可以看出,决策树学习的关键是第8行,即如何选择最优划分属性。一般而言,随着划分过程不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。
2.1信息增益
“信息熵”:是度量样本集合纯度最常用的一种指标。假设当前样本集合D中的第k类样本所占的比例为(k = 1,2,...,),则D的信息熵定义为(公式1)。Ent(D)的值越小,则D的纯度越高。
“信息增益”:假定离散属性 a有V个可能的取值,若使用a来对样本集D进行划分,则会产生V个分支结点,其中第u个分支结点包含了D中所有在属性 a上取值为的样本,记为.我们可根据式(4.1)计算出 的信息熵再考虑到不同的分支结点所包含的样本数不同,给分支结点赋予权重,即样本数越多的分支结点的影响越大,于是可计算出用属性a对样本集 D进行划分所获得的“信息增益”,(公式2)。一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的“纯度提升”越大。
下面举例说明。下表为西瓜数据集,包含17个训练样例,用来学习一棵能预测没剖开的是不是好瓜的决策树。显然,=2(一共是两类样本,即“好瓜”和“坏瓜”).在决策树学习开始时,根结点包含 D中的所有样例,其中正例占p1=8/17,反例占p2=9/17.于是,根据公式1可计算出根结点的信息熵为0.998。
然后,我们要计算出当前属性集合{色泽,根蒂,敲声,纹理,脐部,触感}中每个属性的信息增益。以属性“色泽”为例,它有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。 根据公式1可计算出用“色泽”划分之后所获得的3个分支结点的信息熵。
此时,再根据公式2可计算属性“色泽”的信息增益:
显然,属性“纹理”的信息增益最大,于是它被选为划分属性。下图给出了基于“纹理”对根结点进行划分的结果,各分支结点所包含的样例子集显示在结点中。
然后,决策树学习算法将对每个分支结点做进一步划分。(这里,“纹理”不再作为候选划分属性)以图4.3中第一个分支结点(“纹理=清晰”)为例,该结点包含的样例集合 D1中有编号为 {1,2,3,4,5,6,8,10,15}的9个样例,可用属性集合为{色泽,根蒂,敲声,脐部触感}。基于D1计算出各属性的信息增益:Gain(D1,色泽)=0.043 Gain(D1,根蒂)=0.458 Gain(D1,敲声)=0.331 Gain(D1,脐部)= 0.458 Gain(D1,触感)= 0.458。“根蒂”、“脐部”、“触感”3个属性均取得了最大的信息增益,可任选其中之一作为划分属性。类似的,对每个分支结点进行上述操作,最终得到的决策树如图所示。
2.2增益率
实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的C4.5决策树算法不直接使用信息增益,而是使用“增益率”来选择最优划分属性。增益率定义为,其中 称为属性a的“固有值”。属性a的可能取值数目越多(即V越大),则IV(a)的值通常会更大。
需注意的是,增益率准则对可取值数目较少的属性有所偏好,因此,C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式,先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
2.3基尼指数
CART决策树使用“基尼指数”来选择划分属性。数据集D的纯度可用基尼值来度量:
直观来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率.因此,Gini(D)越小,则数据集 D的纯度越高。属性a的基尼指数定义为
于是,我们在候选属性集合A中,选择那个使得划分后基尼指数最小的属性作为最优划分属性,即
3.剪枝处理
剪枝是决策树学习算法对付“过拟合”的主要手段,在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学得“太好”了,以致于把训练集自身的一些特点当作所有数据都具有的一般性质而导致过拟合。因此,可通过主动去掉一些分支来降低过拟合的风险。
决策树剪枝的基本策略有“预剪枝”(prepruning)和“后剪枝”(post-pruning)。预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;后剪枝则是先从训练集生成一棵完整的决策树然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。
如何判断决策树泛化性能是否提升呢?本节假定采用留出法,即预留一部分数据用作“验证集”以进行性能评估。例如对表4.1的西瓜数据集2.0,我们将其随机划分为两部分,如表 4.2 所示,编号为{1,2,3,6,7,10,14,15,16,17}的样例组成训练集,编号为{4,5,8,9,11,12,13}的样例组成验证集。
3.1预剪枝
未剪枝决策树:
预剪枝决策树:
可以看出,预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销,但另一方面,有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高:预剪枝基于“贪心”本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险。
3.2后剪枝
可以看出,后剪枝决策树通常比预剪枝决策树保留了更多的分支。一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。