从决策树到XgBoost(三)梯度提升树GBDT

正如随机森林是决策树模型在bagging框架上的集成,我们同样可以在boosting框架上采用决策树为基学习器,比如基于AdaBoost框架或Gradient Boosting框架。

鉴于AdaBoost算法可视为Gradient Boosting算法的一种特殊情况,所以本文直接介绍更泛化的梯度提升树(Gradient Boosting Decision Tree),并将其具体化到不同的损失函数中。

一、GBDT基本理论

1.1 Gradient Boosting算法回顾

集成学习(三)Gradient Boosting算法中我们通过分离变量,将每轮的损失函数表示子学习器 g ( x ) g(x) g(x)和权重系数 α \alpha α两个变量的优化目标:
arg min ⁡ α , g L ( G m ) = arg min ⁡ α , g 1 N ∑ i = 1 N L ( ∑ t = 1 m − 1 α t g t ( x i ) + α g ( x i ) , y i ) \argmin\limits_{\alpha,g}L(G_{m})=\argmin\limits_{\alpha,g}\frac{1}{N}\sum\limits_{i=1}^NL(\sum_{t=1}^{m-1}\alpha_tg_t(x_i)+\alpha g(x_i),y_i) α,gargminL(Gm)=α,gargminN1i=1NL(t=1m1αtgt(xi)+αg(xi),yi)在函数空间内,对上式进行一阶泰勒展开,可得: arg min ⁡ α , g L ( G m ) = arg min ⁡ α , g 1 N ∑ i = 1 N ( L ( ∑ t = 1 m − 1 α t g t ( x i ) , y i ) + ∂ L ( ∑ t = 1 m − 1 α t g t ( x i ) , y i ) ∂ ∑ t = 1 m − 1 α t g t ( x i ) ∗ α g ( x i ) ) \argmin\limits_{\alpha,g}L(G_{m})=\argmin\limits_{\alpha,g}\frac{1}{N}\sum\limits_{i=1}^N(L(\sum_{t=1}^{m-1}\alpha_tg_t(x_i),y_i)+\frac{\partial L(\sum_{t=1}^{m-1}\alpha_tg_t(x_i),y_i)}{\partial \sum_{t=1}^{m-1}\alpha_tg_t(x_i)}*\alpha g(x_i)) α,gargminL(Gm)=α,gargminN1i=1N(L(t=1m1αtgt(xi),yi)+t=1m1αtgt(xi)L(t=1m1αtgt(xi),yi)αg(xi))对比梯度下降公式,可得当前轮的优化策略:
(1)以 − ∂ L ( G m − 1 ( x ) ) ∂ G m − 1 ( x ) -\frac{\partial L({G{_{m-1}(x))}}}{\partial G_{m-1(x)}} Gm1(x)L(Gm1(x)),即损失函数负梯度方向为目标,优化子学习器 g ( x ) g(x) g(x)
(2)以样本损失函数为目标,优化权重参数 α \alpha α

1.2 决策树的另一种解读

从决策树到XgBoost(一)决策树模型中曾经指出,决策树模型可视为一系列If-else"决策路径的组合。因此对于一棵树,其模型的参数包括两部分:树的结构(既决策路径)和叶子节点的结果(即决策结果)。

因为每一个叶子节点对应唯一一条决策路径。令整个决策映射为 q ( x ) q(x) q(x),对应决策路径 j j j的映射为 q j ( x ) = I ( x ∈ j ) q_j(x)=I(x\in j) qj(x)=I(xj),对应叶子节点上的结果为 w j w_j wj,叶子节点的总数为 T T T。此时,决策树模型可写作: g ( x ) = w q ( x ) = ∑ j = 1 T w j q j ( x ) = ∑ j = 1 T w j I ( x ∈ j ) g(x)=w_{q(x)}=\sum_{j=1}^Tw_jq_j(x)=\sum_{j=1}^Tw_jI(x\in j) g(x)=wq(x)=j=1Twjqj(x)=j=1TwjI(xj)

1.3 将决策树应用到Gradient Boosting框架中的理解

当将决策树应用到Gradient Boosting框架中时,又将如何理解每轮模型更新时的优化目标 g ( x ) g(x) g(x) α \alpha α呢?

(1)泛化的讲, g ( x ) g(x) g(x)是将损失函数负梯度值作为新的目标函数来训练新一轮的子学习器。那在GBDT中,就是将损失函数负梯度值作为新的目标函数来训练一个新的子树。
(2)泛化的讲, α \alpha α是将子学习器的结果进行权重调整。那在GBDT中,就是将子树中叶子节点的结果进行大小的改变

