一、引言部分

梯度提升树(GBDT)的全称是Gradient Boosting Decision Tree,是 Boosting 算法的一种。

1. 和 AdaBoost 算法的区别:

AdaBoost 算法是利用前一轮的弱学习器的误差来更新样本权重值,然后一轮一轮的迭代;

GBDT 也是迭代,使用了前向分布算法,但是弱学习器限定了只能使用CART回归树模型,而且 GBDT 在模型训练的时候,是要求模型预测的样本损失尽可能的小。

首先,GBDT使用的决策树是CART回归树,无论是处理回归问题还是二分类以及多分类,GBDT使用的决策树通通都是都是CART回归树。

这里解释一下:

GBDT每次迭代要拟合的是梯度值,是连续值所以要用回归树。

对于回归树算法来说最重要的是寻找最佳的划分点,那么回归树中的可划分点包含了所有特征的所有可取的值。

在分类树中最佳划分点的判别标准是熵或者基尼系数,都是用纯度来衡量的,但是在回归树中的样本标签是连续数值,所以再使用熵之类的指标不再合适,取而代之的是平方误差,它能很好的评判拟合程度。

2. GBDT的学习

GBDT的核心在于每一棵树学的是之前所有树结论的残差,残差其实就是真实值和预测值之间的差值。

在学习的过程中,首先学习一颗回归树(分类树的结果显然是没办法累加的,所以GBDT中的树都是回归树),然后将真实值-预测值得到残差,再把残差作为一个学习目标,学习下一棵回归树,依次类推,直到残差小于某个接近0的阀值或回归树数目达到某一阀值。

其核心思想是每轮通过拟合残差来降低损失函数。总的来说,第一棵树是正常的,之后所有的树的决策全是由残差来决定。

最后,使用梯度下降算法减小损失函数。对于一般损失函数,为了使其取得最小值,通过梯度下降算法,每次朝着损失函数的负梯度方向逐步移动,最终使得损失函数极小的方法(此方法要求损失函数可导)。

GBDT总共需要进行M次迭代,每次迭代产生一个模型,我们需要让每次迭代生成的模型对训练集的损失函数最小,而如何让损失函数越来越小呢?我们采用梯度下降的方法,在每次迭代时通过向损失函数的负梯度方向移动来使得损失函数越来越小,这样我们就可以得到越来越精确的模型。

3. GBDT 直观理解

每一轮预测和实际值有残差,下一轮根据残差再进行预测,最后将所有预测相加,就是结果(不断去拟合残差,使残差不断减少)。

4. GBDT的例子

假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。

如下图所示:

二、GBDT损失函数极小化

在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是fm−1(x)f_{m-1}(x)fm−1​(x),损失函数是L(y,fm−1(x))L(y,f_{m-1}(x))L(y,fm−1​(x)),迭代的目标是找到一个CART回归树模型的弱学习器hm(x)h_m(x)hm​(x),让本轮的损失函数L(y,fm(x))=L(y,fm−1(x))+hm(x)L(y,f_m(x))=L(y,f_{m-1}(x))+h_m(x)L(y,fm​(x))=L(y,fm−1​(x))+hm​(x)最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。

即GBDT初始化时(估计使损失函数极小化的常数值,它是只有一个根节点的树,一般平方损失函数为节点的均值,而绝对损失函数为节点样本的中位数):
f(x)=arg⁡min⁡c∑i=1mL(yi,c)f(x)=\arg\min_{c}\sum_{i=1}^mL(y_i,c) f(x)=argcmin​i=1∑m​L(yi​,c)

面临一个问题:这个损失的拟合不好度量,损失函数各种各样,怎么找到一种通用的拟合方法呢?

三、GBDT的负梯度拟合

当损失函数是平方损失和指数损失函数时,梯度提升树每一步优化是很简单的,但是对于一般损失函数而言,往往每一步优化起来不那么容易,针对这一问题,FriedmanFriedmanFriedman提出了梯度提升树算法,这是利用最速下降的近似方法,其关键是利用损失函数的负梯度作为提升树算法中的残差的近似值,进而拟合一个CART回归树。

