GBDT

  • Post author:
  • Post category:其他




前向分布算法

在Adaboost算法中,我们的最终目的是通过构建弱分类器的线性组合:





f

(

x

)

=

m

=

1

M

G

m

(

x

)

f(x)= \sum_ {m=1}^{M}G_{m}(x)






f


(


x


)




=

















m


=


1



















M





















G











m



















(


x


)







加法模型的表达式为:





f

(

x

)

=

m

=

1

M

β

m

b

(

x

;

γ

m

)

f(x)= \sum_ {m=1}^{M}\beta _{m}b(x; \gamma_{m})






f


(


x


)




=

















m


=


1



















M





















β











m



















b


(


x


;





γ











m



















)







其中,



b

(

x

;

r

m

)

b(x;r_{m})






b


(


x


;





r











m



















)





为基函数,



r

m

r_{m}







r











m






















是基函数的参数,



β

m

\beta_{m}







β











m






















为基函数的系数。

前向分布算法总结如下:

输入:

训练数据集T ={(x1,y1), (x2, y2), …, (xN, yN)};损失函数L(y, f(x));基函数集{b(x; r)};

输出:

加法模型f(x)

解:

  1. 初始化f0(x)= 0
  2. 对m = 1, 2,…, M

    a,极小化损失函数>




    (

    β

    m

    ,

    γ

    m

    )

    =

    arg

    min

    β

    ,

    γ

    i

    =

    1

    N

    L

    (

    y

    i

    ,

    f

    m

    1

    (

    x

    i

    )

    +

    β

    b

    (

    x

    i

    ;

    γ

    )

    )

    \left(\beta_{m}, \gamma_{m}\right)=\arg \min _{\beta, \gamma} \sum_{i=1}^{N} L\left(y_{i}, f_{m-1}\left(x_{i}\right)+\beta b\left(x_{i} ; \gamma\right)\right)







    (



    β











    m



















    ,





    γ











    m



















    )





    =








    ar

    g














    β


    ,


    γ









    min




























    i


    =


    1



















    N




















    L





    (



    y











    i



















    ,





    f











    m





    1






















    (



    x











    i



















    )





    +




    β


    b





    (



    x











    i



















    ;




    γ


    )



    )








    b,更新





    f

    m

    (

    x

    )

    =

    f

    m

    1

    (

    x

    )

    +

    β

    m

    b

    (

    x

    ;

    γ

    m

    )

    f_{m}(x)=f_{m-1}(x)+\beta_{m} b\left(x ; \gamma_{m}\right)







    f











    m



















    (


    x


    )




    =









    f











    m





    1



















    (


    x


    )




    +









    β











    m



















    b





    (


    x


    ;





    γ











    m



















    )






  3. 得到加法模型





    f

    m

    (

    x

    )

    =

    f

    m

    1

    (

    x

    )

    +

    β

    m

    b

    (

    x

    ;

    γ

    m

    )

    f_{m}(x)=f_{m-1}(x)+\beta_{m} b\left(x ; \gamma_{m}\right)







    f











    m



















    (


    x


    )




    =









    f











    m





    1



















    (


    x


    )




    +









    β











    m



















    b





    (


    x


    ;





    γ











    m



















    )






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



负梯度拟合

针对各种各样损失函数如何让进行通用性拟合的问题,Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。

第t轮的第i个样本的损失函数的负梯度表示为:

在这里插入图片描述



损失函数

  1. 分类算法损失

    1. 指数损失





      L

      (

      y

      ,

      f

      (

      x

      )

      )

      =

      e

      x

      p

      (

      y

      f

      (

      x

      )

      )

      L(y,f(x))=exp(-yf(x))






      L


      (


      y


      ,




      f


      (


      x


      )


      )




      =








      e


      x


      p


      (





      y


      f


      (


      x


      )


      )





    2. 对数损失




      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


      )


      )




      =








      l


      o


      g


      (


      1




      +








      e


      x


      p


      (





      y


      f


      (


      x


      )


      )


      )





      二分类




      L

      (

      y

      ,

      f

      (

      x

      )

      )

      =

      k

      =

      1

      K

      y

      k

      log

      p

      k

      (

      x

      )

      L(y, f(x))=-\sum_{k=1}^{K} y_{k} \log p_{k}(x)






      L


      (


      y


      ,




      f


      (


      x


      )


      )




      =


























      k


      =


      1










      K






















      y











      k





















      lo

      g






      p











      k



















      (


      x


      )





      多分类

  2. 回归算法损失

    均方差

    绝对损失

    Huber损失(均方差和绝对损失的折中产物,对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量)

    分位损失



二分类,多分类



二分类

在这里插入图片描述



多分类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



正则化

  1. 和Adaboost类似的正则化项,即步长(learning rate)。定义为ν。(Shrinkage 的思想)ν的取值范围为0<ν≤1。对于同样的训练集学习效果,较小的ν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。

  2. 通过子采样比例(subsample)。取值为(0,1]。这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。

  3. 使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。减少弱学习器难以并行学习的弱点。

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



优缺点



优点

  1. 可以灵活处理各种类型的数据,包括连续值和离散值。
  2. 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
  3. 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。



缺点

由于弱学习器之间存在依赖关系,难以并行训练数据。(SGBT进行了改善)



sklearn参数

Boosting框架的重要参数:

loss {‘deviance’, ‘exponential’}, 默认‘deviance’

损失函数。有对数似然损失函数”deviance”和指数损失函数”exponential”两个选项。一般来说,推荐使用默认的对数似然损失函数”deviance”,它对于二元分类和多元分类都有较好的优化效果。而指数损失函数”exponential”相当于执行了Adaboost算法。

learning_rate float,范围(0,1],默认0.1

弱学习器的权重缩减系数ν。

n_estimators int (default=100)

弱学习器的最大迭代次数,或者说最大的弱学习器个数。一般来说n_estimators太小,容易欠拟合,而n_estimators太大,又容易过拟合。调参过程中,常常将它和参数learning_rate一起来考虑。

subsample float, (default=1.0)

子采样比例,取值为(0,1]。推荐在[0.5, 0.8]之间选择。

init estimator

初始化的弱学习器。。如果不输入,则用训练集样本来做样本集的初始化分类回归预测,否则使用init参数提供的学习器来做初始化分类回归预测。一般用在我们对数据有先验知识或者之前做过拟合的时候,否则就不用考虑这个参数了。

validation_fraction float (0,1),默认0.1

验证集比例。在n_iter_no_change为integer时使用,用于提前终止训练。

n_iter_no_change int, default None

None表示不会提前终止训练。为int时表示验证集的评分在多轮迭代中没有提高,则停止训练。

tol float, optional, default 1e-4

提前停止的容忍程度。在n_iter_no_change轮迭代中,损失都没能提高tol,则停止训练。

决策树类相关参数:

决策树相关参数。在随机森林算法中已经对这些参数进行了细致的说明:


https://blog.csdn.net/m0_38019841/article/details/85100588

criterion

max_depth

max_features

min_samples_split

min_samples_leaf

min_weight_fraction_leaf

min_impurity_decrease

min_impurity_split

max_leaf_nodes

random_state

verbose

warm_start

presort bool, optional (default=False)

是否预先对数据排序以加快拟合中最佳分裂的发现。



应用场景

  1. Facebook使用其来自动发现有效的特征、特征组合,来作为LR模型中的特征,以提高 CTR预估(Click-Through Rate Prediction)的准确性
  2. GBDT在淘宝的搜索及预测业务上也发挥了重要作用