GBDT原理小结

       最近在做文本分类的工作,使用到了XGBoost用于多分类。因此本文针对自己学习的XGBoost相关知识进行简单记录,并延伸了GBDT的相关理论知识。

一、监督学习算法

       监督学习算法主要有以下三个重要组成部分:

  • 模型
  • 参数
  • 目标函数
1、模型

       模型是指给定输入 x i x_{i} xi如何去预测输出 y i y_{i} yi,比较常见的模型有线性模型,采用线性叠加的方式进行预测:
y i ^ = ∑ j ω j x i j \hat{y_{i}}=\sum_{j}\omega _{j}x_{ij} yi^=jωjxij
       这里的预测y可以有不同的解释,比如我们可以用它来作为回归目标的输出,或者进行sigmoid 变换得到概率,或者作为排序的指标等。 而一个线性模型根据y的解释不同(以及设计对应的目标函数)用到回归,分类或排序等场景。

2、参数

       参数是指我们学习到的东西,在线性模型中,参数是指我们的线性系数 ω \omega ω

3、目标函数

       模型和参数指定了在给定输入的情况下如何进行预测,但是没有告诉我们如何去寻找一个比较好的参数。目标函数就是为了确定最优参数而产生的,目标函数主要由损失函数和正则项两部分组成。损失函数 L ( θ ) L\left ( \theta \right ) L(θ)用于描述模型拟合数据的程度,正则项 Ω ( θ ) \Omega \left ( \theta \right ) Ω(θ)用于控制模型的复杂度。
O b j ( θ ) = L ( θ ) + Ω ( θ ) Obj\left ( \theta \right )=L\left ( \theta \right )+\Omega \left ( \theta \right ) Obj(θ)=L(θ)+Ω(θ)

二、GBDT

1、GBDT简介

       DT(Decision Tree)是决策树,GB(Gradient Boosting)是一种学习策略,GBDT的含义就是用Gradient Boosting的策略训练出来的DT模型。GBDT是一种用于回归、分类和排序任务的机器学习技术,属于Boosting算法族的一部分。Boosting是一族可将弱学习器提升为强学习器的算法,属于集成学习(ensemble learning)的范畴。Boosting方法基于以下思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断要好。
       GBDT是一个基于迭代累加的决策树算法,它通过构造一组弱的学习器(树),并把多棵决策树的结果累加起来作为最终的预测输出。
       树模型也分为决策树和回归树,决策树常用来分类问题,回归树常用来预测问题。决策树常用于分类标签值,比如用户性别、网页是否是垃圾页面、用户是不是作弊;而回归树常用于预测真实数值,比如用户的年龄、用户点击的概率、网页相关程度等等。由于GBDT的核心在于累加所有树的结果作为最终结果,而分类结果对于预测分类并不是这么的容易叠加,所以GBDT中的树都是回归树(其实回归树也能用来做分类)。同样的我们经常会把RandomForest的思想引入到GBDT里面来,即每棵树建树的时候我们会对特征和样本同时进行采样,然后对采样的样本和特征进行建树。

2、GBDT思路

       在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是 f t − 1 ( x ) f_{t-1}\left ( x \right ) ft1(x), 损失函数是 L ( y , f t − 1 ( x ) ) L\left (y, f_{t-1}\left ( x \right ) \right ) L(y,ft1(x)), 我们本轮迭代的目标是找到一个CART回归树模型的弱学习器 h t ( x ) h_{t}\left ( x \right ) ht(x),让本轮的损失函数 L ( y , f t ( x ) ) = L ( y , f t − 1 ( x ) + h t ( x ) ) L\left (y, f_{t}\left ( x \right ) \right )=L\left (y, f_{t-1}\left ( x \right ) +h_{t}\left ( x \right )\right) L(y,ft(x))=L(y,ft1(x)+ht(x))最小。也即是本轮迭代找到决策树,要让样本的损失尽量变得更小。
       GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。

