9 Decision Tree
9.1 Decision Tree Hypothesis
本节主要讲述了决策树的两种解释,一种是决策树是由叶子节点和路径组成的,当选择叶子节点对应的路径时采用对应的叶子节点结果;另一种观点是由分叉的树递归组成,当选择某一分支时将采用分支对应的子树的演算法结果。
决策树的优点在于可解释性强,高效。缺点是理论保证不足,并且算法多样。
9.2 Decision Tree Algoithm
决策树主要有4个关键部分:
(1)分支分成几支?
(2)该怎么分支?
(3)什么时候停止?
(4)最终回传的叶子节点的base hypothesis是什么?
以下介绍CART的4个关键:
(1)分成2支。
(2)用decision stump分支。
(3)通过加权不纯度衡量什么时候停止,其中权重是所分类数据大小:
当值域是连续时,不纯度为方差;当值域是离散时,不纯度为基尼系数。有时候可能会使用分类错误。
(4)最终回传一个常数。
9.3 Decision Tree Heuristics in CART
9.3.1 多分类
需要改变的地方有两处,第一是回传的时候的值,第二是不纯度的计算。
9.3.2 过拟合
可以每次在剩余的叶子中减掉一个可以得到更好的
Ein
的叶子,直到剪到只有一个叶子,最后通过下式来选择:
9.3.3 类别特征
如果遇到类别特征,可以使用decision subset来代替decision stump:
其中 S 是部分类别的集合。
9.3.4 数值缺失
可以考虑填充缺失数据,或者在建立树时同时选择替代特征,替代特征的分类结果必须要和原特征类似。
9.4 Decision Tree in Action
展示了决策树的判断过程。
10 Random Forest
10.1 Random Forest Algorithm
随机森林就是将bagging和决策树结合起来,每次bagging训练一个决策树,最后投票。另外它在训练决策树时通过一个转换矩阵来线性组合出新的特征以供训练。
10.2 Out of Bag Estimate
本节讲述了评估随机森林的
另外可以知道,当数据量足够大,抽取的数目和样本集大小相同时,没被选取到的样本大约占总样本的三分之一。
这个方法叫Out of Bag,简称OOB。
10.3 Feature Selection
本节讲述了在随机森林中如何评估特征的重要性。特征重要性的指标是:
其中, performance(D) 代表原来的数据集的表现,而 performance(D′) 代表第 i 个特征的数据经过重新排列之后的表现。
具体的来说,当我们在验证第
10.4 Random Forest in Action
本节描述了了随机森林的应用情况,一般来说,所使用的树越多,结果越收敛,并且能表现出large margin的性质。
11 Gradient Boosted Decision Tree
11.1 Adaptive Boosted Decision Tree
上一节讲了将bagging和决策树组合在一起成为随机森林,本节描述将adaboost和决策树组合在一起。
将它们组合在一起的方式就是给样本加上权重然后用来训练决策树,最后根据权重将决策树线性组合。其中有一些特殊之处,其一是权重将通过按比例抽取数据的方式表现;其二是决策树不能完全展开,否则其权重为无穷大,因此需要进行剪枝,在极端情况下的剪枝即只剩一个节点,成为decision stump。
如此就是adaboost-DTree的一个特殊例子,AdaBoost-Stump。
11.2 Optimization View of AdaBoost
将AdaBoost对某一样本的分类看做是对其评分,其中,
AdaBoost的损失函数是指数损失函数。将该损失函数泰勒展开,可以看做是在原损失函数的基础上加上一个梯度,使得损失函数更小,这个梯度是一个函数。该函数的求解结果即AdaBoost的新树。
另外,我们希望
gt(x)
的权重
η
尽可能大,即在梯度确定的情况下走更大的一步以获得更小的损失函数。这个η的求解结果即AdaBoost的树权重
11.3 Gradient Boosting
本节对上节的思想做了扩展。在这里尝试将上节的AdaBoost的指数错误函数转换成平方错误函数,并用同样的思路先泰勒展开求损失函数的梯度(梯度是一个函数),这里需要注意到的是,在利用梯度最小化损失函数的时候需要在目标函数中减去
h(x)
的平方项。这一步是通过选择
h(x)
拟合原函数
G
的残差。
然后再将
11.4 Summary of Aggregation Models
本节总结了过去几节提出的集成的方法:
在得到不同的
(1)uniform:简单地利用投票的方式将它们组合起来。
(2)non-uniform:将
gt(x)
视为一种特征转换,并用线性模型将它们组合起来。
(3)conditional:将
gt(x)
视为一种特征转换,并用非线性模型将它们组合起来。
第一种的好处在于简单、稳定,后两者的好处在于能处理更加复杂的情况。
在不知道
gt(x)
的情况下,有如下方法可以学习
gt(x)
:
(1)bagging:用bootstrap的方法获得样本,并进行学习。
(2)AdaBoost:用重新设置权重的方法学习
gt(x)
,并用steepest search的方法搜寻权值,最后线性组合起来。同时这里GradientBoost使用了类似的方法,与重置样本权值类似,它是对之前模型的拟合残差进行fiiting,并用steepest search的方法搜寻权值,最后线性组合。
(3)Decision Tree:通过切割样本的方式获得
gt(x)
。
另外,可以把以上的方式融合起来:
(1)随机森林:bagging和完全决策树的融合。
(2)AdaBoost-DTree、GBDT:分别用AdaBoost和GradientBoost来组合弱决策树(即Decision stump)。
最后可以注意到的是,组合(ensemble)的方式有large margin的效果。