Gradient Boost
2015-09-14 16:32
218 查看
对GBDT一直有所耳闻,但是从未深入地了解一下,这次仔细研究了一下Gradient Boost这个东东。
参数估计:在参数空间内进行数值优化(以参数作为变量)。
函数估计:在函数空间内进行数值优化(以函数作为变量)。
模型的含义:X−F∗(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表示其权重。
P∗=argminPΦ(P)=argminPEy,x[ϕ(y,F(x;P))]
得到最优模型F∗(x)=F(x;P∗)
若是采用梯度下降的思想进行参数寻优,则有P∗=∑Mm=0pm
此处对P∗理解为参数初始值与各处梯度的累计。
梯度下降+线性搜索
当前梯度:gm=gjm=[∂Φ(P)∂Pj]Pm−1,其中Pm−1=∑m−1i=0pi
线性搜索:ρm=argminρϕ(Pm−1−ρgm)
最速下降向量:pm=−ρmgm
可以变形得到Φ(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)=Fm−1(x)=Ey[∂K(F(x))∂F(x)|x]F(x)=Fm−1(x)
线性搜索:ρm=argminρEy,x[ϕ(y,Fm−1(x)−ρgm(x))]
在无限样本下,求个期望搞定总体目标;在有限样本下,可以计算均值。
假设每一步都能找到满足下面条件的解:
(βm,αm)=argminβ,α∑Ni=1ϕ(yi,Fm−1(xi)+βh(xi;α))
于是Fm(x)=Fm−1(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,Fm−1(xi)+βh(xi;αm))
下面给出在最小均方误差下的GB算法框架伪码:
——————————————————————————————————
Algorithm:Gradient Boost
F0(x)=argminβ∑Ni=1ϕ(yi,β)
任意给个模型函数,求使得损失最小的β,得到初始模型函数
For 1⩽m ⩽M
gm(xi)=[∂ϕ(yi,F(xi))∂F(xi)]F(x)=Fm−1(x)
αm=argminα∑Ni=1[−gm(xi)−βh(xi;α)]2
βm=argminβ∑Ni=1ϕ(yi,Fm−1(xi)+βh(xi;αm))
update F(x)
Fm(x)=Fm−1(x)+βmh(x;αm)
end For
——————————————————————————————————
从代码中也可以看到,这是个很强大的提升框架,我们可以任意调换h(x;α),只要能够求取均方误差即可。如果h为决策树时,则是GBDT。
损失函数,反映了模型与实际值之间的差距,其总和越小,表示模型对数据的拟合度越高,也反映了模型对数据分布的拟合越好。
期望,是某变量的总体均值,是评估整体的一个有效指标。
2.为什么需要线性搜索?
线性搜索,可以保证下降方向上移动最大,是下降步幅的控制。
3.有限样本与无限样本
无限样本下的期望是真实的反映;有限样本则是近似;
4.F的理解
F 作为模型函数,一直处于概念化的状态。
其中在参数空间内优化的过程中,没有明显地体现,只是在参数P上体现了不断累计的思想。
在函数空间内优化的过程中,则是表现为最好的模型函数是由一点点的增量函数累计起来的。
5.模型评估策略的选择
根据不同问题类型,可以有多重评估策略
回归问题:
可以选择最小均方误差策略[yi−F(xi)]2;
求导为:gm(xi)=−[yi−Fm−1(xi)]
也可以选择Least-squares|yi−F(xi)|;
求导得:gm(xi)=−sign[yi−Fm−1(xi)]
也可以选择其他的策略等等。
分类问题:
logistic likelihood crit
一开始想找个函数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,Fm−1(xi)+βh(xi;α))
这里看到βm和αm很难求得,怎办呢?
我们再仔细想想Fm(x)=Fm−1(xi)+βh(xi;α)的目的,是为了让现有的m−1次函数Fm−1(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,Fm−1(xi)+βh(xi;αm))
然后Fm(x)=Fm−1(x)+βmh(x;αm)
至此,也就将additive expension 与gradient 结合起来了。
举例:
如果损失函数为∑Ni=1[yi−F(xi)]2,那么每次求导,都是∑Ni=1(F(xi)−yi),新的h(x;αm)是在降低前面m−1个函数组合与真值之间的残差的。
2) http://www.cnblogs.com/LeftNotEasy/archive/2011/03/07/1976562.html
基本知识
在正式介绍之前,先普及些基本知识。后面重点介绍Gradient Boost 的思想。参数估计:在参数空间内进行数值优化(以参数作为变量)。
函数估计:在函数空间内进行数值优化(以函数作为变量)。
模型的含义:X−F∗(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]Pm−1,其中Pm−1=∑m−1i=0pi
线性搜索:ρm=argminρϕ(Pm−1−ρ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)=Fm−1(x)=Ey[∂K(F(x))∂F(x)|x]F(x)=Fm−1(x)
线性搜索:ρm=argminρEy,x[ϕ(y,Fm−1(x)−ρgm(x))]
Gradient Boost 的基本流程
实际上,我们只是了解了上面的函数优化,是不能解决实际问题的,只是了解了大体思想。怎么找到函数增量呢?在实际有限的样本集下,如何计算函数增量是关键。在无限样本下,求个期望搞定总体目标;在有限样本下,可以计算均值。
假设每一步都能找到满足下面条件的解:
(βm,αm)=argminβ,α∑Ni=1ϕ(yi,Fm−1(xi)+βh(xi;α))
于是Fm(x)=Fm−1(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,Fm−1(xi)+βh(xi;αm))
下面给出在最小均方误差下的GB算法框架伪码:
——————————————————————————————————
Algorithm:Gradient Boost
F0(x)=argminβ∑Ni=1ϕ(yi,β)
任意给个模型函数,求使得损失最小的β,得到初始模型函数
For 1⩽m ⩽M
gm(xi)=[∂ϕ(yi,F(xi))∂F(xi)]F(x)=Fm−1(x)
αm=argminα∑Ni=1[−gm(xi)−βh(xi;α)]2
βm=argminβ∑Ni=1ϕ(yi,Fm−1(xi)+βh(xi;αm))
update F(x)
Fm(x)=Fm−1(x)+βmh(x;αm)
end For
——————————————————————————————————
从代码中也可以看到,这是个很强大的提升框架,我们可以任意调换h(x;α),只要能够求取均方误差即可。如果h为决策树时,则是GBDT。
几个关键点的解释
1.为什么总体目标是求损失函数的期望?损失函数,反映了模型与实际值之间的差距,其总和越小,表示模型对数据的拟合度越高,也反映了模型对数据分布的拟合越好。
期望,是某变量的总体均值,是评估整体的一个有效指标。
2.为什么需要线性搜索?
线性搜索,可以保证下降方向上移动最大,是下降步幅的控制。
3.有限样本与无限样本
无限样本下的期望是真实的反映;有限样本则是近似;
4.F的理解
F 作为模型函数,一直处于概念化的状态。
其中在参数空间内优化的过程中,没有明显地体现,只是在参数P上体现了不断累计的思想。
在函数空间内优化的过程中,则是表现为最好的模型函数是由一点点的增量函数累计起来的。
5.模型评估策略的选择
根据不同问题类型,可以有多重评估策略
回归问题:
可以选择最小均方误差策略[yi−F(xi)]2;
求导为:gm(xi)=−[yi−Fm−1(xi)]
也可以选择Least-squares|yi−F(xi)|;
求导得:gm(xi)=−sign[yi−Fm−1(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,Fm−1(xi)+βh(xi;α))
这里看到βm和αm很难求得,怎办呢?
我们再仔细想想Fm(x)=Fm−1(xi)+βh(xi;α)的目的,是为了让现有的m−1次函数Fm−1(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,Fm−1(xi)+βh(xi;αm))
然后Fm(x)=Fm−1(x)+βmh(x;αm)
至此,也就将additive expension 与gradient 结合起来了。
举例:
如果损失函数为∑Ni=1[yi−F(xi)]2,那么每次求导,都是∑Ni=1(F(xi)−yi),新的h(x;αm)是在降低前面m−1个函数组合与真值之间的残差的。
参考文献
1) Greedy Function Approximation : A Gradiented Boosting Machine.2) http://www.cnblogs.com/LeftNotEasy/archive/2011/03/07/1976562.html
相关文章推荐
- 顺序表的基本算法
- 网络地址转换NAT
- Android OpenGL 学习笔记
- Android系统自带样式(android:theme)详解 (
- 3.仿微信--注册界面 布局实现
- 如何将service与activity绑定
- MyEclipse中SVN的使用方法
- IOS启动其他应用程序
- 暂时告一段落了,明年再来
- leetcode 104: Maximum Depth of Binary Tree
- Quick-Cocos2d-x初学者游戏教程(九) ------------------- 障碍物和奖励品
- zookeeper 集群安装
- 从今天起开始写博客记日记,向自我宣战
- hdu 1199 Color the Ball vector使用
- 最简单的视频网站(JavaEE+FFmpeg)
- nodejs发送邮件
- android APP UI设计图标注、换算
- Django 环境搭建
- Quick-Cocos2d-x初学者游戏教程(八)----------------- 物理引擎和角色
- Implement strStr()