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

GBDT是一种基于梯度提升的集成学习算法,通过不断减少残差来优化模型。每次迭代,GBDT都会在负梯度方向上建立新的弱分类器,以减小与真实值的差距。它适用于分类和回归问题,通过正则化防止过拟合,并能处理不同类型的数据。GBDT的优点包括灵活性高、处理缺失值能力强、预测准确性高,但并行训练困难。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


GBDT(Gradient Boosting Decision Tree)是一种可用于处理分类和回归任务的机器学习集成算法。GBDT是属于Boosting族的算法,因此也是采用分步构建模型的方法。

之前到AdaBoost训练弱分类器关注的是那些被分错的样本,AdaBoost每一次训练都是为了减少错误分类的样本。而GBDT训练弱分类器关注的是残差,也就是上一个弱分类器的表现与完美答案之间的差距,GBDT每一次训练分类器,都是为了减少这个差距,GBDT每一次的计算是都为了减少上一次的残差,进而在残差减少(负梯度)的方向上建立一个新的模型。这是什么意思呢? 我可以举个例子,假设我们去银行借钱,我们想让一个决策树系统来预测可以借给我们多少钱, 如果标准答案是1000的话,假设第一棵决策树预测,可以借给我们950块钱, 那么离标准答案的1000还差50, 效果不算好,能不能提高一些呢?我们就再加一棵决策树,这课决策树过来之后,看到前面的那个已经预测到950了,只是差50, 那么我可以聚焦在这个50上,把这个残差变得再小一些,所以第二个决策树预测结果是30, 那么前两棵决策树预测结果结合起来是980, 离标准答案差20, 所以加了一棵树之后,效果好了。那么还能不能提升呢?我再来一棵树,发现残差只有20了,那我把残差变得再小, 结果第三个决策树预测20, 那么这三棵树就可以正确的预测最终的1000了。

所以GBDT就是这样的一个学习方式了,GBDT是boosting集成学习,boosting集成学习由多个相关联的决策树联合决策, 什么是相关联?就是我上面的例子:

  1. 有一个样本[数据->标签]是:[(feature1,feature2,feature3)-> 1000块]
  2. 第一棵决策树用这个样本训练的预测为950
  3. 那么第二棵决策树训练时的输入,这个样本就变成了:[(feature1,feature2,feature3)->50]
  4. 第二棵决策树用这个样本训练的预测为30
  5. 那么第三棵决策树训练时的输入,这个样本就变成了:[(feature1,feature2,feature3)->20]
  6. 第三棵决策树用这个样本训练的预测为20

这就是GBDT的工作原理了, GBDT是旨在不断减少残差(回归),通过不断加入新的树旨在在残差减少(负梯度)的方向上建立一个新的模型。——即损失函数是旨在最快速度降低残差。

前向分步算法

考虑加法模型:
f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x) = \sum_{m=1}^M \beta_mb(x;\gamma_m) f(x)=m=1Mβmb(x;γm)
其中, b ( x ; γ m ) b(x;\gamma_m) b(x;γm) 为基函数, γ m \gamma_m γm 为基函数的参数, β m \beta_m βm 为基函数的系数。

给定训练数据及损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x)) 的条件下,学习加法模型 f ( x ) f(x) f(x) 成为经验风险极小化即损失函数极小化问题:
arg ⁡ min ⁡ β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x ; γ m ) ) \arg \min \limits_{\beta_m,\gamma_m} \sum_{i=1}^N L \left(y_i,\sum_{m=1}^M \beta_mb(x;\gamma_m)\right) argβm,γmmini=1NL(yi,m=1Mβmb(x;γm))
上面的式子是个复杂的优化问题。

前向分步算法采用贪心策略求解此问题:

  1. 通过不断迭代,逐步逼近最优化目标函数

  2. 从前向后,每次迭代只学习一个基函数及其系数

  3. 每次迭代都只优化下面的函数:
    min ⁡ β , γ ∑ i = 1 N L ( y i , β b ( x ; γ ) ) \min \limits_{\beta,\gamma} \sum_{i=1}^N L \left(y_i,\beta b(x;\gamma)\right) β,γmini=1NL(yi,βb(x;γ))

具体而言,给定训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , x i ∈ X ⊆ R n , y i ∈ { − 1 , 1 } T=\{(x_1,y_1),(x_2,y_2),...,(x_N, y_N)\}, x_i \in \mathcal X \sube R^n, y_i\in \{-1, 1\} T={(x1,y1),(x2,y2),...,(xN,yN)},xiXRn,yi{1,1},损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x)) 和基函数集合 { b ( x ; γ ) } \{b(x;\gamma)\} {b(x;γ)} ,学习的加法模型 f ( x ) f(x) f(x) 的前向分步算法如下:

输入:训练数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) , x i ∈ X ⊆ R n , y i ∈ { − 1 , 1 } T={(x_1,y_1),(x_2,y_2),...,(x_N, y_N)}, x_i \in \mathcal X \sube R^n, y_i\in \{-1, 1\} T=(x1,y1),(x2,y2),...,(xN,yN),xiXRn,yi{1,1}, 损失函数 L ( y , f ( x ) ) L(y, f(x)) L(y,f(x)); 基函数集合 { b ( x ; γ ) } \{b(x;\gamma)\} {b(x;γ)}

输出:加法模型 f ( x ) f(x) f(x)

步骤:

  1. 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
  2. m = 1 , 2 , … , M m=1,2,\dots,M m=1,2,,M
  3. 极小化损失函数

( β m , γ m ) = arg ⁡ min ⁡ β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (\beta_m,\gamma_m)=\arg\min \limits_ {\beta,\gamma}\sum_{i=1}^NL(y_i, f_{m-1}(x_i)+\beta b(x_i;\gamma)) (βm,γm)=argβ,γmini=1NL(yi,fm1(xi)+βb(xi;γ))

  1. 更新

f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_m(x)=f_{m-1}(x)+\beta _mb(x;\gamma_m) fm(x)=fm1(x)+βmb(x;γm)

  1. 得到加法模型

f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=f_M(x)=\sum_{m=1}^M\beta_m b(x;\gamma_m) f(x)=fM(x)=m=1Mβmb(x;γm)

这样,前向分步算法将同时求解从 m = 1 m=1 m=1 M M M所有参数 β m ,   γ m \beta_m,\,\gamma_m βm,γm的优化问题简化为逐次求解各个 β m ,   γ m \beta_m,\,\gamma_m βm,γm的优化问题。

负梯度拟合

