上一节课介绍了随机森林(RF),这个模型基本上就是递归的决策树(DT),其核心思想是通过Bagging的方式做出不一样的DT,最后再将它们融合起来。相比一般的决策树,其加入了很多随机因素;并且它可以实现自我验证,从而省去了划分训练集和验证集重新训练的过程;同时,还通过permutation test实现特征选择,达到降低模型复杂度的目的。本节课介绍Gradient Boosted Decision Tree。

11.1 Adaptive Boosted Decision Tree

随机森林算法是通过Bagging算法中的bootstrapping对数据集进行重采样,生成很多个样本子集,让后使用决策树训练这些样本子集得到不同的假设函数 gtg_t ,最后通过投票的方式融合这些不一样的 gtg_t,得到 GG。现在的思路是将Bagging替换为AdaBoost,即在每次重采样的过程中,会赋予不同的样本不同的权重 u(t)u^{(t)} 得到不同的样本子集,然后使用决策树训练这些样本子集得到不同的假设函数 gtg_t,最后对这些假设函数 gtg_t 进行线性组合,而不是使用Bagging的投票方式进行组合。这种模型称为AdaBoost-DTree。
机器学习技法11: Gradient Boosted Decision Tree(GBDT)

下一步的工作就是要计算在AdaBoost­-DTree中每个样本的权重 u(t)u^{(t)} 。在AdaBoost算法中,使用了重采样, u(t)u^{(t)} 表示在数据集 DD 中的每个样本在样本子集 D~\tilde{D} 中出现的次数。但是决策树算法中并未引入样本权重,如何在不改变决策树算法基础上引入样本权重,实现AdaBoost-DTree呢?思路是通过weighted algorithm,即求每个犯错误的样本点乘以相应的权重的和,再取平均,得到目标函数 Einu(h)E^{u}_{in}(h)
机器学习技法11: Gradient Boosted Decision Tree(GBDT)

为了不改变决策树算法,对样本子集 D~\tilde{D} 进行处理。在Bagging算法中的Weighted uu 概念是说某一样本在拔靴法重采样中出现的次数。更一般地,基于随机的思想,可以根据 uu ,对原数据集 DD 进行带权重的重采样得到不同的样本子集 D~\tilde{D},样本子集中没有样本出现的概率,与它的权重 uu 所占的比例是近似的。至此,可以将 D~\tilde{D} 代入决策树训练得到不同的假设函数 gtg_t,而无需改变决策树算法。
机器学习技法11: Gradient Boosted Decision Tree(GBDT)

AdaBoost-DTree 通过重采样代替了AdaBoost算法中的计算样本误差的过程,但效果相同,并且并未改变决策树算法,同时结合了两种算法的优点,可以描述为:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)

下面讨论如何计算对不同的 gtg_t 线性组合中的权重 αt\alpha_t 的计算。
机器学习技法11: Gradient Boosted Decision Tree(GBDT)

其中 ϵt\epsilon_t 表示假设函数 gtg_t 的错误率。如果现在有一个由所有样本训练得到的完全成长树(fully grown tree),若每个样本都不相同,则可以得到 Ein(gt)=0E_{in}(g_t) =0,并且可以推导出:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
αt=\alpha_t = \infty 的意思是说其所对应的假设函数自己决定了 GG ,其它的假设函数不起作用。这样的结果当然不是所期望的。造成这种结果的原因是:一个是使用所有样本训练;另一个是节点过多。针对这些问题,可以修剪(prun)决策树,避免得到完全成长树,也就是AdaBoost­-DTree所使用的pruned DTree的方法。这样就可以将弱弱的树进行组合,得到 GG ,避免只由一个 gtg_t 决定 GG 的情况。
机器学习技法11: Gradient Boosted Decision Tree(GBDT)

此时,AdaBoost­-DTree可以描述为:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)

那么有没有更简单的方式对AdaBoost­-DTree进行修剪呢?一种想法是,每棵树只有一个节点,即只做一次二叉树,生成两个分支。回顾之前所学的分支准则 b(x)b(x)
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
二叉树相当于二分类,此时公式中的不纯净度(impurity)即为二分类的误差。此时的AdaBoost­-DTree就跟AdaBoost­-Stump一样,也就是说AdaBoost­-Stump是AdaBoost­-DTree的一种特殊情况。当只有一个节点时,错误率很难为0,一般再做重采样操作,而是直接将权重 uu 代入算法中。AdaBoost­-Stump旨在直接使用权重 uu 组合模型,达到简化算法复杂度的目的。


习题1:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)


11.2 Optimization View of AdaBoost

首先回顾一下AdaBoost算法的权重迭代公式:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
原表达式是条件表达式,为了简化,可以进行简化,得到上式结果。进一步推导得:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
由以上推导,易知有以下正比关系:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
接下来讨论voting score 和Margin之间的关系:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
可以将voting score看做 gt(xn)g_t(x_n) 的线性组合,权重为 αt\alpha_t。由之前所学,gt(xn)g_t(x_n) 相当于对输入样本 xnx_n 做了特征转换 ϕi\phi_i ,然后进行线性组合,权重为 wiw_i。由SVM的margin计算公式可知,其表示支持向量到边界的距离。SVM的目标是使margin尽可能的宽,这与 G(xn)G(x_n) 有异曲同工之妙,公式中的voting score要尽可能的大,才能保证边界尽可能的宽。进一步推导得:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
unT+1u^{T+1}_n 的表达式可知,当voting score越大时,unT+1u^{T+1}_n 越小。在AdaBoost算法中,样本权重 u(t)nu^(t)_n 逐渐减小,直到unT+1u^{T+1}_n 达到最小。对于所有样本来说也有类似结论,即:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
上式中括号内的蓝色部分称为 linear score,有如下性质:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
现在的目标就变为最小化 err^ADA\hat{err}_{ADA}。下面继续推导AdaBoost的误差函数,首先考虑使用梯度下降算法求解。
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
上式中,wtw_t 为泰勒展开的位置,vv 是所要求解的梯度下降的最佳方向,即梯度Ein(wt)∇E_{in}(w_t) 的反方向,η\eta 是每次更新的步长。现在将梯度下降的算法应用到AdaBoost的误差函数中,只不过方向变为假设函数 gtg_t ,而不是向量 wtw_t ,二者的区别是连续与离散的关系,但在梯度下降过程中没有影响。继续推导得到AdaBoost的误差函数,其中,h(xn)h(x_n) 表示当前的方向,如果要最小化误差函数 E^ADA\hat{E}_{ADA},则上式中的第二项要尽可能的小,现在的目标就变为最小化该项。
机器学习技法11: Gradient Boosted Decision Tree(GBDT)

下面对 h(xn)h(x_n) 做进一步推导:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
至此,AdaBoost中的基本演算法找到了梯度下降过程中最好的更新方向。
机器学习技法11: Gradient Boosted Decision Tree(GBDT)

上式中,更新步长 η\eta 还未确定,其计算方法是在假设函数 gtg_t 求解出之后,作为参数,通过最小化 E^ADA\hat{E}_{ADA} 得到。
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
最小化的目标是在最好的更新方向上找到最大更新步长。
机器学习技法11: Gradient Boosted Decision Tree(GBDT)

由以上推导可知,最大的更新步长就是 αt\alpha_t,即AdaBoost算法中,某一假设函数 gtg_t 的权重。实际上,AdaBoost算法通过梯度下降算法寻找梯度下降最快的方向和最大的更新步长。这里的方向就是假设函数 gtg_t,更新步长是 αt\alpha_t


习题2:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)


11.3 Gradient Boosting

上一小节介绍了使用梯度下降对AdaBoost进行最优化。其针对二分类的情况目标函数可以描述为:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
对于不同的误差函数,上式仍然成立,更一般地,可以描述为:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
核心思想没有改变,仍然是通过梯度下降,求解梯度下降最快的方向 h(xn)h(x_n) 和最大的更新步长 η\eta。分析了分类的求解方式,接下来看一下如何求解回归问题的Gradient Boosting的目标函数。使用梯度下降的思想,按一阶泰勒公式展开,写成梯度的形式:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
由于回归问题的目标函数是平方项,所以求导之后为 2(snyn)2(s_n-y_n)。上式中,灰色的部分表示常数,对求解过程没有影响,可以忽略。
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
实际上,h(xn)h(x_n) 的长度并不重要,因为其只决定梯度下降的方向,所以为了避免其长度的影响,需要对其加以限制,常用号的做法是把 h(xn)h(x_n) 当做一个惩罚项 h2(xn)h^2(x_n) 添加到上述目标函数中,这与回归问题的目标函数类似。经过简化之后得到:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
上式是一个完全平方和公式,其中,ynsny_n-s_n 表示当前第 nn 个样本真实值和预测值的差,称之为残差(residual)。要最小化目标函数,即让 h(xn)h(x_n) 尽可能的接近残差。对所有样本点做回归,得到的方程就是要求解的假设函数 gt(xn)g_t(x_n)。然后求解更新步长:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
同样的道理,要最小化该目标函数,需要让 ηgt(xn)\eta g_t(x_n) 尽可能地接近残差 ynsny_n-s_n。利用梯度下降优化算法,对所有样本点做回归,即可求解得到最大的更新步长 η\eta
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
将上述算法组合起来就成为Gradient Boosted Decision T ree (GBDT)。
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
关于Decision Tree的部分存在于对每个样本点做回归的过程中,即可以使用决策树来对每个样本点做回归。算法中梯度下降的更新方向 gtg_t 通过决策树做回归求解;更新步长 η\eta 通过线性回归求解。AdaBoost­-DTree用于二分类任务,GBDT用于回归任务。可以认为GBDT是AdaBoost­-DTree的回归版本。


习题3:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)


11.4 Summary of Aggregation Models

至此机器学习技法课程中的集成学习算法已经介绍完了,本小节总结一下。

本门课程介绍的第一个集成学习算法是Blending,其核心思想是将求解出的不同的假设函数 gtg_t 融合(aggregation)起来,得到最终的假设函数 GG 。融合 gtg_t 的方式有三种:

  • uniform:对所有 gtg_t 的预测输出取平均值;
  • non-uniform:对所有的 gtg_t 进行线性融合;
  • conditional:对所有的 gtg_t 进行加权融合。

uniform采用取平均的方式,很稳定;non-uniform和conditional可以求出很复杂的模型,但容易过拟合。
机器学习技法11: Gradient Boosted Decision Tree(GBDT)
Blending算法是建立在 gtg_t 的前提之下,如果 gtg_t 未知,则称为融合学习模型(Aggregation-Learning Models),求解 gtg_t 的同时,将它们融合。learning通常由三种:

  • Bagging:通过拔靴法(bootstrapping)将原数据集重采样出许多个小的样本子集,然后使用演算法分别求解得到假设函数 gtg_t ,计算所有 gtg_t 的预测输出的平均值,从而融合成 GG
  • AdaBoost:同样通过拔靴法(bootstrapping)得到不同的假设函数 gtg_t ,然后对这些 gtg_t 进行线性组合得到 GG
  • Decision Tree:通过二叉树的形式,将输入空间进行逐次划分,划分完成后的叶子就是假设函数 gtg_t,然后对这些 gtg_t 进行加权组合得到 GG
    机器学习技法11: Gradient Boosted Decision Tree(GBDT)
    还可以将这些基本的集成学习模型进行组合得到更复杂的模型。比如:
    机器学习技法11: Gradient Boosted Decision Tree(GBDT)
    集成学习模型(融合模型)有以下优点:
    机器学习技法11: Gradient Boosted Decision Tree(GBDT)
    即不但可以防止欠拟合,同时还具有正则化效果,可以有效地防止过拟合。

习题4:
机器学习技法11: Gradient Boosted Decision Tree(GBDT)


Summary

本节课介绍了Gradient Boosted Decision Tree,该算法通过sampleing和pruning将AdaBoost和Decision Tree算法结合了起来。接下来介绍了从优化的角度分析AdaBoost,其求解假设函数的过程就是寻找最佳的梯度下降方向和步长的过程。将该思想扩展,引出了Gradient Boosting算法,其本质上是在做residual fitting。最后将其与决策树结合,介绍了GBDT模型。第四小节总结了所学的融合模型(集成学习模型)。
机器学习技法11: Gradient Boosted Decision Tree(GBDT)


参考:
https://github.com/RedstoneWill/HsuanTienLin_MachineLearning

相关文章: