对决策树的总体认识:
从逻辑角度:一堆if else 语句的组合;
从几何角度:根据某种准则划分特征空间;
最终目的:将样本越分越“纯”。
4.1 基本流程
决策树(decision tree)是一类常见的机器学习方法。顾名思义,决策树是基于树结构来进行决策的。决策过程中提出的每个判定问题都是对某个属性的“测试”,每个测试的结果或是导出最终结论,或是导出进一步的判定问题,其考虑范围是在上次决策结果的限定范围之内。
一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集。从根结点到每个叶结点的路径对应了一个判定测试序列。决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”(divide-and-conquer)策略,如图所示。
显然,决策树的生成是一个递归过程。在决策树基本算法中,有三种情形会导致递归返回:(1)当前结点包含的样本全属于同一类别,无需划分;(样本标记相同)
(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;(样本属性相同或为空集)
(3)当前结点包含的样本集合为空,不能划分。(样本集合为空集)
在第(2)种情形下,我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别;在第(3)种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别。注意这两种情形的处理实质不同:情形(2)是在利用当前结点的后验分布,而情形(3)则是把父结点的样本分布作为当前结点的先验分布。
4.2 划分选择
ID3决策树:以信息增益为准则来选择划分属性的决策树。
C4.5决策树:并未完全使用“增益率”代替“信息增益”,而是采用一种启发式的方法:先选出信息增益高于平均水平的属性,然后再从中选择增益率最高的。
CART决策树:选择基尼指数最小的属性作为最优划分属性。
ID3决策树和C4.5决策树使用信息熵和条件熵的定义方法,CART决策树使用的是基尼值和基尼指数的定义方法。
一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高。
4.2.1 信息增益
“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标。
信息熵定义:
信息熵衡量的是信息的不确定性大小,信息熵的值越小,不确定性越小,所以D的纯度越高。
信息增益(information gain)定义:
一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的“纯度提升”越大。因此,我们可用信息增益来进行决策树的划分属性选择。
公式理解:划分前的信息熵减去划分后的条件熵,信息增益的本质是信息熵的减小量,即不确定性的减小量,也就是由于划分所获得的确定性信息。
缺点:信息增益准则对可取值数目较多的属性有所偏好。
4.2.2 增益率
为了克服信息增益准则的缺点,引入增益率。
增益率定义:
其中
称为属性a的“固有值”(intrinsic value)。属性a的可能取值数目越多(即V越大),则IV(a)的值通常会越大。
需注意的是,增益率准则对可取值数目较少的属性有所偏好,因此,C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
4.2.3 基尼指数
CART决策树使用“基尼指数”(Gini index)来选择划分属性。
数据集D的纯度可用基尼值来度量:
直观来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此,Gini(D)越小,则数据集D的纯度越高。
属性a的基尼指数定义为
于是,我们在候选属性集合A中,选择那个使得划分后基尼指数最小的属性作为最优划分属性,即
4.3 剪枝处理
剪枝过程中需评估剪枝前后决策树的优劣。
剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段,是根本缓解过拟合的办法。因此,通过主动去掉一些分支来降低过拟合的风险。
决策树剪枝的基本策略有“预剪枝”(prepruning)和“后剪枝”(post-pruning)。
预剪枝:
指在决策树的生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;
预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策时的训练时间开销和测试时间开销,但另一方面,有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高;预剪枝基于“贪心”本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险。
后剪枝:
先从训练集生成一棵完成的决策树,然后自低向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能的提升,则将该子树替换为叶结点。
后剪枝决策树通常比预剪枝决策树保留了更多的分支。一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。
4.4 连续与缺失值
连续值处理:
最简单的策略是采用二分法(bi-partition)对连续属性进行处理。
给定样本集D和连续属性a,假定a在D上出现了n个不同的取值,将这些值从小到大排序,记为{a1,a2,...,an}。基于划分点t可将D分为子集和,其中包含那些属性a上取值不大于t的样本,而则包含那些在属性a上取值大于t的样本。
需注意的是,与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。
缺失值处理:
基本思路:样本赋权,权重划分。
(1)如何在属性缺失的情况下进行划分属性选择?
用在属性a上没有缺失值的样本子集来判断属性a的优劣。
(2)若样本x在划分属性a上的取值已知,则将x划入与其取值对应的子结点,且样本权值在子结点中保持为wx,若样本x在划分属性a上的取值未知,则将x同时划入所有子结点,且样本权值在与属性值av对应的子结点中调整,直观地看,这就是让同一个样本以不同的概率划入到不同的子结点中去。
有值的样本进入各个属性的划分结果这个后验当作没有值的样本应该进入它的先验。
4.5 多变量决策树
引入:对样本分类则意味着在这个坐标空间中寻找不同类样本之间的分类边界。决策树所形成的分类边界有一个明显的特点:轴平行(axis-parallel),即他的分类边界由若干个与坐标轴平行的分段组成。这样的分类边界使得学习结果有较好的可解释性,因为每一段划分都直接对应了某个属性的取值,但在学习任务的真实分类边界比较复杂时,必须使用很多段划分才能获得较好的近似,此时的决策树会相当复杂,由于要进行大量的属性测试,预测时间开销会很大。
多变量决策树(multivariate decision tree)就是能实现“斜划分”甚至更复杂划分的决策树。与传统的单变量决策树(univariate decision tree)不同,在多变量决策树的学习过程中,不是为每个非叶结点寻找一个最优划分属性,而是试图建立一个合适的线性分类器。
参考文献: