Gradient Boost

来源:互联网 发布:网络写作和传统写作 编辑:程序博客网 时间:2024/05/18 03:35

  对GBDT一直有所耳闻,但是从未深入地了解一下,这次仔细研究了一下Gradient Boost这个东东。

基本知识

  在正式介绍之前,先普及些基本知识。后面重点介绍Gradient Boost 的思想。
  参数估计:在参数空间内进行数值优化(以参数作为变量)。
  函数估计:在函数空间内进行数值优化(以函数作为变量)。
  模型的含义:XF(x)>y其中F(x)表示由属性到目标变量的最优映射函数,”最优”体现为F(x)满足样本集 {x,y} 的分布。
  总体目标抽象为损失函数ϕ(y,F(x))的期望最小化:
  F(x)=argminF(x)Ey,x[ϕ(y,F(x))]
  Additive Expensions: 对模型函数的拓展
  F(x)=F(x;P)=Mm=0βmh(x;αm)
  其中h(x;αm)表示弱学习器;βm表示其权重。

数值优化在参数空间内的基本流程

  选择一个参数化的模型F(x;P),就将函数优化变成了一个参数优化问题。
  P=argminPΦ(P)=argminPEy,x[ϕ(y,F(x;P))]
  得到最优模型F(x)=F(x;P)
  若是采用梯度下降的思想进行参数寻优,则有P=Mm=0pm
  此处对P理解为参数初始值与各处梯度的累计。
  梯度下降+线性搜索
  当前梯度:gm=gjm=[Φ(P)Pj]Pm1,其中Pm1=m1i=0pi
  线性搜索:ρm=argminρϕ(Pm1ρgm)
  最速下降向量:pm=ρmgm

数值优化在函数空间内的基本流程

  F(x)x看做参数,有几个x就有几个参数。
  可以变形得到Φ(F(x))=Ey,xϕ(y,F(x))=Ex[Ey(ϕ(y,F(x))|x)]
  其中K(F(x))=Ey[ϕ(x,F(x))|x]是在某个样本下,衡量变量F(x)的损失函数的期望。
  若是采用梯度下降的思想进行函数寻优,则有F(x)=Mm=0fm(x)
  此处对F的理解为初始函数与个函数增量的累计。
  梯度下降+线性搜索
  当前梯度:
  gm(x)=[Ey[K(F(x))]F(x)]F(x)=Fm1(x)=Ey[K(F(x))F(x)|x]F(x)=Fm1(x)
  线性搜索:ρm=argminρEy,x[ϕ(y,Fm1(x)ρgm(x))]

Gradient Boost 的基本流程

  实际上,我们只是了解了上面的函数优化,是不能解决实际问题的,只是了解了大体思想。怎么找到函数增量呢?在实际有限的样本集下,如何计算函数增量是关键。
  在无限样本下,求个期望搞定总体目标;在有限样本下,可以计算均值。
  假设每一步都能找到满足下面条件的解:
  (βm,αm)=argminβ,αNi=1ϕ(yi,Fm1(xi)+βh(xi;α))
  于是Fm(x)=Fm1(x)+βmh(x;αm)
  这是抽象出来的式子,比较难以搞定βm,αm的求解问题。
  想个办法:
  h(x;α)是使得F(x)超着好的方向去的;而gm(x)也是同样作用,这两者是相似的作用,那么岂不是强相关的。(这是个很绝妙的点子~
  方法有了:
  取αm=argminαNi=1[gm(xi)βh(xi;α)]2
  βm=argminβNi=1ϕ(yi,Fm1(xi)+βh(xi;αm))
  下面给出在最小均方误差下的GB算法框架伪码:
——————————————————————————————————
Algorithm:Gradient Boost
  F0(x)=argminβNi=1ϕ(yi,β)
  使β
  For 1m M
   gm(xi)=[ϕ(yi,F(xi))F(xi)]F(x)=Fm1(x)
   αm=argminαNi=1[gm(xi)βh(xi;α)]2
   βm=argminβNi=1ϕ(yi,Fm1(xi)+βh(xi;αm))
   update F(x)
   Fm(x)=Fm1(x)+βmh(x;αm)
  end For
——————————————————————————————————
  从代码中也可以看到,这是个很强大的提升框架,我们可以任意调换h(x;α),只要能够求取均方误差即可。如果h为决策树时,则是GBDT。

几个关键点的解释

  1.为什么总体目标是求损失函数期望
  损失函数,反映了模型与实际值之间的差距,其总和越小,表示模型对数据的拟合度越高,也反映了模型对数据分布的拟合越好。
  期望,是某变量的总体均值,是评估整体的一个有效指标。
  2.为什么需要线性搜索
  线性搜索,可以保证下降方向上移动最大,是下降步幅的控制。
  3.有限样本与无限样本
  无限样本下的期望是真实的反映;有限样本则是近似;
  4.F的理解
  F 作为模型函数,一直处于概念化的状态。
  其中在参数空间内优化的过程中,没有明显地体现,只是在参数P上体现了不断累计的思想。
  在函数空间内优化的过程中,则是表现为最好的模型函数是由一点点的增量函数累计起来的。
  5.模型评估策略的选择
  根据不同问题类型,可以有多重评估策略
  回归问题:
  可以选择最小均方误差策略[yiF(xi)]2
  求导为:gm(xi)=[yiFm1(xi)]
  也可以选择Least-squares|yiF(xi)|
  求导得:gm(xi)=sign[yiFm1(xi)]
  也可以选择其他的策略等等。
  分类问题:
  logistic likelihood crit

思考

  抛开推导,让我们再理一理GB思路。
  一开始想找个函数F(x),使得其尽可量地满足样本集(x,y)的分布。于是有了损失函数Φ(F(x))=ϕ(y,F(x))的期望最小化问题。
  F(x)=argminF(x)Ey,x[ϕ(y,F(x))]
  但是我们希望能够使得F(x)的形式能够是这个样子的:
  F(x)=F(x;P)=Mm=0βmh(x;αm)
  如果每次迭代(此处迭代隐藏在M中,也与后面的梯度思想相对应)的时候,能够找到一个h(x;α)多好啊。
  那么每一次迭代的时候,就变成了这么个问题:
  (βm,αm)=argminβ,αNi=1ϕ(yi,Fm1(xi)+βh(xi;α))
  这里看到βmαm很难求得,怎办呢?
  我们再仔细想想Fm(x)=Fm1(xi)+βh(xi;α)的目的,是为了让现有的m1次函数Fm1(x)往更好地方向靠近一些。
  而损失函数Φ(F(x))F求导数,则也是在寻找前往F(x)更好地方向。
  所以这里可以解决一个大大问题:h(x;αm)如何确定,即αm如何找到。
  既然这俩打算干的事情一样,那岂不是他俩差距越小,越可能是αm
  则有αm=argminαNi=1[gm(xi)βh(xi;α)]2
  解决了αm,那么再找βm就好办多了。
  βm=argminβNi=1ϕ(yi,Fm1(xi)+βh(xi;αm))
  然后Fm(x)=Fm1(x)+βmh(x;αm)
  至此,也就将additive expension 与gradient 结合起来了。
举例:
  如果损失函数为Ni=1[yiF(xi)]2,那么每次求导,都是Ni=1(F(xi)yi),新的h(x;αm)是在降低前面m1个函数组合与真值之间的残差的。

参考文献

1) Greedy Function Approximation : A Gradiented Boosting Machine.
2) http://www.cnblogs.com/LeftNotEasy/archive/2011/03/07/1976562.html

0 0