本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1. 梯度提升(Gradient Boosting)的思想
Gradient Boosting和Adaptive Boosting都属于boosting类集成学习算法,也即通过多轮迭代得到多个基学习器,然后将多个基学习器加权求和。
fm(x)=fm−1(x)+ρmhm(x)(1-1)
不同之处在于,Adaptive Boosting在某次迭代过程中训练该轮基学习器时,会增大上一轮犯错样本的权重;而Gradient Boosting在某次迭代时,会拟合上一轮基学习器的负梯度。
为什么拟合上一轮的负梯度能work?我们知道机器学习中最小化损失函数L(θ)时,往往会利用梯度下降法来更新θ:
θ=θ−α⋅∂θ∂L(θ)(1-2)
如果把θ换成基学习器fm(x),上述表达式也是可以用来更新基学习器的(具体的严格证明需要用到泛函分析的理论):
fm(x)=fm−1(x)−ρm⋅∂fm−1(x)∂L(y,fm−1(x))(1-3)
其中L(y,fm−1(x))=∑i=1NL(yi,fm−1(xi))
{1−3}意味着,我们是用第m轮的基学习器hm(x)去拟合上一轮损失函数关于fm−1(x)的负梯度,从而达到通过梯度下降法最小化L(f).该方法也叫函数空间的梯度下降法。
2. gradient boosting的通用算法流程
这里我们暂时不关心基学习器的具体表达式,把GBDT的通用算法流程列下来:
- 初始化:f0(x)=argγmin∑i=1NL(yi,γ)
- for m=1 to M:
(a)计算函数空间负梯度:yi~=∂fm−1(xi)∂L(yi,fm−1(xi)),i=1,⋯,N
(b)通过最小化平方误差,来得到hm(x):wm=argwmin∑i=1N(yi~−hm(xi;w))2
(c)使用line search确定系数ρm:ρm=argminρ∑i=1NL(yi,fm−1(xi)+ρhm(xi;wm))
(d)更新基学习器:fm(x)=fm−1+ρmhm(x;wm)
- 输出最终的fM(x)
3. 将回归树作为基学习器,得到GBDT算法
3.1. 回归树介绍
在GBDT中,基学习器是决策树。因为基学习器要拟合的是负梯度,可以认为是个回归问题,因此我们来介绍一些回归树的基本概念。
决策树本质上可以看做一个分段函数,把特征空间分为多个互相独立的子区域:
图片来源www.cnblogs.com/massquantit…
因此单棵决策树在数学上可以表示为
h(x;{Rj,bj}1J=j=1∑JbjI(x∈Rj)(3-1)
其中{Rj}1J代表决策树划分出的J个子空间(每个子空间对应一个叶结点),{bj}1J代表各个子空间输出的值。
3.2. 将回归树应用到gradient boosting中
因此第2章里面的2.(b)可以写成:
{Rjm}1J=arg{Rjm}1Jmini=1∑N(yi~−hm(xi;{Rjm,bjm}1J))2(3-2)
对应的bjm=x∈Rjmmean yi~是该区域的平均值。(之所以可以先划分区域再求b,是因为不论怎么划分区域,b取该区域内所有值的平均值,总能最小化均方误差,因此可以先后求)
注意到2.(c)中求出的ρm对于所有子区域是一样的,这样不一定是最优的,因此可以采用如下方式优化求取最优的γjm=ρjmbjm:
γjm=argγminxi∈Rjm∑L(yi,fm−1(xi)+γ)(3-3)
3.3. GBDT算法流程
最终得到GBDT的算法流程:
- 初始化:f0(x)=argγmin∑i=1NL(yi,γ)
- for m=1 to M:
(a)计算函数空间负梯度:yi~=∂fm−1(xi)∂L(yi,fm−1(xi)),i=1,⋯,N
(b)通过最小化平方误差,来得到子区域划分方式(也即得到最终的决策树):{Rjm}1J=arg{Rjm}1Jmin∑i=1N(yi~−hm(xi;{Rjm,bjm}1J))2
(c)使用line search确定子区域最终输出:γjm=argγmin∑xi∈RjmL(yi,fm−1(xi)+γ)
(d)更新基学习器:fm(x)=fm−1+∑j=1JγjmI(x∈Rjm)
- 输出最终的fM(x)
参考
www.cnblogs.com/massquantit…