负梯度拟合,就是在损失函数梯度的负方向上进行拟合。用损失函数的负梯度来拟合本轮损失的近似值,给定当前模型 f ( x ) = f m − 1 ( x ) f(x)=f_{m-1}(x) f(x)=fm1(x),则第 m m m轮的第 i i i个样本的损失函数的负梯度表示为:
r m i = − [ ∂ L ( y i ,   f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{\partial L(y_i,\,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)} rmi=[f(xi)L(yi,f(xi))]f(x)=fm1(x)
那么问题来了,为什么要拟合负梯度?

我们的目标是找到一个 f ( x ) f(x) f(x)使得损失函数 L ( y i , f ( x i ) ) L(y_i, f(x_i)) L(yi,f(xi))的值最小,那么可以将 f ( x ) f(x) f(x)视为参数,使用梯度下降法进行优化。假设当前找到的 f ( x ) = f m − 1 ( x ) f(x)=f_{m-1}(x) f(x)=fm1(x),则根据梯度下降算法,第m轮的 f ( x ) m f(x)_m f(x)m的迭代公式如下:
f ( x ) m = f ( x ) m − 1 − ∂ L ( y i ,   f m − 1 ( x i ) ) ∂ f m − 1 ( x i ) f(x)_m=f(x)_{m-1}-\frac{\partial L(y_i,\,f_{m-1}(x_i))}{\partial f_{m-1}(x_i)} f(x)m=f(x)m1fm1(xi)L(yi,fm1(xi))
根据前向分步算法的加法模型有:
f ( x ) m = f ( x ) m − 1 + T ( x ; γ ) f(x)_m=f(x)_{m-1}+T(x;\gamma) f(x)m=f(x)m1+T(x;γ)
其中 T ( x ; γ ) = β b ( x i ; γ ) T(x;\gamma) =\beta b(x_i;\gamma) T(x;γ)=βb(xi;γ),是新一轮需要训练的树模型。对比上面两个式子,不难得到:
T ( x ; γ ) = − ∂ L ( y i ,   f m − 1 ( x i ) ) ∂ f m − 1 ( x i ) T(x;\gamma) =-\frac{\partial L(y_i,\,f_{m-1}(x_i))}{\partial f_{m-1}(x_i)} T(x;γ)=fm1(xi)L(yi,fm1(xi))
上面式子的左边为树的预测值,右边为真实值,所以整个过程就变成了每次拟合损失函数的负梯度的值:
r m i = − [ ∂ L ( y i ,   f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{\partial L(y_i,\,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)} rmi=[f(xi)L(yi,f(xi))]f(x)=fm1(x)
也就是说,通过拟合损失函数的负梯度值,就可以达到优化损失函数的目的。

上面的结论要求了损失函数必须一阶可导,因此损失函数的选择很重要。

损失函数

分类问题

指数损失函数:
L ( y , f ( x ) ) = e ( − y f ( x ) ) L(y,f(x))=e^{(-yf(x))} L(y,f(x))=e(yf(x))
对数似然损失函数(二分类):
L ( y , f ( x ) ) = l o g ( 1 + e ( − y f ( x ) ) ) L(y,f(x))=log\left(1+e^{(-yf(x))}\right) L(y,f(x))=log(1+e(yf(x)))
对数似然损失函数(多分类):
L ( y , f ( x ) ) = − ∑ k = 1 K y k   l o g   p k ( x ) L(y,f(x))=-\sum_{k=1}^Ky_k\,log\,p_k(x) L(y,f(x))=k=1Kyklogpk(x)

回归问题

平方损失函数:
L ( y , f ( x ) ) = ( y − f ( x ) ) 2 L(y,f(x))=(y-f(x))^2 L(y,f(x))=(yf(x))2
此时,负梯度正好与每一步迭代损失函数的残差相等,拟合负梯度也等同于拟合残差。

绝对损失函数:
L ( y , f ( x ) ) = ∣ ( y − f ( x ) ) ∣ L(y,f(x))=|(y-f(x))| L(y,f(x))=(yf(x))
对应负梯度方向为:
s i g n ( y i − f ( x i ) ) sign(y_i-f(x_i)) sign(yif(xi))
现在有损失函数的优化策略和损失函数,下面看看GBDT的具体实现。

回归问题

回归问题对梯度的处理相对简单,故先讲讲回归问题。

输入: 训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , x i ∈ X ⊆ R n , y i ∈ Y ⊆ R T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\},x_i\in X\subseteq R^n,y_i \in Y\subseteq R T={(x1,y1),(x2,y2),...,(xN,yN)},xiXRn,yiYR;损失函数 L ( Y , f ( X ) ) L(Y,f(X)) L(Y,f(X));最大迭代次数 M M M

输出: 回归树 f ( x ) f(x) f(x)

步骤:

  1. 初始化弱学习器 f 0 ( x ) = arg ⁡ min ⁡ c ∑ i = 1 N L ( y i , c ) f_0(x)=\mathop{\arg\min}_{c}\sum_{i=1}^{N}L(y_i,c) f0(x)=argminci=1NL(yi,c)

  2. m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M:

    1. i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N,计算损失函数在当前模型的负梯度:
      r m i = − [ ∂ L ( y i ,   f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{\partial L(y_i,\,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)} rmi=[f(xi)L(yi,f(xi))]f(x)=fm1(x)

    2. 利用 ( x i , r m i )   ( i = 1 , 2 , . . . , N ) (x_i,r_{mi})\,(i=1,2,...,N) (xi,rmi)(i=1,2,...,N),拟合一棵CART树,得到第 m m m棵树,其对应的叶子节点区域为 R m j ,   j = 1 , 2 , . . . , J R_{mj},\,j=1,2,...,J Rmj,j=1,2,...,J。其中 J J J为树 m m m的叶子节点的个数。

    3. j = 1 , 2 , . . . , J j=1,2,...,J j=1,2,...,J,在损失函数极小化条件下,估计出相应叶节点区域的最佳拟合值:
      c m j = arg ⁡ min ⁡ c ∑ x j ∈ R m j N L ( y i , f m − 1 ( x i ) + c ) c_{mj}=\mathop{\arg\min}_{c}\sum_{x_j\in R_{mj}}^{N}L(y_i,f_{m-1}(x_i)+c) cmj=argmincxjRmjNL(yi,fm1(xi)+c)

    4. 更新强学习器:
      f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j   I ( x ∈ R m j ) f_m(x)=f_{m-1}(x)+\sum_{j=1}^{J}c_{mj}\,I(x\in R_{mj}) fm(x)=fm1(x)+j=1JcmjI(xRmj)

  3. 得到强学习器 f ( x ) f(x) f(x)的表达式:
    f ( x ) = f M ( x ) = f 0 ( x ) + ∑ m = 1 M ∑ j = 1 J c m j   I ( x ∈ R m j ) f(x)=f_M(x)=f_0(x)+\sum_{m=1}^M\sum_{j=1}^{J}c_{mj}\,I(x\in R_{mj}) f(x)=fM(x)=f0(x)+m=1Mj=1JcmjI(xRmj)

分类

下面再看看GBDT分类算法,GBDT的分类算法从思想上和GBDT的回归算法没有区别,但是由于样本输出不是连续的值,而是离散的类别,导致我们无法直接从输出类别去拟合类别输出的误差,好在GBDT可以根据学习任务灵活选择相应的损失函数。

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

二分类

输入: 训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , x i ∈ X ⊆ R n , y i ∈ Y = { − 1 , + 1 } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\},x_i\in X\subseteq R^n,y_i \in Y=\{-1,+1\} T={(x1,y1),(x2,y2),...,(xN,yN)},xiXRn,yiY={1,+1};损失函数 L ( y , f ( x ) ) = l o g ( 1 + e ( − y f ( x ) ) ) L(y,f(x))=log\left(1+e^{(-yf(x))}\right) L(y,f(x))=log(1+e(yf(x)));最大迭代次数 M M M

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

  1. 初始化弱学习器 f 0 ( x ) = arg ⁡ min ⁡ c ∑ i = 1 N L ( y i , c ) f_0(x)=\mathop{\arg\min}_{c}\sum_{i=1}^{N}L(y_i,c) f0(x)=argminci=1NL(yi,c)

  2. m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M

    1. i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N,计算损失函数在当前模型的负梯度:
      r m i = − [ ∂ L ( y i ,   f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) = y i 1 + e ( y i   f ( x i ) ) r_{mi}=-[\frac{\partial L(y_i,\,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)}=\frac{y_i}{1+e^{(y_i\,f(x_i))}} rmi=[f(xi)L(yi,f(xi))]f(x)=fm1(x)=1+e(yif(xi))yi

    2. 利用 ( x i , r m i )   ( i = 1 , 2 , . . . , N ) (x_i,r_{mi})\,(i=1,2,...,N) (xi,rmi)(i=1,2,...,N),拟合一棵CART树,得到第 m m m棵树,其对应的叶子节点区域为 R m j ,   j = 1 , 2 , . . . , J R_{mj},\,j=1,2,...,J Rmj,j=1,2,...,J。其中 J J J为树 m m m的叶子节点的个数。

    3. j = 1 , 2 , . . . , J j=1,2,...,J j=1,2,...,J,在损失函数极小化条件下,估计出相应叶节点区域的最佳拟合值:
      c m j = arg ⁡ min ⁡ c ∑ x j ∈ R m j N l o g ( 1 + e ( − y i ( f t − 1 ( x i ) + c ) ) ) c_{mj}=\mathop{\arg\min}_{c}\sum_{x_j\in R_{mj}}^{N}log\left(1+e^{(-y_i(f_{t-1}(x_i)+c))}\right) cmj=argmincxjRmjNlog(1+e(yi(ft1(xi)+c)))

    4. 由于上式比较难优化,我们一般使用近似值代替:
      c m j = ∑ x j ∈ R m j / ∑ x j ∈ R m j ∣ r m i ∣ ( 1 − ∣ r m i ∣ ) c_{mj}=\sum_{x_j\in R_{mj}}/\sum_{x_j\in R_{mj}}|r_{mi}|(1-|r_{mi}|) cmj=xjRmj/xjRmjrmi(1rmi)

    5. 更新强学习器:
      f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j   I ( x ∈ R m j ) f_m(x)=f_{m-1}(x)+\sum_{j=1}^{J}c_{mj}\,I(x\in R_{mj}) fm(x)=fm1(x)+j=1JcmjI(xRmj)

  3. 得到强学习器 f ( x ) f(x) f(x)的表达式:
    f ( x ) = f M ( x ) = f 0 ( x ) + ∑ m = 1 M ∑ j = 1 J c m j   I ( x ∈ R m j ) f(x)=f_M(x)=f_0(x)+\sum_{m=1}^M\sum_{j=1}^{J}c_{mj}\,I(x\in R_{mj}) f(x)=fM(x)=f0(x)+m=1Mj=1JcmjI(xRmj)

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

多分类

考虑到分类和回归算法的过程相似性,以下就阐述多分类GBDT算法的时候不再给出具体的流程,而仅仅列出差异的部分。对于多分类任务,GDBT的做法是采用一对多的策略。也就是说,对每个类别训练M个分类器。假设有K个类别,那么训练完之后总共有M*K颗树。

多分类GBDT比二分类GBDT复杂些,对应的是多元逻辑回归和二元逻辑回归的复杂度差别。假设类别数为 K K K,则此时我们的对数似然损失函数为:
L ( y , f ( x ) ) = − ∑ k = 1 K y k   l o g   p k ( x ) (1) L(y,f(x))=-\sum_{k=1}^Ky_k\,log\,p_k(x) \tag 1 L(y,f(x))=k=1Kyklogpk(x)(1)
其中如果样本输出类别为 k k k,则 y k y_k yk =1,第 k k k 类的概率 p k ( x ) p_k(x) pk(x) 的表达式为:
p k ( x ) = e f k ( x ) ∑ l = 1 K e f l ( x ) ( s o f t m a x 函 数 ) (2) p_k(x)=\frac{e^{f_k(x)}}{\sum_{l=1}^{K}e^{f_l(x)}} \quad (softmax函数) \tag 2 pk(x)=l=1Kefl(x)efk(x)(softmax)(2)
将式子(2)代入式子(1)后,计算出第 m m m 轮的第 i i i 个样本对应类别 l l l 的负梯度误差为:
r m i l = − [ ∂ L ( y i ,   f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f l ,   m − 1 ( x ) = y i l − p l , m − 1 ( x i ) r_{mil}=-[\frac{\partial L(y_i,\,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{l,\,m-1}(x)}=y_{il}-p_{l,m-1}(x_i) rmil=[f(xi)L(yi,f(xi))]f(x)=fl,m1(x)=yilpl,m1(xi)
观察上式可以看出,其实这里的误差就是样本 i i i 对应类别 l l l 的真实概率和 t − 1 t-1 t1 轮预测概率的差值。

对于生成的决策树,我们各个叶子节点的最佳负梯度拟合值为:
c m j l = arg ⁡ min ⁡ c j l ∑ i = 0 m ∑ k = 1 K L ( y k ,   f m − 1 ,   l ( x ) + ∑ j = 0 J c j l   I ( x i ∈ R m j ) ) c_{mjl}=\mathop{\arg\min}_{c_{jl}}\sum_{i=0}^{m}\sum_{k=1}^{K}L\left(y_k,\,f_{m-1,\,l}(x)+\sum_{j=0}^{J}c_{jl}\,I(x_i \in R_{mj})\right) cmjl=argmincjli=0mk=1KL(yk,fm1,l(x)+j=0JcjlI(xiRmj))
由于上式比较难优化,我们一般使用近似值代替:
c m j l = K K − 1 ∑ x i ∈ R m j l r m i l ∑ x i ∈ R m i l ∣ r m i l ∣ ( 1 − ∣ r m i l ∣ ) c_{mjl}=\frac{K}{K-1}\frac{\sum_{x_i\in R_{mjl}}r_{mil}}{\sum_{x_i\in R_{mil}}|r_{mil}|(1-|r_{mil}|)} cmjl=K1KxiRmilrmil(1rmil)xiRmjlrmil
除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,多分类GBDT与二分类GBDT以及GBDT回归算法过程相同。

正则化

GBDT有非常快降低Loss的能力,这也会造成一个问题:Loss迅速下降,模型偏差(bias),方差(variance)高,造成过拟合。下面简单介绍GBDT中抵抗过拟合的方法:

  • 限制树的复杂度,即对弱学习器CART树进行正则化剪枝,比如如控制树的最大深度、节点的最少样本数、最大叶子节点数、节点分支的最小样本数等

  • Shrinkage,其思想认为,每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它不完全信任每一个棵残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学几棵树弥补不足。用方程来看更清晰,即给每棵数的输出结果乘上一个步长 α \alpha α(learning rate)

    对于前面的弱学习器的迭代:

f m ( x ) = f m − 1 ( x ) + T ( x ; γ m ) f_m(x)=f_{m-1}(x)+T(x;\gamma_m) fm(x)=fm1(x)+T(x;γm)

​ 加上正则化项,则有
f m ( x ) = f m − 1 ( x ) + α   T ( x ; γ m ) f_m(x)=f_{m-1}(x)+\alpha\, T(x;\gamma_m) fm(x)=fm1(x)+αT(x;γm)
此处, α \alpha α的取值范围为(0,1]。对于同样的训练集学习效果,较小 α \alpha α的意味着需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起决定算法的拟合效果。

优缺点

优点

  • 可以灵活处理各种类型的数据,包括连续值和离散值
  • 具有伸缩不变性,不用归一化特征
  • 具有特征组合和特征选择的作用
  • 可自然地处理缺失值
  • 相对SVM而言,在相对较少的调参时间情况下,预测的准确率也比较高
  • 在使用一些健壮的损失函数,对异常值得鲁棒性非常强。比如Huber损失函数和Quantile损失函数

缺点

  • 由于弱学习器之间存在较强依赖关系,难以整体并行训练

参考文章:

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

GBDT算法梳理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值