梯度提升树模型(Gradient Boosted Decision Tree)
与随机森林的对比
前面提到的随机森林使用Bagging的方式融合起来,也就是使用bootstrapping进行抽样得到不同的样本再加上不同的特征选择训练出不同的决策树g来然后进行不同种类的融合最后组成森林。
提升树模型则是使用了Adaboost模型的融合方式。Adaboost模型主要强调模型在每一次做决策的时候都会调整模型对于每一笔资料的权重(给予犯错误的资料更大的权重,减小正确资料的权重)。这样训练出了每一个模型最后融合起来。
带有权重的决策树
在以前我们想要模拟一笔资料带有一些权重会将这笔资料复制相应的倍数。比如说要给这笔资料赋予100倍的权重那么就将这笔资料复制100份。在这里设计一个带有权重的决策树模型并非易事所以我们通过与权重比例相同的抽样来等效带有权重性质的演算法。
选择弱的树
在所有笔资料都不同的时候如果做一颗决策树在不断切割下去的时候就会长成完全长成树,完全长成树的Ein(损失函数值)为0,对应到权重的角度来看就是把所有的权重都给了这棵树,这样的情形也非常容易过拟合。再加上Adaboost演算法我们现在渴望一些不是很强的树,我们要为这些很强的树剪枝。
当树为一层的时候就相当于一个分类器模型,我们只是把资料切一刀使得两边的不纯度的和最小。这时我们在权重方面的考虑就无需做等价的抽样了而是直接将权重考虑到算法中。
Adaboost的新角度
投票分数和边距
在Adaboost演算法中我们知道每一个点的权重就等于这个点上一轮的权重乘上或除以更新量,而且这个更新量与最后融合起来的投票权重α有一定的关系如下图所示:
将Adaboost中的最后一轮的权重计算出来发现其中的一部分与最后模型融合时的得分函数有如下的联系:
最后的权重正比于exp(-y*得分函数)。如果把得分函数中g(x)作为一个特征转换则最后的得分函数可以看作是一个在SVM中没有正规化的边界:
借助这个相似性我们想要这个边界在正确的方向上越大越好,也就是我们的投票函数(得分函数)是正的而且是大的。最后我们得到了一个最优化的策略就是尽可能的最小化最后一轮的权重,而事实上在Adaboost中每一轮的权重之和确实在减小也就是Adaboost隐形的做好了宽的边界和正的值:
Adaboost的损失函数
根据上面最小化的函数我们知道了可以通过最小化Err(ADA) = exp(-y*得分函数)来使得演算法得到最优解。Err(ADA)与0/1错误的函数图像如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/2f3fea86c39e9183fb0b746bb2fae7cb.png)
从图中我们可以得知我们可以通过求出Err(ADA)的上限来做好0/1的二元分类问题。
隐含的梯度下降法
将Err(ADA)经过变形与与泰勒展开式的近似展开会得到下图:
把上面这个式子与梯度下降法的式子类比,就会发现如果找到一个好的g也就相当于找到了一个好的梯度下降的方向。一般来说梯度下降的方向会是一个向量但是一个函数与向量有极大地相似性。向量是给定一个维度会得到一个相应的值,函数也是给定一个变量会得到一个相应的值。不同的是向量是离散的函数是连续的。所以我们经过训练得到一个好的g也是隐含的选择好了一个梯度下降的方向。实务上Adaboost就会为我们找到一个很好的g。
当我们找到一个好的方向之后下一步我们就要在这个方向上下降更新。但是计算g这个方向是比较消耗成本的所以我们想要在每一次下降的时候尽量走出比较大的步子。所以我们根据简化后的Err(ADA)再令函数关于η的倒数为0得到最大的η。经过变换每一步最大的η也就是α,从这里我们又看出了Adaboost也间接地做好了梯度下降步幅的大小,如下图所示:
有了上面这些解释我们也认识到了Adaboost的另一个解释可以概括为:近似的(泰勒展开)函数式(g)最大梯度(α)下降法。
GBDT
损失函数的推广
现在我们知道了Adaboost演算法的核心可以理解为一个特殊的梯度下降法只是它的损失函数为指数函数。如果我们将Adaboost中的损失函数推广到一般的函数这个演算法也就成为了GradientBoost,这个演算法可以推广到其它不同的错误比如说回归或者是软性分割。
梯度的方向
我们将原始错误函数进行转化,然后再使用泰勒展开式进行近似等价(主要是围绕函数在某一个方向上的移动在梯度方向上的分量就相当于梯度下降的更新量)。要求出最优的方向就是要求出下降最快时方向的值(h(x)的值)。如下图所示:
当我们决定了这一轮最佳的方向之后,按照上面的原则当h(x)为-∞的时候下降的最快。但是一般情况h(x)只负责方向而η负责步幅的大小,所以我们要对h(x)的大小做一些限制。按照有条件最佳化问题的解答我们习惯于将这些条件放到我们要最佳化的问题里面(比如说拉格朗日乘子法)。我们将h(x)当做是一个惩罚项,h(x)越大我们越不喜欢它如果小了还不错。经过一些转换求最优的h(x)的问题换成了一个h(x)与(y-s)的一个回归问题如下图所示:
梯度的步幅
当方向固定下来损失函数的最小问题也就变成了一个关于η的一个单变数的问题了:
把g(x)当做是一个转换(它现在是一个常数),(y-s)仍为余数整个问题也是一个回归问题。当ηg(x)与余数最接近的时候就得到了最优的η值。这个过程就对应到Adaboost中最后融合小模型时求解每个模型获得的票数α。
GBDT(以回归问题为例)
梯度增强树模型主要分为以下几4个步骤:
首先将所有的余数都初始化为0,做一个原始的回归问题。
①利用决策树模型做一个解决回归问题得到最好的梯度方向。
②再计算一次回归问题得到梯度方向最好的步幅大小。
③使用已有的方向与步幅进行梯度下降更新得分函数。重复①到③步直到达到某一个程度的最优解。
实务上GBDT经常用于搜索引擎中的推荐和排序。