机器学习技法09: 决策树(Decision Tree)



在这里插入图片描述

上一节课介绍了AdaBoost(Adaptive Boosting),AdaBoost通过拔靴法从数据集中抽样,然后得到不同的假设函数 gg ,然后对这些假设函数线性组合,系数为 αi\alpha_{i}。这样,通过组合多条水平或者竖直的分类超平面可以得到复杂的分类超平面,从而实现很好的分类能力。本节课介绍有条件的集成学习算法——决策树(Decision Tree)。

9.1 Decision Tree Hypothesis

一个决策树的简单例子,如下:
在这里插入图片描述
决策树中有三个元素:节点,条件,树叶;分别对应图中的菱形框,箭头,圆圈。其中,条件用 qt(x)q_{t}(x) 表示,树叶用 gt(x)g_{t}(x) 表示。决策树的假设函数为 G(x)G(x) 。这个表达式不够直观,下面换一种表达式描述决策树:
在这里插入图片描述
这个表达式的思想是将决策树在第一个节点处分开,拆分成不同的分支,在该例中,C=3C = 3 ,即从第一个节点拆成了三个子树(分支)。 其中每个分支对应一个小的融合模型,其假设函数为 Gc(x)G_{c}(x)

决策树是一个很有用的模型,其描述了整个做决定的过程,这个过程与人类的决策过程有类似的地方。决策树的优点有三个,第一个是决策树的可解释性非常高。也正是这个原因,使得其在医药、商业等领域的应用非常广泛。其次,决策树简单且容易描述。第三点是决策树非常有效率,无论是训练还是推理过程。当然,决策树也有其缺点。第一个缺点是理论保证比较少,即在某些问题中,为什么做得好可能很难解释清楚。第二是对于初学者来说,问题建模之初选择参数比较复杂。第三个是决策树几乎没有单一的代表性算法。
在这里插入图片描述


习题1:
在这里插入图片描述


9.2 Decision Tree Algorithm

决策树算法的伪代码如下图所示:
在这里插入图片描述
其算法的流程为:

  • 判断是否达到终止条件,如果达到则返回基本的假设函数g(x)g(x);如果没有则执行else部分内容;
  • 首先,学习分支的划分标准 b(x)b(x)
  • 然后将数据集 DD 划分为 CC 部分,Dc={(xn,yn):b(xn)=c}D_c= \{(x_n,y_n) : b(x_n) = c \}
  • 根据不同的子数据集 DcD_{c} 求解子树的假设函数 GcG_{c}
  • 然后将这些假设函数进行融合,变为决策树的假设函数 G(x)G(x)

由上述伪代码可知,决策树算法的关键有四点:

  • 分支数量的确定;
  • 分支的划分标准;
  • 递归终止条件;
  • 基本假设函数的求解。

下面介绍一种常用的决策树算法,Classification and Regression Tree (C&RT)。该算法有两个简单的设定:分支数 C=2C=2,即二叉树(binary tree);每个分支最后的叶子数 gt(x)g_{t}(x) 为一个常数。按照最小化目标函数 EinE_{in} ,对于二分类或多分类问题,gt(x)g_{t}(x) 选取占比最多的一类 yny_n ;对于回归问题,gt(x)g_{t}(x) 对所有预测值 yny_n 取平均。
在这里插入图片描述
对于决策树的基本演算法流程,C&RT还有一些简单的设定。首先,C&RT分支个数 C=2C=2,一般采用decision stump划分数据。每次在一个维度上,只对一个特征(feature)将数据一分为二,左子树和右子树,分别代表不同的类别。然而,如何切割才能让数据划分得最好,即错误率最低?C&RT中使用纯净度(purifying)来选择最好的 decision stump。purifying的核心思想是每次切割都尽可能让左子树和右子树中同类样本占得比例最大或者都很接近(regression),这样的数据,使用常数进行预测,则错误率会最低。比如分类问题,如果左子树全是正样本,右子树全是负样本,那么它的纯净度就很大,说明该分支效果很好。分支条件 b(x)b(x) 的选择标准为:

在这里插入图片描述
选择最好的decision stump的关键有两个:一个是分支的纯净度(purifying)越大越好,此处使用不纯净度(impurity)表示,即impurity越小越好;另一个是左右分支纯净度所占的权重,权重大小由该分支的数据量决定,分支包含的样本个数越多,则所占权重越大,分支包含的样本个数越少,则所占权重越小。上式中,$|D_c \ with \ h| $ 表示分支 cc 所占的权重。分支条件 b(x)b(x) 类似于 error function,使用impurity代替purifying的也正是这个原因,选择最好的decision stump,最小化所有分支的不纯净度,使 b(x)b(x) 越小越好。不纯净度的函数表示形式为:
在这里插入图片描述
其对于回归和分类问题有不同的表示形式,但都与原来所学的输入误差 EinE_{in} 的表示形式类似。上式中,y\overline{y} 表示对应分支下所有预测值 yny_n 的平均值,yy^* 表示对应分支下所有预测值 yny_n 中占比例最大的类别。如果只考虑纯度最大的分支,其分类误差可以表示为,上图中右下角的公式;若果将所有分支的纯度都考虑在内,可以使用基尼系数(Gini index)表示误差,这样可以使得decision stump的分割更准确。一般来说,基尼系数表示的误差更适合处理分类问题,回归误差更适合处理回归问题。

