基本流程
决策树的功能和结构:一颗决策树包含一个根结点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其它每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样片全集。
决策树学习的目的:为了产生一棵泛化能力强,即处理未见示例能力强的决策树。
决策树的生成是一个递归过程,但有递归就必定有导致递归返回的情况,要不然递归就会一直无限下去。
(1)当前结点包含的样本全属于同一类别,无需划分;
(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;
(3)当前结点包含的样本集合为空,不能划分。
在第(2)种情形下,我们把当前结点标记为叶结点,并将该类别设定为该结点所含样本最多的类别。
在第(3)种情形下,同样把当前结点标记为叶结点,但将其类别设定为与其父节点所包含样本最多的类别。
划分选择
由图4.2可看出,决策树学习的关键是第8行,即如何选择最优划分属性。随着划分过程的不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高。
信息增益
“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标。假定当前样本集合 中第 类样本所占的比例为 ,则 的信息熵定义为:
的值越小,则 的纯度越高。
假定离散属性 有 个可能的取值 ,则使用 来对样本集 进行划分,就会产生 个分支结点,其中第 个分支结点包含了 中所有在属性 上取值为 的样本,记为 。我们可以计算出 的信息熵为 ,考虑到不同的分支结点所包含的样本数不同,给各个分支结点赋予权重 ,于是算出用属性 对样本 进行划分所获得的“信息增益”(information gain):
信息增益越大,则意味着使用属性 来进行划分所获得的“纯度提升”越大。因此,我们用信息增益来进行决策树的划分属性选择,即图4.2算法第8行选择属性 。
增益率
信息增益准则对可取值数目较多的属性有所偏好,为了减少这种偏好可能带来的不利影响,使用“增益率”(gain ratio)来选择最优划分属性。其定义为:
增益率准则对可取值数目较少的属性有所偏好,故在使用增益率准则时,想从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
尼基指数
CART决策树,Classification and Regression Tree,是一种著名的决策树学习算法,分类和回归任务都可用。它就使用“尼基指数”(Gini index)来选择划分属性。数据集 的纯度用尼基值来度量:
反映了数据集 中随机抽取两个样本,其类别标记不一致的概率。因此, 越小,则数据集 的纯度越高。
属性 的尼基指数定义为
我们在候选属性 中,选择尼基指数最小的属性作为最优划分属性,即 。
剪枝处理
剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段。决策树剪枝的基本策略有“预剪枝”(prepruning)和”后剪枝”(post-pruning)。预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;后剪枝是先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。
判断决策树泛化性能提升的方法有很多(留出法、自助法等),这里使用留出法讨论。对西瓜数据集随即划分成下图的两个部分:
预剪枝
基于信息增益准则,如果对表4.2的数据集生成决策树,如下图所示:
预剪枝处理的决策树如下图:
后剪枝
基于表4.2的数据我们得到图4.5的决策树,用验证集验证可知该决策树的进度为
。后剪枝需要从低往上,一个结点一个结点验证。得到的决策树如下
其验证精度为
。
预剪枝与后剪枝比较:后剪枝决策树通常比预剪枝决策树保留了更多的分支,所以后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。
但后剪枝决策树需要对每个非叶结点逐一进行考察,因此其训练时间开销比未剪枝和预剪枝决策树都要大得多。
连续与缺失值
连续值处理
在现实学习任务中常会遇到连续属性(例如,形容一种特性的程度),所以有必要讨论如何在决策树学习中使用连续属性。二分法(bi-partition)是对连续属性进行处理的最简单策略,是一种连续属性离散化技术。
给定样本集
和连续属性
,假定
在
上出现了
个不同的取值,将这些值从小到大进行排序,记为
。然后基于划分点
可以将
分为子集
(属性
上取值不大于
的样本),和
(属性
上取值大于
的样本)。
由于对于任意相邻的属性取值
和
来说,
在区间
中取任意值所产生的划分结果相同。因此,对于连续属性
,包含
个元素的候选划分点集合
缺失处理
现实任务中常常会遇到不完整的样本,即样本的某些属性值缺失。如果我们放弃这些不完整的样本,无疑是对数据信息的极大的浪费。下表是含有不完整样本的西瓜数据集
对此,我们需要解决两个问题:(1)如何在属性值缺失的情况下进行划分属性选择?(2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
给定训练集
和属性
,令
表示
中在属性
上没有缺失值的样本子集。
对于问题(1),我们仅可根据
来判断属性
的优劣。假定属性
有
个可取值
,令
表示
在属性
上取值为
的样本子集;
表示
中属于第
类
的样本子集。于是有,
,它表示
的所有并集;和
,它表示
的所有并集。
假定我们为每个样本
赋予一个权重
,并定义
根据上述定义,可将信息增益的计算式(4.2)推广为
对于问题(2),若样本 在划分属性 上的取值已知,则将 划入与其取值对应的子结点,且样本权值在子结点中保持为 ;若样本 在划分属性 上的取值未知,则将 同时划入所有子结点,且样本权值在与属性值 对应的子结点中调整为 ,这相当于让同一个样本以不同的概率划入到不同的子结点中去。
多变量决策树
若把每个属性是为坐标空间中的一个坐标轴,则d个属性对应d维空间中的一个数据点。决策树所形成的的分类边界有一个明显的特点:轴平行(axis-parallel),即它的分类边界由若干个与坐标轴平行的分段组成。
若是在多变量情况下,决策树会相当复杂,由于要进行大量的属性测试,预测时间开销会很大。但若能使用斜的划分边界,则决策树模型将大为简化。
“多变量决策树”(multivariate decision tree)就是能实现这样的“斜划分”甚至更复杂划分的决策树。
以实现斜划分的多变量决策树为例,在此类决策树中,非叶结点不再是仅对某个属性,而是对属性的线性组合进行测试;使得每个非叶结点是一个形如
的线性分类器,其中
是属性
的权重,
和
可在该结点所含的样本集和属性集上学得。