大纲
上节课我们主要介绍了Adaptive Boosting。AdaBoost演算法通过调整每笔资料的权重,得到不同的hypotheses,然后将不同的hypothesis乘以不同的系数α进行线性组合。这种演算法的优点是,即使底层的演算法g不是特别好(只要比乱选好点),经过多次迭代后算法模型会越来越好,起到了boost提升的效果。本节课将在此基础上介绍一种新的aggregation算法:决策树(Decision Tree)。
Decision Tree Hypothesis
1 What We Have Done
aggregation type有三种:uniform,non-uniform,conditional。它有两种情况,一种是所有的g是已知的,即blending。对应的三种类型分别是voting/averaging,linear和stacking。另外一种情况是所有g未知,只能通过手上的资料重构g,即learning。其中uniform和non-uniform分别对应的是Bagging和AdaBoost算法,而conditional对应的就是我们本节课将要介绍的Decision Tree算法。
2 Decision Tree for Watching MOOC Lectures
决策树(Decision Tree)模型是一种传统的算法,它的处理方式与人类思维十分相似。如上图右边所示
把这种树状结构对应到一个hypothesis G(x)中,G(x)的表达式为:
G(x)由许多 gt(x) 组成,即aggregation的做法。每个 gt(x) 就代表上图中的蓝色圆圈(树的叶子)。这里的 gt(x) 是常数,我们把这些 gt(x) 称为base hypothesis。
qt(x) 表示每个 gt(x) 成立的条件,代表上图中橘色箭头的部分。不同的 gt(x) 对应于不同的 qt(x) ,即从树的根部到顶端叶子的路径不同。
3 Recursive View of Decision Tree
我们还可以从另外一个角度来看待决策树,从递归的角度来看。们可以利用条件分支的思想,将整体
G(x)
分成若干个
Gc(x)
,也就是把整个大树分成若干个小树,如下所示:
其中
G(x)是一个完整的树假设
b(x)是分支准则
G_c(x)是在第c个分支上的子树假设
4 Disclaimers about Decision Tree
决策树算法的优点
可解释性强
简单
训练和预测都比较高效
决策树的缺点
缺少足够的理论支持
如何选择合适的树结构对初学者来说比较困惑
决策树代表性的演算法比较少
Decision Tree Algorithm
1 A Basic Decision Tree Algorithm
首先我们将decision tree写成递归形式
我们把决策树的学习算法分成四个步骤
学习设定划分不同分支的标准和条件
接着将整体数据集D根据分支个数C和条件,划为不同分支下的子集 Dc ;
然后对每个分支下的 Dc 进行训练,得到相应的机器学习模型 Gc ;
最后将所有分支下的 Gc 合并到一起,组成G(x)。
但值得注意的是,这种递归的形式需要终止条件,否则程序将一直进行下去。当满足递归的终止条件之后,将会返回基本的hypothesis gt(x) 。
所以,决策树的基本演算法包含了四个选择:
分支个数
分支条件
终止条件
基本算法
不同的选择可以产生不同的决策树算法
2 Classification and Regression Tree (C&RT)
下面我们来介绍一种常用的决策树模型算法,叫做Classification and Regression Tree(C&RT)。
- C&RT一般都将分支个数设为2.
- C&RT每个分支最后的 gt(x) (数的叶子)是一个常数。常数的确定是根据最小化 Ein 的目标,一般对于回归问题, gt(x) 则取所有 yn 的平均值,对于分类问题, gt(x) 取所占比例最多的那一类y_n
3 Branching in C&RT: Purifying
首先,C&RT分支个数C=2,一般采用上节课介绍过的decision stump的方法进行数据切割。也就是每次在一个维度上,只对一个特征feature将数据一分为二,左子树和右子树,分别代表不同的类别。
C&RT中使用纯净度purifying这个概念来选择最好的decision stump。purifying的核心思想就是每次切割都尽可能让左子树和右子树中同类样本占得比例最大或者yn都很接近(regression),即错误率最小。比如说classifiacation问题中,如果左子树全是正样本,右子树全是负样本,那么它的纯净度就很大,说明该分支效果很好。
4 Impurity Functions
我们这里采用purifying相反的概念impurity,则impurity越小越好;另外一个是左右分支纯净度所占的权重,权重大小由该分支的数据量决定,分支包含的样本个数越多,则所占权重越大,分支包含的样本个数越少,则所占权重越小。上式中的 |Dc with h| 代表了分支c所占的权重。这里b(x)类似于error function(这也是为什么使用impurity代替purifying的原因),选择最好的decision stump,让所有分支的不纯度最小化,使b(x)越小越好。
不纯度Impurity如何用函数的形式量化?一种简单的方法就是类比于Ein,看预测值与真实值的误差是多少。
对于回归问题:
对于分类问题
这里 y∗= majority of yn
另外对于分类问题,我们还可以用GIni系数来表示不纯度
对于决策树C&RT算法,通常来说,上面介绍的各种impurity functions中,Gini index更适合求解classification问题,而regression error更适合求解regression问题。
5 Termination in C&RT
C&RT算法迭代终止条件有两种情况,第一种情况是当前各个分支下包含的所有样本 yn 都是同类的,即不纯度impurity为0,表示该分支已经达到了最佳分类程度。第二种情况是该特征下所有的 xn 相同,无法对其进行区分,表示没有decision stumps。遇到这两种情况,C&RT算法就会停止迭代。
总结一下:C&RT算法遇到迭代终止条件后就成为完全长成树(fully-grown tree)。它每次分支为二,是二叉树结构,采用purify来选择最佳的decision stump来划分,最终得到的叶子( gt(x) )是常数。
6 Basic C&RT Algorithm
可以看到C&RT Algorithm 很容易求解回归,二分类,多分类的问题
Decision Tree Heuristics in C&RT
1 Regularization by Pruning
如果我们训练集中所有的 xn 都是不同的,我们通过构建一颗fully-growth tree,来将样本完美分类,即 Ein(G)=0 。但这样会导致过拟合,视为底层侧的树是通过少量的样本构造的。为了避免overfit,我们需要在C&RT算法中引入正则化,来控制整个模型的复杂度。
考虑到避免模型过于复杂的方法是减少叶子 (gt(x)) 的数量,那么可以令regularizer就为决策树中叶子的总数,记为 Ω(G) 。正则化的目的是尽可能减少 Ω(G) 的值。这样,regularized decision tree的形式就可以表示成:
那么如何确定修剪多少叶子,修剪哪些叶子呢?假设由C&RT算法得到一棵完全长成树(fully-grown tree),总共10片叶子。首先分别减去其中一片叶子,剩下9片,将这10种情况比较,取E_{in}最小的那个模型;然后再从9片叶子的模型中分别减去一片,剩下8片,将这9种情况比较,取E_{in}最小的那个模型。以此类推,继续修建叶子。这样,最终得到包含不同叶子的几种模型,将这几个使用regularized decision tree的error function来进行选择,确定包含几片叶子的模型误差最小,就选择该模型。另外,参数λ可以通过validation来确定最佳值。
2 Branching on Categorical Features
我们一直讨论决策树上的叶子(features)都是numerical features,而实际应用中,决策树的特征值可能不是数字量,而是类别(categorical features)。对于numerical features,我们直接使用decision stump进行数值切割;而对于categorical features,我们仍然可以使用decision subset,对不同类别进行“左”和“右”,即是与不是(0和1)的划分。numerical features和categorical features的具体区别如下图所示:
3 Missing Features by Surrogate Branch
在决策树中预测中,还会遇到一种问题,就是当某些特征缺失的时候,没有办法进行切割和分支选择。一种常用的方法就是surrogate branch,即寻找与该特征相似的替代feature。如何确定是相似的feature呢?做法是在决策树训练的时候,找出与该特征相似的feature,如果替代的feature与原feature切割的方式和结果是类似的,那么就表明二者是相似的,就把该替代的feature也存储下来。当预测时遇到原feature缺失的情况,就用替代feature进行分支判断和选择。