集成学习(三)Gradient Boosting算法

一、算法的引出

在集成学习框架中,机器学习模型可写成各子学习器的组合:
G ( x ) = ∑ m = 1 M α m g m ( x ) G(x)=\sum\limits_{m=1}^M\alpha _mg_m(x) G(x)=m=1Mαmgm(x)AdaBoost算法中提供了一种解读Boosting框架的视角,即每一轮子学习器基于上一轮子学习器的表现来调节样本权重,实现模型效果的提升。
在这里插入图片描述
但实质上,由于相邻两个子学习器有着直接的关系,根据作用的传递作用,前序子学习器都会对当前的子学习器产生影响。

这启示了我们另一种思考Boosting框架的视角,即基于前序所有子模型及其效果来生成当前轮的子模型。其中最广为使用的即为梯度提升(Gradient Boosting)算法。

二、Gradient Boosting算法模型

假设在第 m m m轮子学习器训练时,前序所有子模型组成的加法总模型为 G m − 1 ( x ) = ∑ t = 1 m − 1 α t g t ( x ) G_{m-1}(x)=\sum\limits_{t=1}^{m-1}\alpha_tg_t(x) Gm1(x)=t=1m1αtgt(x),对应的损失函数为 L ( G m − 1 ) L(G_{m-1}) L(Gm1)。那该轮学习器的目标即为: arg min ⁡ α , g L ( G m ) = arg min ⁡ α , g 1 N ∑ i = 1 N L ( ∑ t = 1 m − 1 α t g t ( x i ) + α g ( x i ) , y i ) \argmin\limits_{\alpha,g}L(G_{m})=\argmin\limits_{\alpha,g}\frac{1}{N}\sum\limits_{i=1}^NL(\sum_{t=1}^{m-1}\alpha_tg_t(x_i)+\alpha g(x_i),y_i) α,gargminL(Gm)=α,gargminN1i=1NL(t=1m1αtgt(xi)+αg(xi),yi)上式中 α , g \alpha,g α,g相互影响,为方便运算,可考虑分离变量,逐个进行优化: arg min ⁡ α arg min ⁡ g 1 N ∑ i = 1 N L ( ∑ t = 1 m − 1 α t g t ( x i ) + α g ( x i ) , y i ) \argmin\limits_{\alpha}\argmin\limits_{g}\frac{1}{N}\sum\limits_{i=1}^NL(\sum_{t=1}^{m-1}\alpha_tg_t(x_i)+\alpha g(x_i),y_i) αargmingargminN1i=1NL(t=1m1αtgt(xi)+αg(xi),yi)其中 g g g可视为对目标子学习器的优化,而 α \alpha α可视为对目标子学习器权重的优化。

假设损失函数 L L L为凸函数,则自然引入梯度下降法来解决上述最优化问题。

回忆下凸函数 f ( x ) f(x) f(x)的一阶泰勒展开: f ( x ) ≈ f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x)\approx f(x_0)+f'(x_0)(x-x_0) f(x)f(x0)+f(x0)(xx0)。若 f ′ ( x 0 ) < 0 f'(x_0)<0 f(x0)<0,则随着 x x x的增加, f ( x ) f(x) f(x)下降。也就是说梯度下降的方向指向目标凸函数值减小的方向。其参数更新公式为: θ : = θ − μ ∂ f ∂ θ \theta:=\theta-\mu\frac{\partial f}{\partial \theta} θ:=θμθf

对于函数的函数优化目标(即泛函),有着同样的函数空间内定义的梯度下降法: g : = g − μ ∂ L ∂ g g:=g-\mu\frac{\partial{L}}{\partial g} g:=gμgL式中 g g g为函数, L L L为函数的函数, α \alpha α为学习率。

将上述梯度下降法应用到Boosting框架中,可写为: G m ( x ) = G m − 1 ( x ) − μ ∂ L ( G m − 1 ( x ) , y ) ∂ G m − 1 ( x ) G_{m}(x)=G_{m-1}(x)-\mu\frac{\partial L({G{_{m-1}(x),y)}}}{\partial G_{m-1}(x)} Gm(x)=Gm1(x)μGm1(x)L(Gm1(x),y)

