1.1 基本概念
决策树(decision tree)是一类常见的机器学习方法,又称判定树。在分类任务中,通过一系列的“子决策”来最终确定样本所属类别。决策过程从上到下类似于树结构,例如判断是不是好瓜的例子:
决策过程中提出的每一个问题都是对样本某一个属性的“测试”,每个测试结果或是导出最终结论,或是导出进一步的判定问题,其考虑范围是在上次决策结果的限定范围之内。一般的,一颗决策树包含一个根节点、若干个内部结点和若干个叶子结点;叶子结点对应决策结果,其他每个结点对应于一个属性的测试。从根节点到每一个叶子结点的路径对应了一个判定测试序列。决策树学习的目的就是为了产生一颗泛化能力强的决策树,其基本流程遵循简单且直观的“分而治之”的策略。
决策树学习算法最著名的代表是ID3、C4.5和CART。有一些决策树学习算法可以进行“增量学习”,即在接受新的样本后可以对已经学习过的模型进行调整,代表性算法有ID4、ID5R、ITI等。
1.2 划分选择
决策树算法的一个重要部分就是如何选择出当前的最优划分属性(简单说就是如何确定当前根据那个属性划分数据集),划分的原则就是让划分之后的数据集当中的样本尽可能的属于同一类别,即希望结点的“纯度”(purity)越来越高。下面介绍几种如何选择最优划分属性的方法。
1.2.1 信息增益
先来介绍一下什么是信息熵(information entropy)。信息熵树度量样本集合纯度最常用的一种指标,假定当前样本集合D中第K类的样本所占比例为Pk,则D集合的信息熵定义为:
(计算信息熵时约定,若p = 0。则plog2|y| = 0;Ent(D)的最小值为0,最大值为log2|y|)
信息熵越小,表示样本集合的纯度越高。
假定当前根据属性a进行划分集合,属性a(离散值)有V个可能的取值,用a对样本集合D进行划分,则会产生V个分支结点,a = v的结点的样本集合计为Dv。因此我们得出信息增益的公式:
一般而言,信息增益越大,则意味着用属性a来进行划分所获得的纯度提升越大,因此,我们可以用信息增益来进行决策树的划分属性的选择。:
著名的ID3决策树学习算法就是采用系新增益来选择划分属性。
1.2.2 增益率
实际上,信息增益准则对可取数目较多的属性有所偏好(即如果属性的取值很多,那么该属性的信息增益就会偏大),为减少这种偏好可能带来的不利影响,著名的C4.5决策树算法使用“增益率”(gain ratio)来选择最优划分属性。增益率定义为:
IV(a)称为属性a的“固有值”(intrinsic value)。属性a可能的取值数目越多(即V越大),则IV(a)的值通常会越大,通过信息增益与属性a的固有值的比值,可以削减信息增益对可取值数目较多属性的偏好产生的不利影响。
但是呢,通过思考我们还会发现一个问题,如果属性a可取的值数目较少的时候,IV(a)通常就会偏小,从而导致,信息率Gain_ratio(D, a)就会偏大。所有增益率对可取值数目较少的属性有所偏好。
为解决这一问题,我们采取一个方案:先从候选划分属性中找出信息增益高于平均水平的属性,再从选择增益率最高的属性作为当前节点的最优划分属性。
1.2.3 基尼指数
“基尼指数”(Cini index)是CART决策树采用的选择最优划分属性的方法。CART是Classification and Regression Tree的简称,这是一种著名的决策树学习算法,分类和回归任务都可用。基尼值公式如下:
直观来说,基尼值Cini(D)反映了从数集D中随机抽取两个样本,其类别标记不一致的概率。因此,基尼值越小,数据集D的纯度越高。属性a的基尼指数定义为:
我们在候选属性集合A中选择那个使得划分后基尼指数最小的属性,作为最优划分属性,即:
1.3 剪枝处理
剪枝(pruning)是决策树学习算法处理“过拟合”问题的主要手段。决策树剪枝的基本策略有“预剪枝”(prepruning)、“后剪枝”(postpruning)。下面对于这两种剪枝处理方法分别进行介绍。
1.3.1 预剪枝(prepruning)
预剪枝是指在决策树构建过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化能力的提升,则停止划分,并将当前结点标记为叶子结点。下面介绍如何判断决策树泛化能力是否提升。
关于学习算法的性能评估方法有很多,本次讲解采用留出法(即,将数据集分为训练集合测试集)用测试集进行性能评估。
在划分之前,所有样例集中在根节点。若不进行划分,则将根节点作为叶子结点,其类别标记为样本集中数量最多党的类别,利用测试集对该决策树进行评估,得到一个评估结果score1,然后从根结点中用最优划分属性进行划分,划分后的字节点都作为叶子结点,并得到其所属类别,然后用测试集对划分后的决策树进行性能评估,得到一个评估结果score2,然后对比score1和score2,如果score2 > score1,则说明划分之后提高了决策树的泛化能力,则需要进行划分;如果score2 < score1,则说明划分之后降低了决策树的泛化能力,则不进行当前结点的划分,接着判断其他结点。依照上面的判别方法,来进行构建决策树。
1.3.2 后剪枝(postpruning)
后剪枝则是先从训练集生成一颗完整的决策树,然后自低向上地对非叶子结点极性考察,若将该结点对应的字树替换为叶子结点能提高决策树泛化性能提升,则将该子树替换为叶子结点。
判断是否应该对当前非叶子结点进行剪枝,判断过程可以参考上面预剪枝的过程,过程都是类似的,都是假设采用留出法,通过测试集对决策树进行性能评估,通过比较剪枝前后决策树的性能评估分数来决定是否应该进行剪枝。
1.4 连续与缺失值
1.4.1 连续值处理
到目前为止,我们仅仅讨论了离散型属性来生成决策树,现实任务中常常会遇到连续属性,下面讨论连续属性如何进行划分。由于连续属性的可能取值数目不再有限,因此,不能直接根据连续属性的可取值来对结点进行划分。为此,最简单的策略树采用二分法对连续属性进行处理,这正是C4.5决策树算法中采用的机制。
给定样本集D和连续属性a,假定a在D上出现了n个不同的取值,将这n个值从小到大进行排序,记为:
从这n个取值从选取n-1个值作为后选择划分点集合:
对于每一个后选择划分点,将样本分为小于该值,和大于该值的两个集合,然后计算每一个划分点划分之后的信息增益,
然后选择信息增益最大的那个划分点作为该连续属性a的最优划分点。
1.4.2 缺失值处理
现实任务中遇到的样本数据集当中可能会存在一些缺失值,如果全部将有缺失值的样本数据去除,则会极大的浪费数据信息。下面介绍如何在有缺失值的属性上进行划分。
给定训练集D和属性a,利用属性a上没有缺失值的样本集合来判断属性a的信息增益,不过还需要乘上属性a上非空的样本比例。具体描述引用书中的讲解(因为有些符号不好打出来)。
C4.5决策树算法使用了上述解决方案。
1.5 多变量决策树
若我们把每个属性视为坐标空间中的一个坐标轴,则d个属性描述的样本对应了d维空间上的一个数据点,样本分类就意味着在该多维空间中寻找到不同类别样本之间的分类边界。决策树所形成的边界都是轴平衡的边界,即分类边界有若干个与坐标轴平行的分段组成。如下图:
而多变量决策树采用的是斜的划分边界,在此类决策树中,非叶子结点不再是仅仅对某个属性,而是对属性的线性组合进行测试;与传统的“单变量决策树”不同,在多变量决策树的学习过程中,不是为每个非叶子结点寻找一个最优划分属性,而是试图建立一个合适的线性分类器。如下图所示: