文章目录
上一节课介绍了随机森林(RF),这个模型基本上就是递归的决策树(DT),其核心思想是通过Bagging的方式做出不一样的DT,最后再将它们融合起来。相比一般的决策树,其加入了很多随机因素;并且它可以实现自我验证,从而省去了划分训练集和验证集重新训练的过程;同时,还通过permutation test实现特征选择,达到降低模型复杂度的目的。本节课介绍Gradient Boosted Decision Tree。
11.1 Adaptive Boosted Decision Tree
随机森林算法是通过Bagging算法中的bootstrapping对数据集进行重采样,生成很多个样本子集,让后使用决策树训练这些样本子集得到不同的假设函数 ,最后通过投票的方式融合这些不一样的 ,得到 。现在的思路是将Bagging替换为AdaBoost,即在每次重采样的过程中,会赋予不同的样本不同的权重 得到不同的样本子集,然后使用决策树训练这些样本子集得到不同的假设函数 ,最后对这些假设函数 进行线性组合,而不是使用Bagging的投票方式进行组合。这种模型称为AdaBoost-DTree。
下一步的工作就是要计算在AdaBoost-DTree中每个样本的权重 。在AdaBoost算法中,使用了重采样, 表示在数据集 中的每个样本在样本子集 中出现的次数。但是决策树算法中并未引入样本权重,如何在不改变决策树算法基础上引入样本权重,实现AdaBoost-DTree呢?思路是通过weighted algorithm,即求每个犯错误的样本点乘以相应的权重的和,再取平均,得到目标函数 。
为了不改变决策树算法,对样本子集 进行处理。在Bagging算法中的Weighted 概念是说某一样本在拔靴法重采样中出现的次数。更一般地,基于随机的思想,可以根据 ,对原数据集 进行带权重的重采样得到不同的样本子集 ,样本子集中没有样本出现的概率,与它的权重 所占的比例是近似的。至此,可以将 代入决策树训练得到不同的假设函数 ,而无需改变决策树算法。
AdaBoost-DTree 通过重采样代替了AdaBoost算法中的计算样本误差的过程,但效果相同,并且并未改变决策树算法,同时结合了两种算法的优点,可以描述为:
下面讨论如何计算对不同的 线性组合中的权重 的计算。
其中 表示假设函数 的错误率。如果现在有一个由所有样本训练得到的完全成长树(fully grown tree),若每个样本都不相同,则可以得到 ,并且可以推导出:
的意思是说其所对应的假设函数自己决定了 ,其它的假设函数不起作用。这样的结果当然不是所期望的。造成这种结果的原因是:一个是使用所有样本训练;另一个是节点过多。针对这些问题,可以修剪(prun)决策树,避免得到完全成长树,也就是AdaBoost-DTree所使用的pruned DTree的方法。这样就可以将弱弱的树进行组合,得到 ,避免只由一个 决定 的情况。
此时,AdaBoost-DTree可以描述为:
那么有没有更简单的方式对AdaBoost-DTree进行修剪呢?一种想法是,每棵树只有一个节点,即只做一次二叉树,生成两个分支。回顾之前所学的分支准则 :
二叉树相当于二分类,此时公式中的不纯净度(impurity)即为二分类的误差。此时的AdaBoost-DTree就跟AdaBoost-Stump一样,也就是说AdaBoost-Stump是AdaBoost-DTree的一种特殊情况。当只有一个节点时,错误率很难为0,一般再做重采样操作,而是直接将权重 代入算法中。AdaBoost-Stump旨在直接使用权重 组合模型,达到简化算法复杂度的目的。
习题1:
11.2 Optimization View of AdaBoost
首先回顾一下AdaBoost算法的权重迭代公式:
原表达式是条件表达式,为了简化,可以进行简化,得到上式结果。进一步推导得:
由以上推导,易知有以下正比关系:
接下来讨论voting score 和Margin之间的关系:
可以将voting score看做 的线性组合,权重为 。由之前所学, 相当于对输入样本 做了特征转换 ,然后进行线性组合,权重为 。由SVM的margin计算公式可知,其表示支持向量到边界的距离。SVM的目标是使margin尽可能的宽,这与 有异曲同工之妙,公式中的voting score要尽可能的大,才能保证边界尽可能的宽。进一步推导得:
由 的表达式可知,当voting score越大时, 越小。在AdaBoost算法中,样本权重 逐渐减小,直到 达到最小。对于所有样本来说也有类似结论,即:
上式中括号内的蓝色部分称为 linear score,有如下性质:
现在的目标就变为最小化 。下面继续推导AdaBoost的误差函数,首先考虑使用梯度下降算法求解。
上式中, 为泰勒展开的位置, 是所要求解的梯度下降的最佳方向,即梯度 的反方向, 是每次更新的步长。现在将梯度下降的算法应用到AdaBoost的误差函数中,只不过方向变为假设函数 ,而不是向量 ,二者的区别是连续与离散的关系,但在梯度下降过程中没有影响。继续推导得到AdaBoost的误差函数,其中, 表示当前的方向,如果要最小化误差函数 ,则上式中的第二项要尽可能的小,现在的目标就变为最小化该项。
下面对 做进一步推导:
至此,AdaBoost中的基本演算法找到了梯度下降过程中最好的更新方向。
上式中,更新步长 还未确定,其计算方法是在假设函数 求解出之后,作为参数,通过最小化 得到。
最小化的目标是在最好的更新方向上找到最大更新步长。
由以上推导可知,最大的更新步长就是 ,即AdaBoost算法中,某一假设函数 的权重。实际上,AdaBoost算法通过梯度下降算法寻找梯度下降最快的方向和最大的更新步长。这里的方向就是假设函数 ,更新步长是 。
习题2:
11.3 Gradient Boosting
上一小节介绍了使用梯度下降对AdaBoost进行最优化。其针对二分类的情况目标函数可以描述为:
对于不同的误差函数,上式仍然成立,更一般地,可以描述为:
核心思想没有改变,仍然是通过梯度下降,求解梯度下降最快的方向 和最大的更新步长 。分析了分类的求解方式,接下来看一下如何求解回归问题的Gradient Boosting的目标函数。使用梯度下降的思想,按一阶泰勒公式展开,写成梯度的形式:
由于回归问题的目标函数是平方项,所以求导之后为 。上式中,灰色的部分表示常数,对求解过程没有影响,可以忽略。
实际上, 的长度并不重要,因为其只决定梯度下降的方向,所以为了避免其长度的影响,需要对其加以限制,常用号的做法是把 当做一个惩罚项 添加到上述目标函数中,这与回归问题的目标函数类似。经过简化之后得到:
上式是一个完全平方和公式,其中, 表示当前第 个样本真实值和预测值的差,称之为残差(residual)。要最小化目标函数,即让 尽可能的接近残差。对所有样本点做回归,得到的方程就是要求解的假设函数 。然后求解更新步长:
同样的道理,要最小化该目标函数,需要让 尽可能地接近残差 。利用梯度下降优化算法,对所有样本点做回归,即可求解得到最大的更新步长 。
将上述算法组合起来就成为Gradient Boosted Decision T ree (GBDT)。
关于Decision Tree的部分存在于对每个样本点做回归的过程中,即可以使用决策树来对每个样本点做回归。算法中梯度下降的更新方向 通过决策树做回归求解;更新步长 通过线性回归求解。AdaBoost-DTree用于二分类任务,GBDT用于回归任务。可以认为GBDT是AdaBoost-DTree的回归版本。
习题3:
11.4 Summary of Aggregation Models
至此机器学习技法课程中的集成学习算法已经介绍完了,本小节总结一下。
本门课程介绍的第一个集成学习算法是Blending,其核心思想是将求解出的不同的假设函数 融合(aggregation)起来,得到最终的假设函数 。融合 的方式有三种:
- uniform:对所有 的预测输出取平均值;
- non-uniform:对所有的 进行线性融合;
- conditional:对所有的 进行加权融合。
uniform采用取平均的方式,很稳定;non-uniform和conditional可以求出很复杂的模型,但容易过拟合。
Blending算法是建立在 的前提之下,如果 未知,则称为融合学习模型(Aggregation-Learning Models),求解 的同时,将它们融合。learning通常由三种:
- Bagging:通过拔靴法(bootstrapping)将原数据集重采样出许多个小的样本子集,然后使用演算法分别求解得到假设函数 ,计算所有 的预测输出的平均值,从而融合成 ;
- AdaBoost:同样通过拔靴法(bootstrapping)得到不同的假设函数 ,然后对这些 进行线性组合得到 ;
- Decision Tree:通过二叉树的形式,将输入空间进行逐次划分,划分完成后的叶子就是假设函数 ,然后对这些 进行加权组合得到 。
还可以将这些基本的集成学习模型进行组合得到更复杂的模型。比如:
集成学习模型(融合模型)有以下优点:
即不但可以防止欠拟合,同时还具有正则化效果,可以有效地防止过拟合。
习题4:
Summary
本节课介绍了Gradient Boosted Decision Tree,该算法通过sampleing和pruning将AdaBoost和Decision Tree算法结合了起来。接下来介绍了从优化的角度分析AdaBoost,其求解假设函数的过程就是寻找最佳的梯度下降方向和步长的过程。将该思想扩展,引出了Gradient Boosting算法,其本质上是在做residual fitting。最后将其与决策树结合,介绍了GBDT模型。第四小节总结了所学的融合模型(集成学习模型)。
参考:
https://github.com/RedstoneWill/HsuanTienLin_MachineLearning