来源 | AI小白入门
作者 | 文杰
编辑 | yuquanle
原文链接
本文介绍了提升树模型中的梯度提升树算法GBDT (Gradient Boosting Decision Tree) 。首先介绍了提升树通过拟合残差来提升学习器的设计思想。然后介绍了基于梯度提升的GBDT算法,核心在于学习器本身不再拟合残差,而是学习器拟合残差的一阶梯度,权重拟合残差的一阶系数。最后介绍了GBDT对应分类和回归场景的学习流程。
提升树
提升树GBDT同样基于最小化第m个学习器和前m−1个学习器累加起来损失函数最小,提升树采用残差的思想来最小化损失函数,将投票权重放到学习器上,使得基学习器的权重都为1。
GBDT将损失用一阶多项式拟合,基学习器拟合梯度,学习器的权重为一阶多项式的系数。
在前面的Adaboost中,我们需要学习M个基学习器,赋予不同的权重组合得到最后的强学习器。它是基于M个基学习器组合而成。而提升树中,直接将他们以“残差(损失函数的残差)”的形式累加起来,故也为加法模型,而且是逐步累加。
提升树模型如下:
fM(x)=m=1∑MT(x;θm)
其中,T(x,θm)表示决策树,θm为决策树的参数,M为树的个数。
提升树优化过程:
-
输入:训练集{(xi,yi)}i=1N,损失函数L(y,f(x))
-
输出:提升树fM(x)
-
初始化f0(x)=0
-
对m=1,2,...M
2.1 计算残差:
rmi=yi−fm−1(xi) ,{1,2,…,N}
2.2 拟合残差rmi学习基学习器T(x;θm),训练集为{(xi,rmi)}i=1N
2.3 更新模型:
fm(x)=fm−1(x)+T(x;θm)
-
得到最终的强学习器:
fM(x)=m=1∑MT(x;θm)
可以看出,提升树本质与Adboost一致,也是最小化第m个学习器和前m−1个学习器组合的损失函数,不同的是提升树采用决策树作为基学习器,采用残差的思想使得每个决策树的投票权重为1。
GBDT
GBDT是基学习器采用的Decision Tree的Gradient Boosting方法。Gradient Boosting模型与Adaboost的形式一致,采用M个基学习器的线性组合得到最终模型:
fM(x)=m∑γmT(x;θm)
首先确定初始模型,定义初始基学习器f0(x),当模型迭代到第m步时:
fm(x)=fm−1(x)+γmT(x;θm)
通过最小化损失来确定参数θm的值:
argθmmini∑L(yi,fm−1(xi)+γmT(x;θm))
这里有两种理解Gradient Boosting的方式,从优化角度可以理解是采用梯度下降算法,T表示负梯度方向,γm为步长。从模型角度我们可以理解为损失函数一阶多项式展开γmT(x,θm)+fm−1,而T表示一阶信息,γm为系数。
优化角度,保证损失函数在递减:
L(yi,fm(xi))<L(yi,fm−1(xi))
为了使得损失函数不断减少,即梯度下降:
fm(xi)=fm−1(xi)+γm(−∂fm−1(xi)∂L(yi,fm−1(xi)))
将fm(x)=fm−1(x)+γmT(x;θm)代入上式有:
T(x;θm)=−∂fm−1(xi)∂L(yi,fm−1(xi))
所以Gradient Boosting 的算法流程如下:
-
输入:训练集{(xi,yi)}i=1N,损失函数L(y,f(x))
-
输出:fM(x)
-
初始化f0(x)=0;
-
对m=1,2,...M:
2.1 计算梯度:
rmi=[−∂f(xi)∂L(yi,f(xi))]f(xi)=fm−1(x) ,{1,2,…,N}
2.2 拟合梯度rmi学习基学习器T(x;θm),训练集为{(xi,rmi)}i=1N;
2.3 根据梯度下降算法,计算学习器γm:
γm=argγmini∑L(yi,fm−1(xi)+γT(x;θm))
2.4 更新模型: fm(x)=fm−1(x)+γmT(x;θm)
-
得到最终的强学习器:
fM(x)=m=1∑MγmT(x;θm)
可以看出Gradient Boosting 是一个不断基于残差弥补的模型,目标不断地减少Bais,而没有关注Variance。它不像随机森林的集成引入随机性减少Variance的思想。
下面考虑决策树为基学习器的Gradient Boosting的方法GBDT,其在GB基础上有两点值得一提:
-
GBDT,采用决策树作为基函数将样本划分到固定数目J个决策区间Rmj,j=1,2..J,m=1,2..M;
-
在决策树中决策函数采用指示函数I(x∈Rmj),梯度与步长的积直接放到γmj上。
下面给出GBDT回归和分类两个问题的算法流程
GBDT 回归
-
输入:训练集{(xi,yi)}i=1N,xi∈Rn,y∈R,损失函数L(y,f(x))
-
输出:fM(x)
- 初始时给出一个最优的偏置常数c,f0(x)=c:
f0(x)=argcmini∑L(yi,c)
- 对m=1,2,...M
a)计算梯度:
rmi=[−∂f(xi)∂L(yi,f(xi))]f(xi)=fm−1(x) ,{1,2,…,N}
b)拟合梯度rmi学习一个回归树T(x;θm)=αI(x∈Rmj),产生J个决策区间Rmj,j=1,2..J;
c)对于决策区间j=1,2..J,计算γmj:
γmj=argγminxi∈Rmj∑L(yi,fm−1(xi)+γmjI(x∈Rmj))
d)更新模型: fm(x)=fm−1(x)+j=1∑JγmjI(x∈Rmj)
- 得到最终的强学习器:
fM(x)=m=1∑Mj=1∑JγmjI(x∈Rmj)
GBDT分类
考虑K分类问题,采用Softmax思想,将K类映射到K维。第m个决策树的决策第k维的值为fM,k(x),对输出进行Softmax归一化,可以得到k类的概率为pm,k(x),K类的概率和∑kpm,k(x)=1,分类损失函数采用交叉熵损失。
pm,k(x)=∑l=1Kexp(fm,l(x))exp(fm,k(x)), k=1,…,K
似然函数为:
L(yi,fm(xi))=k=1∏K[fm,k(xi)]yik
对数损失函数为:
L(yi,fm(xi))=−k=1∑Kyiklogfm,k(xi)
由于Softmax将分类映射到K维,对应的基分类器和损失函数都是K维。因此算法流程中负梯度方向也是一个K维向量。
算法流程:
-
输入:训练集{(xi,yi)}i=1N,xi∈Rn,y∈R,损失函数L(y,f(x))
-
输出:fM(x)
-
初始时f0,k(x)=0
-
对m=1,2,...M
2.1 对决策树fm−1,k进行Softmax归一化:
pm−1,k(x)=∑l=1Kexp(fm−1,l((x))exp(fm−1,k(x)), k=1,…,K
2.2 对k=1,2..K:
2.2.1 计算梯度:
rik=∂fm−1,k(xi)∂L(yi,fm−1(xi))=yik–pm−1,k(xi), i=1,2,…N
2.2.2 拟合梯度rik学习第m个决策树T(x;θm)=αI(x∈Rmkj)在第k维产生的J个决策区间Rmkj,j=1,2..J:
rik=∂fm−1,k(xi)∂L(yi,fm−1(xi))=yik–pm−1,k(xi), i=1,2,…N
2.2.3 计算第m颗树第k维在区间Rmj的参数γmkj:
γmkj=KK−1∑xi∈Rmkj∣rik∣(1−∣rik∣)∑xi∈Rmkjrik, j=1,2,...,
2.2.4 更新模型:
fm,k(x)=fm−1,k(x)+j=1∑JγmkjI(x∈Rmkj)
-
得到最终的强学习器:
fM(x)=m=1∑Mj=1∑JγmjI(x∈Rmj)
GBDT到此,可以看出Boosting的这些方法,都是前向分步加法模型,分类回归采用不同的损失函数,加法模型都是考虑学习M模型来不断地减小损失函数,即第m个模型的学习是基于前m−1个模型组合起来最小化损失函数。
Adboost是基于最小化损失函数在导数为0处取到,针对二分类问题导出样本系数,决策器权重系数,决策树。
提升树是基于残差思想最小化损失函数,使得决策树的权重为1。GBDT采用一阶多项式来拟合残差,进而导出梯度提升的思想。GBDT中γmTm存在冗余项,在GBDT中用决策树拟合梯度,γ来确定步长。
更多AI、NLP干货资源请关注公众号:AI小白入门(ID: StudyForAI):