3、GBDT的负梯度拟合

       上一节我们介绍了GBDT的思路,接下来我们解决损失函数拟合方法的问题。针对这个问题,大牛Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。第t轮的第i个样本的损失函数的负梯度表示为:
r t i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f t − 1 ( x ) r_{ti}=-\left [ \frac{\partial L\left (y_{i}, f\left ( x_{i} \right ) \right )}{\partial f\left ( x_{i} \right )} \right ]_{f\left ( x \right )=f_{t-1}\left ( x \right )} rti=[f(xi)L(yi,f(xi))]f(x)=ft1(x)
       利用 ( x i , r t i ) ( i = 1 , 2 , . . m ) (x_{i},r_{ti})(i=1,2,..m) (xi,rti)(i=1,2,..m),我们可以拟合一颗CART回归树,得到了第t棵回归树,其对应的叶节点区域是 R t j , j = 1 , 2... J R_{tj},j=1,2 ... J Rtj,j=1,2...J,其中J为第t棵树的叶子节点的个数。
       针对每一个叶子节点里的样本,我们求出使损失函数最小,也就是拟合叶子节点最好的的输出值 c t j c_{tj} ctj如下:
c t j = a r g m i n c ∑ x i ∈ R t j L ( y i , f t − 1 ( x i ) + c ) c_{tj}=argmin_{c}\sum_{x_{i}\in R_{tj}} L(y_{i}, f_{t-1}( x_{i} )+c) ctj=argmincxiRtjL(yi,ft1(xi)+c)
       这样我们就得到了本轮的决策树拟合函数如下,其中 I ( x ∈ R t j ) I(x\in R_{tj}) I(xRtj)表示如果 x ∈ R t j x\in R_{tj} xRtj,则 I ( x ∈ R t j ) = 1 I(x\in R_{tj})=1 I(xRtj)=1,否则等于0:
h t ( x ) = ∑ j = 1 J c t j I ( x ∈ R t j ) h_{t}(x)=\sum_{j=1}^{J}c_{tj}I(x\in R_{tj}) ht(x)=j=1JctjI(xRtj)
       从而本轮最终得到的强学习器的表达式如下:
f t ( x ) = f t − 1 ( x ) + h t ( x ) = f t − 1 ( x ) + ∑ j = 1 J c t j I ( x ∈ R t j ) f_{t}(x)=f_{t-1}(x)+h_{t}(x)\\=f_{t-1}(x)+\sum_{j=1}^{J}c_{tj}I(x\in R_{tj}) ft(x)=ft1(x)+ht(x)=ft1(x)+j=1JctjI(xRtj)
       通过损失函数的负梯度来拟合,我们找到了一种通用的拟合损失误差的办法,这样无轮是分类问题还是回归问题,我们通过其损失函数的负梯度的拟合,就可以用GBDT来解决我们的分类回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。

4、GBDT回归算法

输入:训练集样本 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) . . . ( x m , y m ) T={(x_{1},y_{1}),(x_{2},y_{2})...(x_{m},y_{m})} T=(x1,y1),(x2,y2)...(xm,ym), 最大迭代次数N, 损失函数L。
输出:强学习器f(x)
过程
(1) 初始化弱学习器:
     f 0 ( x ) = a r g m i n c ∑ i = 1 m L ( y i , c ) f_{0}(x)=argmin_{c}\sum_{i=1}^{m} L(y_{i},c) f0(x)=argminci=1mL(yi,c)