对于提到的三种损失函数,其最小化方法各有不同。当损失函数为下面几种函数时,最小化损失函数的方法如下:

1. 指数函数

当损失函数为指数函数时,比如AdaBoost算法的损失函数是指数函数,这时通过前向分步算法来解决。前向分布算法在每轮迭代时,通过将上一轮所生成的模型所产生的损失函数最小化的方法来计算当前模型的参数。

2. 平方误差损失函数

在回归树提升算法中,遍历当前输入样例的可能取值,将每种可能值计算一遍损失函数,最终选择损失函数最小的值(很原始)。在计算平方损失误差时,可能出现残差项y−fm−1(x)y-f_{m-1}(x)y−fm−1​(x),此时可以通过如下方法来进行优化:每一轮迭代是为了减小上一步模型的残差,为了减少残差,每次在残差的负梯度方向建立一个新的模型,这样一步一步的使得残差越来越小。

3. 一般损失函数

对于一般损失函数,可以通过梯度下降的方法来使得损失函数逐步减小,每次向损失函数的负梯度方向移动,直到损失函数值到达谷底。

那么负梯度长什么样呢?第mmm轮的第iii个样本的损失函数的负梯度表示为:
rmi=−[∂L(xi,f(xi))∂f(xi)]f(x)=fm−1(x)r_{mi}=-[\frac{\partial L(x_i,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)} rmi​=−[∂f(xi​)∂L(xi​,f(xi​))​]f(x)=fm−1​(x)​

此时不同的损失函数将会得到不同的负梯度,假设选择平方损失:
L(y,f(xi))=12(y−f(xi))2L(y,f(x_i))=\frac{1}{2}(y-f(x_i))^2 L(y,f(xi​))=21​(y−f(xi​))2
则负梯度为:
rmi=−[∂L(xi,f(xi))∂f(xi)]f(x)=fm−1(x)=y−f(xi)r_{mi}=-[\frac{\partial L(x_i,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)}=y-f(x_i) rmi​=−[∂f(xi​)∂L(xi​,f(xi​))​]f(x)=fm−1​(x)​=y−f(xi​)
此时发现GBDT的负梯度就是残差,所以说对于回归问题,我们要拟合的就是残差。那么对于分类问题,二分类和多分类的损失函数都是logloss。因为损失函数有很多种,所以用负梯度拟合来做通用的拟合方法。

四、GBDT中常用的损失函数

在梯度提升分类树有两种可选的损失函数,一种是‘exponential:指数损失’,一种是‘deviance:对数损失’

而在梯度提升回归树有四种可选的损失函数,分别为'ls:平方损失''lad:绝对损失''huber:huber损失''quantile:分位数损失'

对于分类算法,其损失函数一般有对数损失函数和指数损失函数两种:

  1. 如果是指数损失函数,则损失函数表达式为:
    L(y,f(x))=exp(−yf(x))L(y,f(x))=exp(-yf(x)) L(y,f(x))=exp(−yf(x))
    其负梯度计算和叶子节点的最佳负梯度拟合参见Adaboost算法原理。

  2. 如果是对数损失函数,分为二元分类和多元分类两种:

对于二元分类,用类似于逻辑回归的对数似然损失函数:
L(y,f(x))=log(1+exp(−yf(x)))L(y,f(x))=log(1+exp(−yf(x))) L(y,f(x))=log(1+exp(−yf(x)))

对于多元分类:设类别数为k:
L(y,f(x))=−∑k=1Kyklog⁡pk(x)L(y,f(x))=−\sum_{k=1}^Kyk\log p_k(x) L(y,f(x))=−k=1∑K​yklogpk​(x)
yky_kyk​为样本数据估计值,当一个样本xxx属于kkk时,yk=1y_k=1yk​=1,否则yk=0y_k=0yk​=0。

对于回归算法,常用损失函数有如下4种:

  1. 均方差,这个是最常见的回归损失函数:
    L(y,f(x))=(y−f(x))2L(y,f(x))=(y−f(x))^2 L(y,f(x))=(y−f(x))2

  2. 绝对损失,这个损失函数也很常见:
    L(y,f(x))=∣y−f(x)∣L(y,f(x))=|y−f(x)| L(y,f(x))=∣y−f(x)∣

    对应负梯度误差为:
    sign(yi−f(xi))sign(y_i−f(x_i)) sign(yi​−f(xi​))

  3. Huber损失,它是均方差和绝对损失的折衷产物,对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量。损失函数如下:

    对应的负梯度误差为:

  4. 分位数损失。它对应的是分位数回归的损失函数,表达式为:
    L(y,f(x))=∑y≥f(x)θ∣y−f(x)∣+∑y<f(x)(1−θ)∣y−f(x)∣L(y,f(x))=\sum_{y≥f(x)}θ|y−f(x)|+\sum_{y<f(x)}(1−θ)|y−f(x)| L(y,f(x))=y≥f(x)∑​θ∣y−f(x)∣+y<f(x)∑​(1−θ)∣y−f(x)∣
    其中θ\thetaθ为分位数,需要我们在回归前指定。对应的负梯度误差为:

    对于Huber损失和分位数损失,主要用于健壮回归,也就是减少异常点对损失函数的影响。

五、GBDT算法原理描述

因为分类算法的输出是不连续的类别值,需要一些处理才能使用负梯度,所以GBDT的回归和分类算法这里分开介绍。

1. GBDT回归算法基本模版:

输入是训练集样本T={(x1,y1),(x2,y2),...,(xm,ym)}T=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}T={(x1​,y1​),(x2​,y2​),...,(xm​,ym​)}, 最大迭代次数TTT, 损失函数LLL。

输出是强学习器f(x)f(x)f(x),是一颗回归树。

  1. 初始化弱学习器(估计使损失函数极小化的常数值,它是只有一个根节点的树,一般平方损失函数为节点的均值,而绝对损失函数为节点样本的中位数):
    f0(x)=arg⁡min⁡c∑i=1mL(yi,c)f_0(x)=\arg\min_{c}\sum_{i=1}^mL(y_i,c) f0​(x)=argcmin​i=1∑m​L(yi​,c)

  2. 对迭代轮数t=1,2,...,Tt=1,2,...,Tt=1,2,...,T有(即生成的弱学习器个数):

    (1) 对样本i=1,2,...,mi=1,2,...,mi=1,2,...,m,计算负梯度(损失函数的负梯度在当前模型的值将它作为残差的估计,对于平方损失函数为,它就是通常所说的残差;而对于一般损失函数,它就是残差的近似值(伪残差)):
    rti=−[∂L(yi,f(xi)))∂f(xi)]f(x)=ft−1(x)r_{ti}=−[\frac{∂L(y_i,f(x_i)))}{∂f(x_i)}]_{f(x)=f_{t−1}(x)} rti​=−[∂f(xi​)∂L(yi​,f(xi​)))​]f(x)=ft−1​(x)​

    (2)利用(xi,rti)(i=1,2,..m)(x_i,r_{ti})(i=1,2,..m)(xi​,rti​)(i=1,2,..m),即{(x1,rt1),...,(xi,rti)}\{(x_1,r_{t1}),...,(x_i,r_{ti})\}{(x1​,rt1​),...,(xi​,rti​)},拟合一颗CART回归树,得到第 ttt 颗回归树。其对应的叶子节点区域为Rtj,j=1,2,...,JR_{tj},j=1,2,...,JRtj​,j=1,2,...,J。其中JJJ为回归树t的叶子节点的个数。

    (3)对叶子区域j=1,2,..Jj =1,2,..Jj=1,2,..J,计算最佳拟合值:
    ctj=arg⁡min⁡c∑xi∈RtjL(yi,ft−1(xi)+c)c_{tj}=\arg\min_{c}\sum_{x_i∈R_{tj}}L(y_i,f_{t−1}(x_i)+c) ctj​=argcmin​xi​∈Rtj​∑​L(yi​,ft−1​(xi​)+c)

    (4)更新强学习器:
    ft(x)=ft−1(x)+∑j=1JctjI(x∈Rtj)f_t(x)=f_{t−1}(x)+\sum_{j=1}^Jc_{tj}I(x∈R_{tj}) ft​(x)=ft−1​(x)+j=1∑J​ctj​I(x∈Rtj​)

  3. 得到最终的回归树,即强学习器f(x)f(x)f(x)的表达式:
    f(x)=fT(x)=f0(x)+∑t=1T∑j=1JctjI(x∈Rtj)f(x)=f_T(x)=f_0(x)+\sum_{t=1}^T\sum_{j=1}^Jc_{tj}I(x∈R_{tj}) f(x)=fT​(x)=f0​(x)+t=1∑T​j=1∑J​ctj​I(x∈Rtj​)