将上式与加法模型 G m ( x ) = G m − 1 ( x ) + α m g m ( x ) G_m(x)=G_{m-1}(x)+\alpha_mg_m(x) Gm(x)=Gm1(x)+αmgm(x)对比,可知:
(1)理想中, g m ( x ) = − ∂ L ( G m − 1 ( x ) ) ∂ G m − 1 g_m(x)=-\frac{\partial L({G{_{m-1}(x))}}}{\partial G_{m-1}} gm(x)=Gm1L(Gm1(x)),或者说每轮子学习器的目标在于拟合前序模型损失函数的负梯度;
(2)权重 α \alpha α的意义在于沿着负梯度的移动大小。

基于上面的论述,完整的Gradient Boosting算法流程可整理为:
(1)选择基学习器类型 g g g
(2)模型初始化: G 0 ( x ) = arg min ⁡ g 1 N ∑ i = 1 N L ( g ( x i ) , y i ) G_0(x)=\argmin\limits_{g} \frac{1}{N} \sum\limits_{i=1}^NL(g(x_i),y_i) G0(x)=gargminN1i=1NL(g(xi),yi)
(3)在第 m m m轮子学习器的训练中,计算各样本点处负梯度: y ~ m , i = − ∂ L ( G m − 1 ( x i ) , y i ) ∂ G m − 1 ( x i ) \widetilde y_{m,i}=-\frac{\partial L(G_{m-1}(x_i),y_i)}{\partial G_{m-1}(x_i)} y m,i=Gm1(xi)L(Gm1(xi),yi)(3)用基学习器 g ( x ) g(x) g(x)来拟合上述负梯度 g ~ m , i \widetilde g_{m,i} g m,i,使得 g m ( x ) = arg min ⁡ g 1 N ∑ i = 1 N L ( g ( x i ) , y ~ m , i ) g_m(x)=\argmin\limits_{g}\frac{1}{N}\sum\limits_{i=1}^NL(g(x_i),\widetilde y_{m,i}) gm(x)=gargminN1i=1NL(g(xi),y m,i)(4)通过解析解或线性搜索法,寻找最优的步长 α m \alpha_m αm,以满足: α m = arg min ⁡ α 1 N ∑ i = 1 N L ( G m − 1 ( x i ) + α g m ( x ) , y i ) \alpha_m=\argmin\limits_{\alpha}\frac{1}{N}\sum\limits_{i=1}^NL(G_{m-1}(x_i)+\alpha g_m(x),y_i) αm=αargminN1i=1NL(Gm1(xi)+αgm(x),yi)(5)得到当前的总模型 G m ( x ) = G m − 1 ( x ) + α m g m ( x ) G_m(x)=G_{m-1}(x)+\alpha_m g_m(x) Gm(x)=Gm1(x)+αmgm(x)(6)迭代步骤(3)~(5),直至终止条件(一般设定子学习器的个数 M M M
(7)最终得到的模型为 G M ( x ) = ∑ m = 1 M α m g m ( x ) G_M(x)=\sum_{m=1}^M\alpha_mg_m(x) GM(x)=m=1Mαmgm(x)

三、将Gradient Boosting用于回归和分类问题

通过设置合理的损失函数,可将Gradient Boosting框架用于回归或分类问题。

3.1 回归问题

设置损失函数为平方损失,即可得到适用于回归问题的Gradient Boosting算法。

此时的负梯度 y ~ m , i = − ∂ ( G m − 1 ( x i ) − y i ) 2 ∂ G m − 1 ( x i ) = 2 ( y i − G m − 1 ( x i ) ) \widetilde y_{m,i}=-\frac{\partial (G_{m-1}(x_i)-y_i)^2}{\partial G_{m-1}(x_i)}=2(y_i-G_{m-1}(x_i)) y m,i=Gm1(xi)(Gm1(xi)yi)2=2(yiGm1(xi))。忽略常数项,这意味着每轮子学习器拟合的对象实质上就是当前模型的残差值 r m , i = y i − G m − 1 ( x i ) r_{m,i}=y_i-G_{m-1}(x_i) rm,i=yiGm1(xi)

Gradient Boosting在回归问题中的典型应用包括梯度提升回归树(GBDT Regressor)。

3.2 分类问题

通过将分类问题的损失函数定义为合适的凸函数,便可以将Gradient Boosting算法应用到分类问题中。

比如选用指数损失函数 exp ⁡ ( − y g ( x ) ) \exp(-yg(x)) exp(yg(x)),可以证明GB算法将退化为AdaBoosting算法。

Gradient Boosting在分类问题中的典型应用包括梯度提升分类树(GBDT Classifier)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值