注意到在1.2中,可以将决策树写作每个决策路径和叶子结果的和。对于每一个训练或测试样本,其推断时的决策路径和结果是唯一的。所以 α g ( x ) = α ∑ j = 1 T w j I ( x ∈ j ) = ∑ j = 1 T α w j I ( x ∈ j ) = ∑ j = 1 T w ^ j I ( x ∈ j ) \begin{aligned} \alpha g(x)&=\alpha \sum_{j=1}^Tw_jI(x\in j)\\&= \sum_{j=1}^T\alpha w_jI(x\in j)\\ &= \sum_{j=1}^T \hat w_j I(x\in j)\end{aligned} αg(x)=αj=1TwjI(xj)=j=1TαwjI(xj)=j=1Tw^jI(xj)这意味着什么?意味着当Gradient Boosting的框架选决策树作为基学习器时,可以将 g ( x ) g(x) g(x) α \alpha α的优化思路进一步改进为如下两步:
(1)以损失函数负梯度值目标函数,确定新一轮子树 g ( x ) g(x) g(x)的结构(决策路径和样本划分)
(2)以总模型 G ( x ) G(x) G(x)的最小损失函数为目标,确定子树 g ( x ) g(x) g(x)中各叶子节点的结果 w j w_j wj

无论用决策树来解决分类或回归问题,各叶子节点中的结果值均为一个固定数值(如分类标识、分类概率值或回归平滑值),因此对于上面的第(2)步,每个叶子节点的最终值均为一个固定数值。

1.4 GBDT算法流程

在GBDT的实际使用中,基本都采用基于CART树的实现。通过选择合适的定义连续可导的损失函数,可以解决回归和分类问题。

GBDT算法的基本流程如下:
(1)初始化学习器 g 0 ( x ) g_0(x) g0(x),一般可取 g 0 ( x ) = arg ⁡ min ⁡ g ( w , q ) ∑ i = 1 N L ( g ( x i ) , y i ) = arg ⁡ min ⁡ g ( w , q ) ∑ i = 1 N L ( ∑ j = 1 J q j ( x i ) , y i ) g_0(x)=\arg\min_{g(w,q)} \sum_{i=1}^NL(g(x_i),y_i)=\arg\min_{g(w,q)} \sum_{i=1}^NL(\sum_{j=1}^J q_j(x_i),y_i) g0(x)=argg(w,q)mini=1NL(g(xi),yi)=argg(w,q)mini=1NL(j=1Jqj(xi),yi)
(2) 对于迭代轮数 m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M:
a) 计算各样本的损失负梯度方向: r m i = − ∂ L ( G m − 1 ( x i ) , y i ) ∂ G m − 1 ( x i ) r_{mi}=-\frac{\partial L(G_{m-1}(x_i),y_i)}{\partial G_{m-1}(x_i)} rmi=Gm1(xi)L(Gm1(xi),yi)b) 以 ( x i , r m i ) (x_i,r_{mi}) (xi,rmi)为样本,确定一颗新的CART树结构 q m q_m qm
c) 对上述子CART树,计算出每个叶子节点中的最佳结果值: w m j = arg ⁡ min ⁡ w ∑ i ∈ I m j L ( G m − 1 ( x i ) + w , y i ) w_{mj}=\arg\min_w\sum_{i\in I_{mj}}L(G_{m-1}(x_i)+w,y_i) wmj=argwminiImjL(Gm1(xi)+w,yi)上式中, I m j = { i ∣ q ( x i ) = j } I_{mj}=\{i|q(x_i)=j\} Imj={iq(xi)=j}表示上述CART树中某个叶子节点 j j j上的训练样本集合
d)更新总的模型: G m ( x ) = G m − 1 ( x ) + ∑ j = 1 J m w m j q m ( x ) G_m(x)=G_{m-1}(x)+\sum_{j=1}^{J_m} w_{mj}q_m(x) Gm(x)=Gm1(x)+j=1Jmwmjqm(x)

(3)最终得到的总模型为: G M ( x ) = g 0 ( x ) + ∑ m = 1 M ∑ j = 1 J m w m j q m ( x ) G_M(x)=g_0(x)+\sum_{m=1}^M\sum_{j=1}^{J_m}w_{mj}q_m(x) GM(x)=g0(x)+m=1Mj=1Jmwmjqm(x)

二、将GBDT用于回归和分类问题

通过将损失函数定义为不同的损失函数(参见机器学习中常见的损失函数),即可将GBDT算法使用到各类实际问题。

2.1 GBDT回归算法

以平方损失函数为例,介绍GBDT在回归问题中使用,此外还可以使用绝对值损失、Huber损失和Quantile损失等。

此时GBDT算法的几个显著特点在于:
(1) g 0 g_{0} g0可直接取训练样本的均值代替;

(2)损失函数为 ( G ( x ) − y ) 2 (G(x)-y)^2 (G(x)y)2,此时样本 x i x_i xi的负梯度值为 2 ( y − G ( x ) ) 2(y-G(x)) 2(yG(x)),即为前序总模型预测结果值与真实值的残差值(忽略倍数,因为可合并到后续节点结果的优化)。因此,每轮子树的优化过程可视为:
a) 基于样本的残差值 ( x i , y i − G m − 1 ( x i ) ) (x_i,y_i-G_{m-1}(x_i)) (xi,yiGm1(xi)),得到子树 g m ( x ) g_m(x) gm(x)的结构;
b)对于子树中每组样本而言,取其总平方损失最小(包括前序学习器和当前子树)的值为该节点的结果值