GBDT的分类算法:GBDT的分类算法从思想上和GBDT的回归算法没有区别,但是由于样本输出不是连续的值,而是离散的类别,导致我们无法直接从输出类别去拟合类别输出的误差。

为了解决这个问题,主要有两个方法,一个是用指数损失函数,此时GBDT退化为Adaboost算法。另一种方法是用类似于逻辑回归的对数似然损失函数的方法。也就是说,我们用的是类别的预测概率值和真实概率值的差来拟合损失。这里主要介绍用对数似然损失函数的GBDT分类。而对于对数似然损失函数,我们又有二元分类和多元分类的区别。

2. 二元GBDT分类算法基本模板(log损失):

输入:训练数据集T={(x1,y1),(x2,y2),...,(xm,ym)}T=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}T={(x1​,y1​),(x2​,y2​),...,(xm​,ym​)},对于二元GBDT用类似于逻辑回归的对数似然损失函数,损失函数为:L(y,f(x))=log⁡(1+exp(−yf(x)))L(y,f(x))=\log(1+exp(−yf(x)))L(y,f(x))=log(1+exp(−yf(x)))。

输出:分类树f(x)f(x)f(x)

  1. 初始化:
    f0(x)=12log⁡P(y=1∣x)P(y=−1∣x)f_0(x)=\frac{1}{2}\log \frac{P(y=1|x)}{P(y=−1|x)} f0​(x)=21​logP(y=−1∣x)P(y=1∣x)​

  2. 对迭代轮数 t=1,2,...Tt=1,2,...Tt=1,2,...T 有:

(1)对样本i=1,2,...mi=1,2,...mi=1,2,...m,计算负梯度:

其中y∈{−1,+1}y∈\{−1,+1\}y∈{−1,+1}。则此时的负梯度误差为:
rti=−[∂L(y,f(xi)))∂f(xi)]f(x)=ft−1(x)=yi(1+exp(yif(xi)))r_{ti}=−[\frac{∂L(y,f(x_i)))}{∂f(x_i)}]_{f(x)=f_{t−1}(x)}=y_i(1+exp(y_if(x_i))) rti​=−[∂f(xi​)∂L(y,f(xi​)))​]f(x)=ft−1​(x)​=yi​(1+exp(yi​f(xi​)))

(2)对概率残差{(x1,rt1),...,(xi,rti)}\{(x_1,r_{t1}),...,(x_i,r_{ti})\}{(x1​,rt1​),...,(xi​,rti​)}拟合一个分类树,得到第 ttt 棵树的叶节点区域Rtj,j=1,2,...,JR_{tj}\;,\;j=1,2,...,JRtj​,j=1,2,...,J。其中JJJ为回归树ttt的叶子节点的个数:

(3)对叶子区域 j=1,2,..Jj =1,2,..Jj=1,2,..J,即生成的决策树,计算各个叶子节点的最佳负梯度拟合值为:
ctj=arg⁡min⁡c∑xi∈Rtjlog⁡(1+exp(−yi(ft−1(xi)+c)))c_{tj}=\arg\min_{c}\sum_{x_i∈R_{tj}}\log(1+exp(−y_i(f_{t−1}(x_i)+c))) ctj​=argcmin​xi​∈Rtj​∑​log(1+exp(−yi​(ft−1​(xi​)+c)))