上面已经介绍了C&RT算法的三个关键点,还剩C&RT的终止条件。其终止条件有两种情形:

  • 各个分支下的预测值yny_n 都属于同一类别,即不纯度为0,即该分支已经达到最佳的分类精度;
  • 某一特征下,所有的 xnx_n 都相同,无法再进行划分,即没有decision stump。

达到终止条件后,C&RT就变为完全生长树(fully-grown tree),每次一分为二,具有恒定的叶子(各分支最终的假设函数 gt(x)g_t(x))数,这些叶子是通过最小化不纯度产生的双分支。


习题2:
在这里插入图片描述


9.3 Decision Tree Heuristics in C&RT

在这里插入图片描述

经过推导,C&RT算法的伪代码如上图所示。其通过二叉树,最后返回一个常数,可以很轻易的处理分类、回归以及多分类问题。

最终得到的fully-grown tree,经过多次切分,可以使得 Ein=0E_{in} = 0 ,根据以前所学,可能会导致 VC-Dimention 非常大,从而无法控制算法的复杂度,导致过拟合。这在C&RT算法中,当输入数据差异很大或者存在噪声时,随着划分次数增加,数据量越来越少,某些分支很可能是过拟合的分支,也就是说很容易造成过拟合。其解决的方法是通过正则化来修剪决策树过拟合的分支。

衡量决策树算法复杂度的方法是衡量有多少个树叶。那么此时的目标就变为 EinE_{in} 要相对较低,同时树叶的数目还要少,这样就可以达到正则化,缓解过拟合的目的。
在这里插入图片描述

上式是一个熟悉的正则化表达式,设想,首先需要将所有树的 Ein(G)E_{in}(G) 和复杂度 Ω(G)\Omega(G) 都算出来,然后引入拉格朗日乘子 λ\lambda 控制正则化的程度。可以将其称为决策树修剪(prun)。但是很难通过递归的方法求解出所有可能的假设函数 GG ,通常的做法是使用一个由 C&RT算法计算得到的树,尝试移除一片叶子,然后比较去除叶子的决策树那个性能最好,即 Ein(G)E_{in}(G) 最小。比如得到一个有10片叶子的树,那么去除一个叶子之后,得到一个具有9片叶子的树;去除两个叶子之后,得到一个具有8片叶子的树,以此类推…这些树的假设函数使用 G(i)G^{(i)} 表示。其表达式如上图所示。此时得到这些去除不同数量叶子的树,可以组成一个假设空间,用假设空间里的这些假设函数,进行正则化。这样,就可以只使用一个完全长成树来做正则化,而不必找出所有的树进行正则化。以上就是C&RT算法选择一个具有正则化同时效果比较好的树的方法。还有一个参数 λ\lambda 需要计算,可以通过验证(validation)的方法进行求解。

下面介绍决策树的其它特性,在之前的介绍中,输入输出特征都是数字,但是在现实世界中所面临的问题不一定都是数字;那么对于不是数字的输入,比如多类特征(categorical features),决策树应该如何处理呢?对于非数字输入,其影响的是决策树的划分过程,可以使用决策子集(decision subset)的方法解决,即对不同类别特征进行是与否的划分。

在这里插入图片描述
此外,还有一种意外情况需要考虑,那就是某些样本中存在缺失的特征时,应该如何处理。一种常用的方法是surrogate branch,即寻找与该特征相似的替代特征。做法是在决策树训练的时候,找出与该特征相似的特征,如果替代特征与原特征切割的方式和结果类似,则表明二者是相似的,就把该替代特征存储起来。当预测时遇到特征缺失时,可以用替代特征判断和选择分支。
在这里插入图片描述


习题3:
在这里插入图片描述


9.4 Decision Tree in Action

通过一个简单的实例看一下C&RT算法的处理流程。

输入样本的分布为:
在这里插入图片描述
使用C&RT进行切分:
在这里插入图片描述

经过以上四步切分,每个分支的不纯净度接近为0,已经无法继续切分。此时表明已经满足了迭代终止条件,这时候就可以返回各叶子的假设函数 gt(x)g_t(x),构成子树,然后再整合为最终的完全成长树。
在这里插入图片描述
最终结果:
在这里插入图片描述

在该输入空间,C&RT和AdaBoost算法的分类结果如下:
在这里插入图片描述

可以看出C&RT切割之后,每次切割都是对剩余的输入空间进行切割;而AdaBoost每次切割都是对完整的输入空间进行切割。

对比一下更复杂的输入空间,C&RT和AdaBoost算法的情况:
在这里插入图片描述

可以看出C&RT算法更有效率。其特点主要有以下几点:
在这里插入图片描述

此外,还有许多其它决策树算法,比如C4.5,C5.0等,基本处理流程大同小异,只是在某些节点处理上稍有不同。


习题4:
在这里插入图片描述


Summary

本节课介绍了决策树的一种基本算法 C&RT,从其假设空间开始介绍,其不同的条件或者说不同的分支生成的树叶,决定了其有很多个假设函数 g(x)g(x) ,决策树通过对这些假设函数融合,组成更好的集成学习模型。其可以高效快速地对目标问题进行建模,同时还可以处理特征丢失的情况。
在这里插入图片描述


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章