梯度提高树 Gradient Boosting Decision Tree

Adaboost + CARThtml

用 CART 决策树来做为 Adaboost 的基础学习器git

 

可是问题在于,须要把决策树改为能接收带权样本输入的版本。(need: weighted DTree(D, u(t)) )算法

这样可能有点麻烦,有没有简单点的办法?尽可能不碰基础学习器内部,想办法在外面把数据送进去的时候作处理,能等价于给输入样本权重。(boostrapping)app

例如权重 u 的占比是30%的样本,对应的 sampling 的几率就设定为 0.3。框架

 

每个基础学习器在总体模型中的重要性仍是用 αt 来衡量(gt 在 G 中的系数)。另外,这个方法中仍然是 boosting, CART 必定不能太强(剪枝比较多、简单点就限制树高度;训练每棵树都只用一部分训练数据)函数

 

 极端状况,限制树的高度只有1,那就直接退化成 decision stump ,也就不用作 sampling 了(由于几乎不会只用 stump 就能让 error rate = 0)学习

 

  

GBDT优化

梯度提高树(GBDT)也是一种前向分步算法,但基础模型限定了使用 CART 回归树。在学习过程当中,第 t 轮迭代的目标是找到一个 CART 回归树 gt(x) 让本轮的损失函数 L(y, Gt(x)) = L(y, Gt-1(x) + gt(x)) 尽可能小。3d

 

从 Adaboost 到 general boostinghtm

负梯度拟合的优点就是能够在通用框架下拟合各类损失偏差,这样分类回归都能作。在 ensemble http://www.javashuo.com/article/p-deldtqxd-s.html 分析过,这里再回顾一遍。

统一每次更新样本权重的形式(gt-1(x) 正确分类的样本权重减少,错误分类的样本权重增长)

 

那么根据递推公式,unT+1 能够从 un1 推得,而表达式中正好能够发现 G(x) 的 logit(voting score)。

 

而 yn * voting score 能够理解为点到分割平面的一种距离衡量,相似于 SVM 中的 margin,只不过没有归一化。而模型的训练目标就是想要让 margin 正的越大越好,等价于让 unT+1 越小越好。也就是说,adaboost 中全部样本的 un 之和会随着时间步推移愈来愈小(让每个点的 margin 都愈来愈正、愈来愈大)。

 

这样就能够看出 adaboost 总体模型的要最小化的目标函数,是全部时间步的全部样本权重之和,即0/1损失函数的upper bound(指数损失函数)。

 

就用梯度降低(泰勒一阶展开)来实现这个最小化(不一样的是,这里要求 loss 函数对 gt(x) 函数的梯度,approximate functional gradient)。把1/N拿进去,紫色部分凑成 unt ,对剩下的exp部分用泰勒公式一阶逼近,整理获得最终要对 h 求梯度的目标函数。

  

那就来看一下,发现最小化总体模型的目标函数,就等价于最小化 Einu(t) ,就是要优化基础分类器(也就是说,adaboost中前向分步训练基础分类器,其实正是在为总体模型的梯度降低优化找最好的gt(x) )

 

  

再来就是要肯定学习率,能不能每步都找到一个最好的学习率(短时间内比固定的学习率降低的快)?steepest descent:loss 对其求导并另为0。获得的最好的学习率,正是 adaboost 中的 αt

 

从梯度降低的角度再次总结 adaboost 作分类

 

 

gradient boosting

负梯度拟合的扩展,不仅用指数损失函数,用其余的损失函数(符合平滑条件)也能够。从目前已经达到的 G(xn) ,向某一个方向(h(xn))走一小步(η),使得新的 logit 与给定的 yn 之间的某种 error 变小。

 

以平方偏差举例,error = (s-y)2

 

若是在某处往某个方向走了一小步,就要乘上 gradient 在那个地方的份量(error 对 s 偏微分,在s处取值)。而后就是找一个 h,让下面式子的第二项越小越好(第一项与h无关)。直接的想法是:若是 s-y 是正的,就给一个负的 h ;若是 s-y 是负的,就给一个正的 h 。那么就让 h 取到 s-y 的负方向。

 

但 h 的大小呢?若是不加约束,h(xn) = - ∞ * (sn-yn) ,但是咱们这里找 h 只是要找一个方向,因此步长靠 η 决定。加一个正则化惩罚项便可。而后凑一个 (h(xn) - (yn - sn))2 出来,配上一个和 h 无关的常数项。要最小化这个式子,就是要令 h(xn) 和 (yn - sn) 之间的均方偏差最小,那就是以残差 residual 为目标训练一个回归器。

 

而后决定 η 的大小,单变量最优化问题。但这里除了求偏微分令其等于0,还有一种简洁的求法。把 gt(xn) 当作是feature,residual 当作简单线性回归的目标, 求这个一维的权重。

 

optimal η 的解为

 

 加入 CART 做为 base learner,总结一下 GBDT

 

关于 GBDT 作分类的详解:http://www.javashuo.com/article/p-coowgizi-dv.html

相关文章
相关标签/搜索