从Gradient Boosting 到GBT

本文大部分参考(译)自wiki[1]
如果说Gradient Boosting是一种机器学习算法框架的话,我想GBT(Gradient Boosting Tree)看做它的实现更为合适

Gradient Boosting原理

与其他Boosting方法一样,Gradient Boosting通过迭代将弱分类器合并成一个强分类器的方法。

对于标准的 (xi,yi) (xi,yi)训练集,Gradient Boosting在迭代到第 m m次时,可能会得到一个分类能力不是很强的 fm fm模型,但是他下次迭代并不改变 fm fm,而是生成一个这样的新模型:

fm+1=fm+Gm+1 fm+1=fm+Gm+1
使得 fm+1 fm+1 fm fm而言拥有更为强大的分类能力,那么问题来了,这个 Gm+1 Gm+1该如何训练呢?

现在假如训练完 Gm+1 Gm+1可以得到完美的 fm+1 fm+1,那么也就是有:

fm+1=fm+Gm+1=y fm+1=fm+Gm+1=y

这个式子可以写成
Gm+1=yfm Gm+1=y−fm
其中 yfm y−fm表示上一次迭代得到分类器预测结果与真实结果的差值,我们一般称之为的 残差(residual),因此也可以理解为 Gradient Boosting在每一轮训练新的分类器将会拟合 残差进行最优化

Gradient Boosting算法

假设现有训练集 {(x1,y1),(x2,y2)(xn,yn)} {(x1,y1),(x2,y2)…(xn,yn)},其中 x x是特征向量, y y是相应的训练目标,在给定相应的损失函数 L(y,f(x)) L(y,f(x)),我们的目标是找到一个近似的函数 f(x) f(x)使得与真实函数 f(x) f∗(x)的损失最小期望值最接近:

f=argminfEx,y[L(y,f(x))] f∗=argminfEx,y[L(y,f(x))]

Gradient Boosting方法假设 y y是一个实值,而 f(x) f(x)近似目标函数是一个弱分类器 Gm(x) Gm(x)加权求和的形式

f(x)=m=1MγmGm(x)+const f(x)=∑m=1MγmGm(x)+const
根据经验风险最小化的原则,近似函数 f(x) f(x)将会尝试对训练集上的平均损失函数进行最小化,它从一个常量函数进行起步,并且通过贪心的方式进行逐步优化
f0(x)=argminγi=1nL(yi,γ)fm(x)=fm1(x)+argminGHi=1nL(yi,fm1(xi)+Gm(xi)) f0(x)=argminγ∑i=1nL(yi,γ)fm(x)=fm−1(x)+argminG∈H∑i=1nL(yi,fm−1(xi)+Gm(xi))

然而,对于 L L为任意的损失函数时,在选择每一步最佳的 Gm(xi) Gm(xi)时将会很难优化。
这里使用最速下降法( steepest descent)来解决这个问题
,在使用这种方法时,对于损失函数 L(y,G) L(y,G)不要将其看做一个函数,而是将其看做通过函数得到的值的向量 G(x1),G(x2)G(xn) G(x1),G(x2)…G(xn),那么这样的话我们就可以将模型的式子写成如下的等式:
fm(x)=fm1(x)γmi=1nGL(yi,fm1(xi))γm=argminγi=1nL(yi,fm1(xi)γL(yi,fm1(xi))G(xi)) fm(x)=fm−1(x)−γm∑i=1n▽GL(yi,fm−1(xi))γm=argminγ∑i=1nL(yi,fm−1(xi)−γ∂L(yi,fm−1(xi))∂G(xi))

上面第一个式子表示根据梯度的负方向进行更新,第二个式子表明了 γ γ使用线性搜索进行计算。

下面就是具体的gradient boosting步骤:
Input:

  • 训练数据集 T={(x1,y1),(x2,y2)(xN,yN)} T={(x1,y1),(x2,y2)…(xN,yN)}
  • 可导的损失函数: L(y,f(x)) L(y,f(x))
  • 迭代的次数: M M

Output:

  • 最终模型 f(x) f(x)