2.2 GBDT分类算法
2.2.1 二分类问题

对于二分类问题,当其损失函数取指数损失函数时,可退化为Adaboost算法。另一种被广泛采用的损失函i数为类似于逻辑回归中的对数似然损失函数: L ( g ( x ) , y ) = log ⁡ ( 1 + exp ⁡ − y g ( x ) ) L(g(x),y)=\log(1+\exp^{-yg(x)}) L(g(x),y)=log(1+expyg(x))对应的负梯度值为: r m i = y i 1 + exp ⁡ − y i g m ( x ) r_{mi}=\frac{y_i}{1+\exp^{-y_ig_m(x)}} rmi=1+expyigm(x)yi根据该值取确定每轮更新中子树的结构,而该子树各叶子节点的最佳结果值为: w m j = arg ⁡ min ⁡ w ∑ i ∈ I m j log ⁡ ( 1 + exp ⁡ − y i ( G m − 1 ( x i ) + w ) ) w_{mj}=\arg\min_w\sum_{i\in I_{mj}}\log(1+\exp^{-y_i(G_{m-1}(x_i)+w)}) wmj=argwminiImjlog(1+expyi(Gm1(xi)+w))此值难以优化,因此常用下值替代: w m j = ∑ i ∈ I m j r m i ∑ i ∈ I m j ∣ r m i ∣ ( 1 − ∣ r m i ∣ ) w_{mj}=\frac{\sum\limits_{i\in I_{mj}}r_{mi}}{\sum\limits_{i\in I_{mj}}|r_{mi}|(1-|r_{mi}|)} wmj=iImjrmi(1rmi)iImjrmi

2.2.2 多分类问题

对于多分类问题,假设为 K K K类,采用交叉熵损失函数: L ( g ( x ) , y ) = − ∑ k = 1 K y k log ⁡ p k ( x ) L(g(x),y)=-\sum_{k=1}^Ky_k\log p_k(x) L(g(x),y)=k=1Kyklogpk(x)其中 y k y_k yk仅在当前样本所属分类时为1,其他均为0,预测值属于类 k k k的概率为: p k ( x ) = exp ⁡ ( g ( k ) ( x ) ) ∑ l = 1 K exp ⁡ ( g ( l ) ( x ) ) p_k(x)=\frac{\exp(g^{(k)}(x))}{\sum\limits_{l=1}^K\exp(g^{(l)}(x))} pk(x)=l=1Kexp(g(l)(x))exp(g(k)(x))上式中 g ( l ) ( x ) g^{(l)}(x) g(l)(x)为映射到类 l l l的函数。
其第 m m m轮第 i i i个样本对应类别 l l l函数的负梯度值为: r m i l = = y i l − p l , m − 1 ( x i ) r_{mil=}=y_{il}-p_{l,m-1}(x_i) rmil==yilpl,m1(xi)即负梯度值为样本 i i i对应类别 l l l的真实概率与前 t − 1 t-1 t1轮预测概率之差。
根据该值进行每轮子树的决策树。对于该子树每个叶子节点的最佳结果则为:
w m j l = arg ⁡ min ⁡ w ∑ i ∈ I m j L ( ( G m − 1 ( x i ) + w ) , y i ) w_{mjl}=\arg\min_{w}\sum_{i \in I_{mj}}L((G_{m-1}(x_i)+w),y_i) wmjl=argwminiImjL((Gm1(xi)+w),yi)
上式难以直接优化,常用下式替代:
w m j l = K − 1 K ∑ i ∈ I m j l r m i l ∑ i ∈ I m j l ∣ r m i l ∣ ( 1 − ∣ r m i l ∣ ) w_{mjl}=\frac{K-1}{K}\frac{\sum\limits_{i\in I_{mjl}}r_{mil}}{\sum\limits_{i\in I_{mjl}}|r_{mil}|(1-|r_{mil}|)} wmjl=KK1iImjlrmil(1rmil)iImjlrmil

三、GBDT的正则化

若不对以决策树为基学习器的集成算法加以正则化,则极易过拟合。GBDT的常见正则化策略包括:
(1)对子树的剪枝,具体做法可参照从决策树到XgBoost(一)决策树模型

(2)子采样算法。每棵子树的学习过程中通过不放回采样的方式采集子样。

(3)加法模型中,对每个子学习器加以一定的衰减系数(shrinkage),从而避免子学习器学习过度。衰减系数 v v v的取值范围为 0 < v ≤ 1 0<v\le 1 0<v1,其作为模型的超参数,与子树的个数 M M M强相关,所以在调参时需联合调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值