Adaptive Boosted Decision Tree
回忆一下随机森林算法,它是将bagging与decision tree进行结合得到的。那么如果将boosting与decision tree进行结合也能够得到一个新的算法。
但是adaboost算法需要每次对样本权重进行更新,这就要求每个基函数也就是单个的决策树能够支持添加样本权重作为参数。对于样本有加权系数的情况,一般是将目标函数中的err进行加权然后进行最小化。
但是这个做法对于决策树来说比较困难,因为决策树里拆解然后将权重加进去不太好做。因此我们可以选择另一种方式,那就是将决策树算法看成一个黑箱,然后在样本上做变化。
在bagging中对样本加权的操作可以通过采样的样本数来表示,而这个做法对于任意的基函数都可以使用。只要在新的数据集中样本出现的频率正比于样本的系数即可。于是我们不修改基函数决策树就得到了adaboost与decision tree的结合。
不过依然还有问题,那就是adaboost中参数的计算。如果对于一个样本,基函数是一个完全长成的决策树,那么当每个样本都不一样时能够得到0的
E
i
n
E_{in}
Ein,这样计算系数
α
t
\alpha_{t}
αt就会出问题,变成无穷大。
想要避免这个问题就要使得基函数不能得到0的
E
i
n
E_{in}
Ein,对于决策树来说就是不能fully grown,也就是需要剪枝。
于是adaboost-dtree算法相当于下面三个部分相加:
如果一个决策树被剪枝到极限,那就是它只有一个branching过程,其实就是一个decision stump。
Optimization View of AdaBoost
再看一下adaboost里面参数的更新过程:
实际上可以把它写为一个指数项。而对于同一个参数而言,经过了T次参数更新之后的结果可以写成指数项的相加:
其中黄色背景相加的部分看起来非常眼熟,就是所有的基函数结果加权和得到的评分结果:
也就是说,adaboost里面每个样本的参数正比于对应结果的指数。
实际上这就是一个linear blending的最终结果,而如果将label乘以这个voting score,就能够得到一个类似svm中函数距离的结果:
对于这个margin我们是希望它越大越好,因此就会变成系数
u
t
+
1
u_{t+1}
ut+1越小越好。也就是说adaboost的目标就是最小化系数和:
假如我们把这个指数项看成一个err,那么就会发现这个err是0/1 err的一个上限,我们把它叫做
e
r
r
^
A
D
A
\widehat{err}_{ADA}
err
ADA,也就是指数error。
那么我们现在来对这个
E
i
n
E_{in}
Ein进行最优化。类似于梯度下降,我们可以把它先用泰勒展开写开:
虽然这里的变量由原来梯度下降里面的一个向量变成了一个函数,但是本质上没什么区别。而想要最小化目标函数,泰勒展开的后一项就要足够小,这样的h就是我们要的:
改变这一项的写法得到:
也就是说,对应最小化
E
i
n
u
(
t
)
E_{in}^{u(t)}
Einu(t)的函数h就是我们要的结果。显然,这正是adaboost里面的算法A做的事情。而有了h之后我们还需要进一步确定系数
η
\eta
η的值。
在梯度下降里我们一般是一个比较小的固定步长,但是这里我们希望能够让这个步长最大,每一步都是贪心的。再一次改写
E
A
D
A
E_{ADA}
EADA,这次不需要泰勒展开:
然后对
η
\eta
η求梯度很容易就得到结果。这正是之前adaboost里面我们说的系数。
Gradient Boosting
假如我们把之前基函数是二分类的adaboost算法进行拓展,就能得到更一般的一个算法:
只需要把adaboost里的二分类基函数换成任意的基函数,而且对应的err也改为正确的err即可。这样得到的gradient boost算法能够应用到各种不同的情形。
比如将其用到regression中,使用对应的平方误差。
还是先计算下一步最优的基函数h:
用同样的泰勒展开发现有个问题就是,如果不对h进行限制,那么它可以选择结果是无穷大,这样就能够得到最小化的目标函数。而实际上h结果的模长不重要,因为还有系数
η
\eta
η控制模长。但是将其限制为模长等于1这种又很难解,因此可以将它的模长也作为惩罚项加入目标函数中:
加入模长的平方项之后,可以得到对应的最优h其实就是对剩余部分
y
n
−
s
n
y_{n}-s_{n}
yn−sn的线性回归拟合。
得到了h之后再求最优的步长
η
\eta
η,发现它的结果同样是对剩余部分进行拟合得到的结果:
而且是个单变量问题,非常好解。
把这些放到一起,基函数使用决策树,我们就得到了GBDT方法:
这个方法是adaboost-Dtree的回归版本。
Summary of Aggregation Models
总结一下已经学习过的aggregation算法(也叫ensemble算法)。
其中已有基函数而进行混合的叫做blending,对应有uniform,non-uniform和conditional三种混合形式:
uniform为了稳定性,其它两个能够增强模型复杂度来增强拟合能力。
还有一种一边学习一边进行混合的形式,也有对应的三种类型:
bagging是uniform的,boost是non-uniform的,而决策树对应着conditional形式的混合。其中boost的比较流行。还有就是将它们进行组合的:
组合之后得到的三种算法实际中用的非常多,是很成熟的算法。
aggregation模型有一些特性,有时候能够增强拟合能力,有时候能够避免过拟合。当需求不同时可以选用不同的模型。最终的目标还是增强模型的性能。