机器学习—GBDT


本文记录《统计学习方法》和刘建平大佬的有关GBDT梯度提升树的内容。

提升树算法

提升树模型也是采用的前向分步做法,即在每一步找到一个使得当前损失函数函数值最小的弱分类器,通过迭代得到最终的强分类器。该算法以决策树作为基函数的选择,分类问题采用CART分类树,对于回归问题采用最小二乘回归树,初始化的基函数可以采用一个根结点两个叶子结点的决策树桩。
提升树的算法流程如下:
f 0 ( x ) = 0 f m ( x ) = f m − 1 ( x ) + T m ( x ; θ m ) f M ( x ) = ∑ i M T i ( x ; θ ) f_0(x)=0\\ f_m(x)=f_{m-1}(x)+T_m(x;\theta_m)\\ f_M(x)=\sum^M_iT_i(x;\theta) f0(x)=0fm(x)=fm1(x)+Tm(x;θm)fM(x)=iMTi(x;θ)
在前向分步的第m步中,对于当前的参数估计采用使得损失函数值最小的参数:
θ m = arg ⁡ min ⁡ ∑ i L ( y i , f m − 1 ( x ) + T ( x i ; θ m ) ) \theta_m = \arg\min \sum_i L(y_i,f_{m-1}(x)+T(x_i;\theta_m)) θm=argminiL(yi,fm1(x)+T(xi;θm))
当采用均方差损失函数时:
L ( y , f ( x ) ) = ( y − f ( x ) ) 2 L ( y , f m − 1 + T m ( x ; θ m ) ) L = [ y − f m − 1 ( x ) − T m ( x ; θ m ) ] 2 L = [ r m − 1 − T ( x ; θ m ) ] 2 L(y,f(x))=(y-f(x))^2\\ L(y,f_{m-1}+T_m(x;\theta_m))\\ L=[y-f_{m-1}(x)-T_m(x;\theta_m)]^2\\ L=[r_{m-1}-T(x;\theta_m)]^2 L(y,f(x))=(yf(x))2L(y,fm1+Tm(x;θm))L=[yfm1(x)Tm(x;θm)]2L=[rm1T(x;θm)]2
其中 r m − 1 = y − f m − 1 ( x ) r_{m-1}=y-f_{m-1}(x) rm1=yfm1(x)是当前强学习算法下的残差,则对于提升树而言,采用的拟合当前的模型的残差得到一个弱学习算法,最终得到当前的强学习算法。

梯度提升树

对于一般的损失函数时,在计算残差时不容易,所以采用了负梯度的方法来近似残差:
r m − 1 = − [ ∂ L ( y , f m ( x ) ∂ f ( x ) ] f ( x ) = f m − 1 ( x ) r_{m-1}=-[{\partial L(y,f_m(x)\over \partial f(x) }]_{f(x)=f_{m-1}(x)} rm1=[f(x)L(y,fm(x)]f(x)=fm1(x)

GBDT 回归树

输入: T = { ( x 1 , y 1 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),...,(x_N,y_N)\} T={(x1,y1),...,(xN,yN)},损失函数L
输出:回归树

  1. 初始化:
    f 0 ( x ) = arg ⁡ min ⁡ ∑ i N L ( y i , C ) f_0(x) = \arg\min \sum_i^NL(y_i,C) f0(x)=argminiNL(yi,C)
  2. m = 1 , 2... M m=1,2...M m=1,2...M次迭代
    r m − 1 = − [ ∂ L ( y , f m ( x ) ∂ f ( x ) ] f ( x ) = f m − 1 ( x ) r_{m-1}=-[{\partial L(y,f_m(x)\over \partial f(x) }]_{f(x)=f_{m-1}(x)} rm1=[f(x)L(y,fm(x)]f(x)=fm1(x)
    对此时的残差拟合一个回归树,得到弱回归树的叶子结点:
    c j m = arg ⁡ min ⁡ c ∑ L ( y i , f m − 1 ( x ) + c ) c^m_j = \arg\min\limits_{c} \sum L(y_i,f_{m-1(x)}+c) cjm=argcminL(yi,fm1(x)+c)
    3.更新强回归树
    f m ( x ) = f m − 1 ( x ) + ∑ j c j I ( x ∈ R j ) f_m(x)= f_{m-1}(x)+\sum_j c_jI(x\in R_j) fm(x)=fm1(x)+jcjI(xRj)

在初始化时,回归树是一个只有根结点的树桩,计算在当前损失函数的负梯度在当前模型的值作为残差的近似,用残差来拟合出一个回归树,使得损失函数值最小,并且更新强回归树。

GBDT分类树

在分类树中,因为输出是离散的类别无法用连续的损失函数,所以需要采用其他的损失函数。这里我们再看看GBDT分类算法,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)))
此时的负梯度为:
r t i = − [ ∂ L ( y , 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} = -\bigg[\frac{\partial L(y, f(x_i)))}{\partial f(x_i)}\bigg]_{f(x) = f_{t-1}\;\; (x)} = y_i/(1+exp(y_if(x_i))) rti=[f(xi)L(y,f(xi)))]f(x)=ft1(x)=yi/(1+exp(yif(xi)))
则将梯度值代替残差值来进行拟合分类树,其他的过程和回归树的流程相同。

GBDT 正则化

为了防止过拟合,GBDT的正则化主要有三种方式。

  1. 定义为步长ν,对于前面的弱学习器的迭代
    f k ( x ) = f k − 1 ( x ) + h k ( x ) f_k(x)=f_{k-1}(x)+h_k(x) fk(x)=fk1(x)+hk(x)
    如果我们加上了正则化项,则有
    f k ( x ) = f k − 1 ( x ) + ν h k ( x ) f_k(x)=f_{k-1}(x)+νh_k(x) fk(x)=fk1(x)+νhk(x)
    ν的取值范围为0<ν≤1。对于同样的训练集学习效果,较小的ν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。

  2. 正则化的方式是通过子采样比例(subsample)。取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采样,程序可以通过采样分发到不同的任务去做boosting的迭代过程,最后形成新树,从而减少弱学习器难以并行学习的弱点。

  3. 是对于弱学习器即CART回归树进行正则化剪枝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值