(2)对迭代轮数 t = 1 , 2... N t=1,2 ... N t=1,2...N有:
1)对样本 i = 1 , 2... m i=1,2 ... m i=1,2...m,计算负梯度
r t i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f t − 1 ( x ) r_{ti}=-\left [ \frac{\partial L\left (y_{i}, f\left ( x_{i} \right ) \right )}{\partial f\left ( x_{i} \right )} \right ]_{f\left ( x \right )=f_{t-1}\left ( x \right )} rti=[f(xi)L(yi,f(xi))]f(x)=ft1(x)
2)利用 ( x i , r t i ) ( i = 1 , 2 , . . m ) (x_{i},r_{ti})(i=1,2,..m) (xi,rti)(i=1,2,..m),我们可以拟合一颗CART回归树,得到了第t棵回归树,其对应的叶节点区域是 R t j , j = 1 , 2... J R_{tj},j=1,2 ... J Rtj,j=1,2...J,其中J为第t棵树的叶子节点的个数。
3)对叶子区域 j = 1 , 2... J j =1,2 ... J j=1,2...J,计算最佳拟合值
c t j = a r g m i n c ∑ x i ∈ R t j L ( y i , f t − 1 ( x i ) + c ) c_{tj}=argmin_{c}\sum_{x_{i}\in R_{tj}} L(y_{i}, f_{t-1}( x_{i} )+c) ctj=argmincxiRtjL(yi,ft1(xi)+c)
4)更新强学习器
f t ( x ) = f t − 1 ( x ) + ∑ j = 1 J c t j I ( x ∈ R t j ) f_{t}(x)=f_{t-1}(x)+\sum_{j=1}^{J}c_{tj}I(x\in R_{tj}) ft(x)=ft1(x)+j=1JctjI(xRtj)
(4)得到强学习器 f ( x ) f(x) f(x)的表达式
f ( x ) = f T ( x ) = f 0 ( x ) + ∑ t = 1 T ∑ j = 1 J c t j I ( x ∈ R t j ) f(x)=f_{T}(x)=f_{0}(x)+\sum_{t=1}^{T}\sum_{j=1}^{J}c_{tj}I(x\in R_{tj}) f(x)=fT(x)=f0(x)+t=1Tj=1JctjI(xRtj)

5、GBDT分类算法

       GBDT的分类算法从思想上和GBDT的回归算法没有区别,但是由于样本输出不是连续的值,而是离散的类别,导致我们无法直接从输出类别去拟合类别输出的误差。
       为了解决这个问题,主要有两个方法,一个是用指数损失函数,此时GBDT退化为Adaboost算法;另一种方法是用类似于逻辑回归的对数似然损失函数的方法。也就是说,我们用的是类别的预测概率值和真实概率值的差来拟合损失。本文仅讨论用对数似然损失函数的GBDT分类。而对于对数似然损失函数,我们又有二元分类和多元分类的区别。

5.1、二元GBDT分类算法

       对于二元GBDT分类算法,如果用类似于逻辑回归的对数似然损失函数,则损失函数为:
  L ( y , f ( x ) ) = l o g ( 1 + e x p ( − y f ( x ) ) ) L(y,f(x))=log(1+exp(-yf(x))) L(y,f(x))=log(1+exp(yf(x)))
       其中 y ∈ { − 1 , + 1 } y\in \left \{ -1,+1 \right \} y{1,+1}。则此时的负梯度误差为:
r t i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f t − 1 ( x ) = y i 1 + e x p ( y i f ( x i ) ) r_{ti}=-\left [ \frac{\partial L\left (y_{i}, f\left ( x_{i} \right ) \right )}{\partial f\left ( x_{i} \right )} \right ]_{f\left ( x \right )=f_{t-1}\left ( x \right )}=\frac{y_{i}}{1+exp(y_{i}f(x_{i}))} rti=[f(xi)L(yi,f(xi))]f(x)=ft1(x)=1+exp(yif(xi))yi
       对于生成的决策树,我们各个叶子节点的最佳负梯度拟合值为:
c t j = a r g m i n c ∑ x i ∈ R t j l o g ( 1 + e x p ( − y i ( f t − 1 ( x i ) + c ) ) ) c_{tj}=argmin_{c}\sum_{x_{i}\in R_{tj}} log(1+exp(-y_{i}(f_{t-1}(x_{i})+c))) ctj=argmincxiRtjlog(1+exp(yi(ft1(xi)+c)))
       由于上式比较难优化,我们一般使用近似值代替:
c t j = ∑ x i ∈ R t j r t i ∑ x i ∈ R t j ∣ r t i ∣ ( 1 − ∣ r t i ∣ ) c_{tj}= \frac{\sum_{x_{i}\in R_{tj}}r_{ti}}{\sum_{x_{i}\in R_{tj}} \left | r_{ti} \right |(1-\left | r_{ti} \right |)} ctj=xiRtjrti(1rti)xiRtjrti
       除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,二元GBDT分类和GBDT回归算法过程相同。

5.2、多元GBDT分类算法

       多元GBDT要比二元GBDT复杂一些,对应的是多元逻辑回归和二元逻辑回归的复杂度差别。假设类别数为K,则此时我们的对数似然损失函数为:
L ( y , f ( x ) ) = − ∑ k = 1 K y k l o g ( p k ( x ) ) L(y,f(x))=-\sum_{k=1}^{K}y_{k}log(p_{k}(x)) L(y,f(x))=k=1Kyklog(pk(x))
       其中如果样本输出类别为k,则 y k = 1 y_{k}=1 yk=1。第k类的概率 p k ( x ) p_{k}(x) pk(x)的表达式为:
p k ( x ) = e x p ( f k ( x ) ) ∑ l = 1 K e x p ( f l ( x ) ) p_{k}(x)=\frac{exp(f_{k}(x))}{\sum_{l=1}^{K}exp(f_{l}(x))} pk(x)=l=1Kexp(fl(x))exp(fk(x))
       集合上两式,我们可以计算出第t轮的第i个样本对应类别l的负梯度误差为:
r t i l = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f k ( x ) = f l , t − 1 ( x ) = y i l − p l , t − 1 ( x i ) r_{til}=-\left [ \frac{\partial L\left (y_{i}, f\left ( x_{i} \right ) \right )}{\partial f\left ( x_{i} \right )} \right ]_{f_{k}\left ( x \right )=f_{l,t-1}\left ( x \right )}=y_{il}-p_{l,t-1}(x_{i}) rtil=[f(xi)L(yi,f(xi))]fk(x)=fl,t1(x)=yilpl,t1(xi)
       观察上式可以看出,其实这里的误差就是样本i对应类别l的真实概率和t−1轮预测概率的差值。
       对于生成的决策树,我们各个叶子节点的最佳负梯度拟合值为
c t j l = a r g m i n c j l ∑ i = 0 m ∑ k = 1 K L ( y k , f t − 1 , l ( x ) + ∑ j = 0 J c j l I ( x i ∈ R t j l ) ) c_{tjl}=argmin_{c_{jl}}\sum_{i=0}^{m}\sum_{k=1}^{K}L(y_{k}, f_{t-1,l}(x)+\sum_{j=0}^{J}c_{jl}I(x_{i}\in R_{tjl})) ctjl=argmincjli=0mk=1KL(yk,ft1,l(x)+j=0JcjlI(xiRtjl))
       由于上式比较难优化,我们一般使用近似值代替
c t j l = K − 1 K ∑ x i ∈ R t j l r t i l ∑ x i ∈ R t j l ∣ r t i l ∣ ( 1 − ∣ r t i l ∣ ) c_{tjl}= \frac{K-1}{K}\frac{\sum_{x_{i}\in R_{tjl}}r_{til}}{\sum_{x_{i}\in R_{tjl}} \left | r_{til} \right |(1-\left | r_{til} \right |)} ctjl=KK1xiRtjlrtil(1rtil)xiRtjlrtil
       除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,多元GBDT分类和二元GBDT分类以及GBDT回归算法过程相同。

6、GBDT优缺点

GBDT主要优点
(1)可以灵活处理各种类型的数据,包括连续值和离散值。
(2)在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
(3)使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
GBDT的主要缺点
(1)由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。

参考:梯度提升树(GBDT)原理小结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值