Procedure:

  1. 使用一个常量进行模型的初始化
    f0(x)=argminγi=1nL(yi,γ) f0(x)=argminγ∑i=1nL(yi,γ)
  2. 循环 m{1.M} m∈{1….M}
    1. 计算残差
      rim=[L(yi,f(xi))f(xi)]f(xi)=fm1(xi)i=1n rim=−[∂L(yi,f(xi))∂f(xi)]f(xi)=fm−1(xi)i=1…n
    2. 使用训练集 {(xi,rim)} {(xi,rim)}对弱分类器 Gm(x) Gm(x)进行拟合
    3. 通过线性搜索进行乘子 γm γm的计算
      γm=argminγi=1nL(yi,fm1(xi)+γmGm(xi)) γm=argminγ∑i=1nL(yi,fm−1(xi)+γmGm(xi))
    4. 进行模型的更新:
      fm(x)=fm1(x)+γmGm(x) fm(x)=fm−1(x)+γmGm(x)
  3. 输出最终的模型 fM(x) fM(x)

下面是来自[2]中的对于不同损失函数下不同残差的计算

可以发现当损失函数为最小平方差时残差就是真实值与预测值的差值

Gradient tree boosting

提升树(Gradient tree boosting)故名思议就是使用决策树(一般使用CART树)来作为弱分类器.
提升树在第 m m步迭代时将会使用决策树 Gm(x) Gm(x)来集合残差,现在假设这棵树有 J J个叶子节点,则决策树将会将空间划分为 J J个不相交的区域 R1m,R2mR3m R1m,R2m…R3m,以及每个区域都是预测一个常量值,则树模型 Gm(x) Gm(x)对于特征 x x的输入将可以写成

Gm(x)=j=1JbjmI(xRjm) Gm(x)=∑j=1JbjmI(x∈Rjm)
,其中 bjm bjm表示每个区域的预测值,上面的介绍可以用下图来表示:

在实际使用时, bjm bjm也会与一个乘子 γm γm相乘,最终模型的训练与上面一小节的介绍一致:

fm(x)=fm1(x)+γmGm(x)γm=argminγi=1nL(yi,fm1(xi)+γmGm(xi)) fm(x)=fm−1(x)+γmGm(x)γm=argminγ∑i=1nL(yi,fm−1(xi)+γmGm(xi))

可以发现树的模型是关键,一般来时 4J8 4≤J≤8比较合适,有时候 J=2 J=2就足够了,并且 j>10 j>10比较少用

正则化

其实用过Gradient Boosting的同学应该有同感,Gradient Boosting类型的模型(GBDT)调参很重要-_-,大致可以发现这些参数就是正则化的关键

调整树的个数

树的个数 M M越多,过拟合的情况可能越为严重,这里树的个数一般使用交叉验证的误差来调整确定

Shrinkage

Shrinkage又称学习率,是指在Gradient Boosting训练时不训练全部的残差,而是:

fm(x)=fm1(x)+vγmGm(x)0<v1 fm(x)=fm−1(x)+v⋅γmGm(x)0<v≤1

经验表明较小的学习率( v<0.1 v<0.1)将会取得较为明显的正则化效果,但是学习率太小会导致训练次数增加..

感觉这个大致可以这么理解,如果 v=1 v=1,弱分类器犯错一次真的就错了,但是如果 v<1 v<1时,如果某个分类器犯错了,其他的的弱分类器可能还可以补救^_^

Stochastic gradient boosting

随机梯度提升法,表示每一轮迭代时并不是拿所有的数据进行训练,所以按无放回的随机取一定的比率 η η进行训练,这里的 0.5<η<0.8 0.5<η<0.8将会取得较为不错的正则化效果,同时随机取样本进行训练还能加快模型的训练速度,并且每次迭代中未被抽中的样本还可以作为(out of bag)[https://en.wikipedia.org/wiki/Out-of-bag_error]进行估计

叶子节点的数量

一般这个叶子节点的数量不宜太多(其实可以理解为节点数越多,模型复杂度越高…)

使用惩罚项

额~貌似L2之类的惩罚项也是可以被加入进去

总结

Gradient Boosting是非常金典而又重要的提升方法,他与AdaBoost一样都是讲弱分类器合成强分类,但是其大致区别有:

  1. Gradient Boosting通过残差来变量的改变错误分类的权重,而AdaBoost就真的直接去修改分类错误的训练权重了
  2. Gradient Boosting接入的分类器一般完整的决策树居多,但是AdaBoost一般使用二层决策树

Gradient Boosting中最有代表性的就是GBDT,该模型虽好,可不要贪杯~使用时理解数据以及正确调参才是王道

参考

[1]. wiki Gradient boosting
[2]. The Elements of Statistical Learning
[3]. 《统计学习方法》.李航.第八章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值