由于上式比较难优化,我们一般使用近似值代替:
ctj=∑xi∈Rtjrti∑xi∈Rtj∣rti∣(1−∣rti∣)c_{tj}=\frac{\sum_{x_i∈R_{tj}}r_{ti}}{\sum_{x_i∈R_{tj}}|r_{ti}|(1−|r_{ti}|)} ctj​=∑xi​∈Rtj​​∣rti​∣(1−∣rti​∣)∑xi​∈Rtj​​rti​​

(4)更新强学习器:
ft(x)=ft−1(x)+∑j=1JctjI(x∈Rtj)f_t(x)=f_{t−1}(x)+\sum_{j=1}^Jc_{tj}I(x∈R_{tj}) ft​(x)=ft−1​(x)+j=1∑J​ctj​I(x∈Rtj​)

  1. 得到最终的分类树,即强学习器f(x)f(x)f(x)的表达式:
    f(x)=fT(x)=f0(x)+∑t=1T∑j=1JctjI(x∈Rtj)f(x)=f_T(x)=f_0(x)+\sum_{t=1}^T\sum_{j=1}^Jc_{tj}I(x∈R_{tj}) f(x)=fT​(x)=f0​(x)+t=1∑T​j=1∑J​ctj​I(x∈Rtj​)

除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,二元GBDT分类和GBDT回归算法过程相同。

由于我们用的是类别的预测概率值和真实概率值的差来拟合损失,所以最后还要将概率转换为类别,如下:

P(y=1∣x)=11+exp(−f(x))P(y=1|x)=\frac{1}{1+exp(−f(x))} P(y=1∣x)=1+exp(−f(x))1​
P(y=−1∣x)=11+exp(f(x))P(y=−1|x)=\frac{1}{1+exp(f(x))} P(y=−1∣x)=1+exp(f(x))1​

最终输出比较类别概率大小,概率大的就预测为该类别。

3. 多元GBDT分类算法基本模型(log损失):

多元GBDT要比二元GBDT复杂一些,对应的是多元逻辑回归和二元逻辑回归的复杂度差别。

输入:训练数据集T={(x1,y1),(x2,y2),...(xm,ym)}T=\{(x_1,y_1),(x_2,y_2),...(x_m,y_m)\}T={(x1​,y1​),(x2​,y2​),...(xm​,ym​)},假设类别数为KKK,则对数似然损失函数为:
L(y,f(x))=−∑k=1Kyklog⁡pk(x),yk={0,1}L(y,f(x))=−\sum_{k=1}^Ky_k\log p_k(x),y_k=\{0,1\} L(y,f(x))=−k=1∑K​yk​logpk​(x),yk​={0,1}
其中yk={0,1}y_k=\{0,1\}yk​={0,1}表示是否属于第kkk类别,1表示是,0表示否。k=1,2,...,Kk=1,2,...,Kk=1,2,...,K,表示共有多少分类的类别。

输出:分类树f(x)f(x)f(x)

  1. 初始化:
    fk0(x)=0,k=1,2,...,Kf_{k0}(x)=0,k=1,2,...,K fk0​(x)=0,k=1,2,...,K

  2. 对迭代轮数t=1,2,...,Tt=1,2,...,Tt=1,2,...,T 有:

对样本i=1,2,...,mi=1,2,...,mi=1,2,...,m,计算样本点属于每个类别的概率(其中如果样本输出类别为kkk,则yk=1y_k=1yk​=1。第kkk类的概率):

pk(x)=exp(fk(x))∑l=1Kexp(fl(x))p_k(x)=\frac{exp(f_k(x))}{\sum_{l=1}^Kexp(f_l(x))} pk​(x)=∑l=1K​exp(fl​(x))exp(fk​(x))​
(2.1) 对类别k=1,2,...,Kk=1,2,...,Kk=1,2,...,K:

集合上两式(损失函数和第kkk类的概率),可以计算出第 ttt 轮的第 iii 个样本对应类别l的负梯度误差为:

rtil=−[∂L(yi,f(xi)))∂f(xi)]fk(x)=fl,t−1(x)=yil−pl,t−1(xi)r_{til}=−[\frac{∂L(y_i,f(x_i)))}{∂f(x_i)}]_{f_k(x)=f_{l,t−1}(x)}=y_{il}−p_{l,t−1}(x_i) rtil​=−[∂f(xi​)∂L(yi​,f(xi​)))​]fk​(x)=fl,t−1​(x)​=yil​−pl,t−1​(xi​)
观察上式可以看出,其实这里的误差就是样本 iii 对应类别l的真实概率和 t−1t−1t−1 轮预测概率的差值。

(2.2) 对概率伪残差{(x1,rt1l),...,(xi,rtil)}\{(x_1,r_{t1l}),...,(x_i,r_{til})\}{(x1​,rt1l​),...,(xi​,rtil​)}拟合一个分类树。

(2.3) 对于生成的决策树,我们各个叶子节点的最佳负梯度拟合值为:
ctjl=arg⁡min⁡cjl∑i=0m∑k=1KL(yk,ft−1,l(x)+∑j=0JcjlI(xi∈Rtjl))c_{tjl}=\arg\min_{c_{jl}}∑_{i=0}^m∑_{k=1}^KL(y_k,f_{t−1,l}(x)+∑_{j=0}^Jc_{jl}I(x_i∈R_{tjl})) ctjl​=argcjl​min​i=0∑m​k=1∑K​L(yk​,ft−1,l​(x)+j=0∑J​cjl​I(xi​∈Rtjl​))
由于上式比较难优化,我们一般使用近似值代替:
ctjl=K−1K∑xi∈Rtjlrtil∑xi∈Rtil∣rtil∣(1−∣rtil∣)c_{tjl}=\frac{K−1}{K}\frac{∑_{x_i∈R_{tjl}}r_{til}}{∑_{x_i∈R_{til}}|r_{til}|(1−|r_{til}|)} ctjl​=KK−1​∑xi​∈Rtil​​∣rtil​∣(1−∣rtil​∣)∑xi​∈Rtjl​​rtil​​
(2.4) 更新强学习器:
ftk(x)=ft−1,k(x)+∑j=1JctkjI(x∈Rtkj)f_{tk}(x)=f_{t−1,k}(x)+∑_{j=1}^Jc_{tkj}I(x∈R_{tkj}) ftk​(x)=ft−1,k​(x)+j=1∑J​ctkj​I(x∈Rtkj​)

  1. 得到最终的分类树,即强学习器f(x)f(x)f(x)的表达式:
    f(x)=fTk(x)=f0(x)+∑t=1T∑j=1JctkjI(x∈Rtkj)f(x)=f_{Tk}(x)=f_0(x)+∑_{t=1}^T∑_{j=1}^Jc_{tkj}I(x∈R_{tkj}) f(x)=fTk​(x)=f0​(x)+t=1∑T​j=1∑J​ctkj​I(x∈Rtkj​)
    除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,多元GBDT分类和二元GBDT分类以及GBDT回归算法过程相同。

六、GBDT的正则化

和Adaboost一样,我们也需要对GBDT进行正则化,防止过拟合。GBDT的正则化主要有三种方式:

