最近看了Friedman的关于梯度提升算法的论文,记录一下。
Gradiant Boosting Machine

1 函数估计

  在机器学习领域,算法就是利用数据去估计一个函数或就是一个“预测学习”问题。用训练数据得到一个估计的F*(x),这个函数将x映射到y,然后我们通过最小化一个损失函数,求出我们想要的F(x),即:

F=argminFEy,xL(y,F(x))=argminFEx[EyL(y,F(x))|x](1)

L(y,f(x))包括军方误差(yF)2,binomial log-likelihood(logic regression)等
常见的套路就是限定F(x)是某个参数化的函数空间里的一个函数F(x;P)P={P1,P2}是一个有限集合,这里我们只考虑加法模型
F(x;{βm,am})=m=1Mβmh(x;am)(2)

公式(2)其实是很多算法的核心思想,如神经网络、支持向量机等,这里只讨论h(x;am)是一个小的回归树。其中的参数包括分割变量、分割位置以及叶子节点的值。

1.1 数值优化

  通常,选择一个参数化的模型令

P=argminPΦ(P)(3)

这里
Φ(P)=Ex,yL(y,F(x;P))(4)

最后我们求得的最优函数就是:F(X)=F(x;P),也就是我们最终想要拟合出来的模型。数值优化的方法是用来求解(3),而最终的参数P对应的结果可以表达成
P=Mm=0pm的形式。

1.2 梯度下降

  梯度下降是最简单数值优化的方法之一,而对于(3)式来说,当前的梯度为

gm=gjm=[Φ(P) pj]p=pm1

其中
Pm1=m1i=0pi


pm=ρmgm


ρm=argminρΦ(Pm1ρgm)(5)

用有限的数据来估计模型


按照式(1)则有
{βm,amM1}=argminNi=1L(yi,βmh(xi;am))(6)
在这种情况确实得到的是最优解,但是复杂度太高,很难求解。所以可以选择“贪心”算法。即对于m 1,2, M
(βm,am)=argminβ,ai=1NL(yi,Fm1(xi)+βh(xi;a))(7)

然后
Fm(x)=Fm1(x)+βmh(xi;am)(8)

在机器学习中,函数h(x;am)被称为弱学习器或者基于学习器,而这个迭代的过程被称为“boosting”。给一定一个Fm1(x),我们就可以用之前所述的梯度下降法,来求解β以及h(x;a).。给定特定的lossL(y,F)h(x;a),式(7)的解式很难求的。给定一个Fm1(x), βmh(x;am)可以被看成最佳的贪心算法,对F(x)的估计。
  求出损失函数在每一个训练数据的梯度,得出一个N维的向量。
gm(xii)={L(yi,F(xi))F(xi)}F(x)=Fm1(x)

但是这样求出来的梯度不能泛化的其他的数据上。一个方法是选择一个h(x;am)使得它求得的hm={h(xi;am)}尽可能的与gm平行
am=argmina,β[gm(xi)βh(xi;a)]2

求出a参数向量之后,就可以求出另外一个参数
βm=argmini=1Nl(yi,Fm1(xi)+βh(xi;am))

然后就可以更新
Fm(x)=Fm1(x)+βmh(x;am)

伪代码如下:
Gradiant Boosting Machine

相关文章:

  • 2021-12-18
  • 2022-12-23
  • 2021-09-04
  • 2021-04-18
  • 2021-06-28
  • 2022-01-24
  • 2021-05-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-09-14
  • 2021-08-21
  • 2021-12-29
  • 2021-11-28
  • 2021-10-01
  • 2021-11-25
相关资源
相似解决方案