gbdt基本原理

亡梦爱人 提交于 2020-02-14 13:27:15

为什么要建立多棵树

函数空间上的梯度下降

设样本为(xj,yj),j=1,2,,n\begin{array}{rcl}(x^j,y^j),j=1,2,\cdots,n\end{array}
对于回归问题,损失函数为
L=j=1nl(xj,yj,fj)=L(f1,f2,,fj)=L(F) \begin{array}{rcl}L&=&\sum_{j=1}^nl(x^j,y^j,f^j)\\&=&L(f^1,f^2,\cdots,f^j)\\&=&L(F)\end{array}
对于二分类问题,损失函数为
L=j=1nl(xj,yj,σ(fj))=L(f1,f2,,fj)=L(F) \begin{array}{rcl}L&=&\sum_{j=1}^nl(x^j,y^j,\sigma(f^j))\\&=&L(f^1,f^2,\cdots,f^j)\\&=&L(F)\end{array}
F是多维函数(f1,f2,,fj)(f^1,f^2,\cdots,f^j)
目的要求
F=argminFL(F) F=\underset F{argmin}L(F)

根据梯度下降有
F0=F0F1=F0ηLF=F0Fi=Fi1ηLF=Fi1 F_0=F_0\\F_1=F_0-\eta\nabla L\vert_{F=F_0}\\\cdots\\F_i=F_{i-1}-\eta\nabla L\vert_{F=F_{i-1}}
所以有
F=F0+ηi=0mLF=Fi F=F_0+\eta\sum_{i=0}^m-\nabla L\vert_{F=F_i}
取每个维度,
fj=f0j+ηi=0mLfjfj=fij=f0j+ηi=0mlfjfj=fijj=1,2,,n \begin{array}{rcl}f^j&=&f_0^j+\eta\sum_{i=0}^m-{\textstyle\frac{\partial L}{\partial f^j}}\vert_{f^j=f_i^j}\\&=&f_0^j+\eta\sum_{i=0}^m-{\textstyle\frac{\partial l}{\partial f^j}}\vert_{f^j=f_i^j}\\j&=&1,2,\cdots,n\end{array}
fjf^j看成函数ff,即
f={f1,x=x1f2,x=x2fn,x=xn=f(x) \begin{array}{rcl}f&=&\left\{\begin{array}{c}\begin{array}{c}\begin{array}{c}f^1,x=x^1\\f^2,x=x^2\end{array}\end{array}\\\cdots\\f^n,x=x^n\end{array}=f(x)\right.\end{array}
所以
f=f0+ηi=0mlff=fi f=f_0+\eta\sum_{i=0}^m-{\textstyle\frac{\partial l}{\partial f}}\vert_{f=f_i}

T0=f0T1=lff=f0Ti=lff=fi T_0=f_0\\T_1=-{\textstyle\frac{\partial l}{\partial f}}\vert_{f=f_0}\\\cdots\\T_i=-{\textstyle\frac{\partial l}{\partial f}}\vert_{f=fi}

f=T0  +ηT1++ηTi f=T_0\;+\eta T_1+\cdots+\eta T_i
T0T_0为初始函数,可以随意定。
对于基分类器TiT_i,则有
Ti(x)={lff=fi1,x=x1lff=fi2,x=x2lff=fin,x=xn T_i(x)=\left\{\begin{array}{c}\begin{array}{c}\begin{array}{c}-\frac{\partial l}{\partial f}\vert_{f=f_i^1},x=x^1\\-\frac{\partial l}{\partial f}\vert_{f=f_i^2},x=x^2\end{array}\end{array}\\\cdots\\-\frac{\partial l}{\partial f}\vert_{f=f_i^n},x=x^n\end{array}\right.

残差推导

对于回归问题,取平方损失l=(yjf)2l=(y^j-f)^2,则有
Ti=lff=fi=2(fiyj)T_i=-{\textstyle\frac{\partial l}{\partial f}}\vert_{f=f_i}=2(f_i-y^j)
对于二分类问题,取交叉熵损失l=yjln(σ(f))+(1yj)ln(1σ(f))l=y^jln(\sigma(f))+(1-y^j)ln(1-\sigma(f)),则有
Ti=lff=fi=σ(fi)yjT_i=-{\textstyle\frac{\partial l}{\partial f}}\vert_{f=f_i}=\sigma(f_i)-y^j

建树过程

第一棵树

第一棵树只有一个根节点,即对所有的xjx^j,都有唯一的输出c。
对于回归问题
T0=c=argminc(L(c))=argminc(j=1nl(xj,yj,c))=argminc(j=1n(cyj)2) T_0=c=\underset c{argmin}(L(c))\\=\underset c{argmin}(\sum_{j=1}^nl(x^j,y^j,c))\\=\underset c{argmin}(\sum_{j=1}^n{(c-y^j)}^2)
求导得到
Lc=2j=1ncyj=0 \frac{\partial L}{\partial c}=2\sum_{j=1}^nc-y^j=0
解得
c=1nj=1nyj c=\frac1n\sum_{j=1}^ny^j
对于二分类问题
T0=c=argminc(L(c))=argminc(j=1nl(xj,yj,σ(c)))=argminc(j=1nyjln(σ(c))+(1yj)ln(1σ(c))) T_0=c=\underset c{argmin}(L(c))\\=\underset c{argmin}(\sum_{j=1}^nl(x^j,y^j,\sigma(c)))\\=\underset c{argmin}(\sum_{j=1}^ny^jln(\sigma(c))+(1-y^j)ln(1-\sigma(c)))
求导得到
Lc=j=1n(σ(c)yj)=0 \frac{\partial L}{\partial c}=\sum_{j=1}^n(\sigma(c)-y^j)=0
解得
c=σ1(1nj=1nyj) c=\sigma^{-1}(\frac1n\sum_{j=1}^ny^j)

第i棵树

如何分裂

这里选择CART回归树,对特征排序,遍历分裂点,把样本分为两个组,L和R
G=min(yjL(yjc1)2+yjR(yjc2)2) G=min(\sum_{y^j\in L}{(y^j-c_1)}^2+\sum_{y^j\in R}{(y^j-c_2)}^2)
解得
c1=1LyjLyjc2=1RyjRyj c_1=\frac1L\sum_{y^j\in L}y^j\\c_2=\frac1R\sum_{y^j\in R}y^j
取能够使G达到最小的特征及其对应的分裂点

如何取值

如何计算c
对于回归问题
c=argminc(yjRl(xj,yj,fij+c))=argminc(yjR(fij+cyj)2) c=\underset c{argmin}(\sum_{y^j\in R}l(x^j,y^j,f_i^j+c))\\=\underset c{argmin}{(\sum_{y^j\in R}(f_i^j+c-y^j)}^2)
解得
c=1RyjR(yjfij) c=\frac1R\sum_{y^j\in R}(y^j-f_i^j)
对于分类问题
c=argminc(yjRl(xj,yj,σ(fij+c)))=argminc(yjRyjln(σ(fij+c))+(1yj)ln(1σ(fij+c))) c=\underset c{argmin}(\sum_{y^j\in R}l(x^j,y^j,\sigma(f_i^j+c)))\\=\underset c{argmin}{(\sum_{y^j\in R}} y^jln(\sigma(f_i^j+c))+(1-y^j)ln(1-\sigma(f_i^j+c)))
令导数为0
Lc=jR(yjσ(fij+c))=0 \frac{\partial L}{\partial c}=\sum_{j\in R}(y^j-\sigma(f_i^j+c))=0
该函数的导数为
2Lc2=jRσ(fij+c)(1σ(fij+c))<0 \frac{\partial^2L}{\partial c^2}=-\sum_{j\in R}\sigma(f_i^j+c)(1-\sigma(f_i^j+c))<0
函数递减,图像如下
在这里插入图
利用牛顿一阶近似求零点,左边直线方程为
y=kx+b y=kx+b
k=2Lc2c=0=jRσ(fij)(1σ(fij))b=Lcc=0=jRyjσ(fij) k=\frac{\partial^2L}{\partial c^2}|_{c=0}=-\sum_{j\in R}\sigma(f_i^j)(1-\sigma(f_i^j))\\ b=\frac{\partial L}{\partial c}|_{c=0}=\sum_{j\in R}y^j-\sigma(f_i^j)
所以左边比较靠近c的红色圆圈的点的坐标为
c^=bk=jRyjσ(fij)jRσ(fij)(1σ(fij)) \widehat c=-\frac bk=\frac{\sum_{j\in R}y^j-\sigma(f_i^j)}{\sum_{j\in R}\sigma(f_i^j)(1-\sigma(f_i^j))}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!