(1). Adaboost类似的正则化项,即步长(learning rate)。定义为vvv,对于前面的弱学习器的迭代:
fk(x)=fk−1(x)+hk(x)f_k(x)=f_{k−1}(x)+h_k(x) fk​(x)=fk−1​(x)+hk​(x)
如果我们加上了正则化项,则有:
fk(x)=fk−1(x)+νhk(x)f_k(x)=f_{k−1}(x)+νh_k(x) fk​(x)=fk−1​(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回归树进行正则化剪枝。具体可参看决策树算法原理。

七、GBDT优缺点

优点:

1.可以灵活处理各种类型的数据,包括连续值和离散值;

2.相对于SVM来说,较少的调参可以达到较好的预测效果;

3.使用健壮的损失函数时,模型鲁棒性非常强,受异常值影响小。

缺点:

1.由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。

梯度提升树(GBDT)算法超详细版本相关推荐

  1. scikit-learn 梯度提升树(GBDT)调参小结

    在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...

  2. 【机器学习】集成学习之梯度提升树GBDT

    Boosting方法的核心思想是对错分类的样本给予更高关注度,也就是样本权重,在提升树中与之对应的就是残差,在梯度提升树中就是梯度了. Regression Decision Tree:回归树 回归树 ...

  3. 梯度提升树GBDT的理论学习与细节补充

    1. 写在前面 今天是梯度提升树GBDT的理论学习和细节补充, 之前整理过XGBOOST和Lightgbm, 在那里面提到了GBDT, 但是只是简单的一过, 并没有关注太多GBDT的细节, 所以这次借 ...

  4. 梯度提升树(GBDT)相关知识

    文章目录 前向分步算法 负梯度拟合 损失函数 分类问题 回归问题 回归问题 分类 二分类 多分类 正则化 优缺点 优点 缺点 GBDT(Gradient Boosting Decision Tree) ...

  5. 基于scikit-learn的梯度提升树GBDT调参学习

    写在前面 昨天学习了GBDT的基本原理及算法,关键是考虑了损失函数为一般函数的时候采用了负梯度下降的策略,并引入了残差拟合来学习叶子结点,最终得到一颗回归树.当然,纸上谈兵是没有用的,最重要的还是要把 ...

  6. 随机森林(Random Forest)和梯度提升树(GBDT)有什么区别?

    随机森林(Random Forest)和梯度提升树(GBDT)有什么区别? 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法. 随机森林是由很多 ...

  7. Boosting、Adaboost、AdaBoost模型的优缺点、提升树、梯度提升树GBDT

    Boosting.Adaboost.AdaBoost模型的优缺点.提升树.梯度提升树GBDT 目录 Boosting.Adaboost.AdaBoost模型的优缺点.提升树.梯度提升树GBDT Boo ...

  8. 梯度提升树(GBDT)原理小结(转载)

    在集成学习值Adaboost算法原理和代码小结(转载)中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boos ...

  9. 笔记︱决策树族——梯度提升树(GBDT)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 本笔记来源于CDA DSC,L2-R语言课程所 ...

最新文章

  1. The Hadoop Distributed Filesystem
  2. C# 结构体与类的区别
  3. asp.net导出数据到Excel
  4. SpringBoot 读取资源文件
  5. 网络15软工个人作业5——软件工程总结
  6. 第十章 动态选路协议
  7. JVM核心——JVM运行和类加载全过程
  8. FMI在仿真软件SkyEye中的应用
  9. 20、在Linux中实现类似windows中获取配置文件的函数GetProfileString
  10. 一道考查request导致的安全性问题的ctf题
  11. 题解(1-4)-----寒假练习赛(一)
  12. Oracle:imp导入dmp文件
  13. OpenWrt搭建KMS服务(Vlmcsd)
  14. 三角色:程序员、技术主管与架构师
  15. DirectX 11
  16. 旭阳集团锚定“2025” 企业卓越运营让信息化来帮忙
  17. 2021-12-01 WPF上位机 103-西门子S7协议之V区,DB区读数据方法流程解析
  18. 提升大数据数据分析性能的方法及技术(二)
  19. Python 判断能否被整除
  20. Nacos 启动报错

热门文章

  1. 在Echarts的barChart中,xAxis的axisLabel中,interval参数如何解释?
  2. 智慧产业园区建设破题,秘诀竟是“小程序化”?
  3. 关于hosts管理工具
  4. Redis框架从入门到学精(全)
  5. 智慧城市挺进“绿色”时代
  6. Python脚本运行出现语法错误
  7. 数学知识——约数(因数)
  8. Python制作简易计算器(GUI)---Tkinter
  9. safari下载中文文件名乱码
  10. 2017三月c语言,2017年3月计算机c语言二级考试真题