机器学习:GBDT


机器学习 深度学习 NLP 搜索推荐 等 索引目录


新的一年,新年快乐~
好久没有上来了,这两个月一直在忙paper的事儿,然后今天再看以前学习的知识,竟然有些生疏,所以学习是一个持之以恒的事儿,希望自己能够坚持下去。因为自己也是新手吧,很多知识可能理解的也不够到位,希望自己能够和大家一起学习,熟练掌握这些知识。


Boosting系列算法里主要的算法有AdaBoost算法和提升树系列算法,而提升树系列算法里广泛应用的算法是GBDT(Gradient Boosted Decision)和XGBoost。GBDT是以决策树(CART树)为基函数的梯度提升算法,XGBoost是对GBDT的改进,本次主要来复习一下GBDT的相关理论知识,主要内容参考邹老师的PPT。

1、梯度提升算法(GB, Gradient Boosting)

梯度提升算法的目标是寻找最优 F ( x ) F(x) F(x)(即,损失函数Loss Function),使得损失函数在训练集上的期望最小。它的基本思想是每一步以来损失函数的梯度方向产生一个弱模型,并将其加权累加到总模型中,即:
F m ( x ⃗ ) = F m − 1 ( x ⃗ ) + a r g m i n f ∈ H ∑ i = 1 n L ( y i , F m − 1 ( x i ⃗ ) + f ( x i ) ) ( 式 1 ) F_{m}(\vec{x})=F_{m-1}(\vec{x})+\underset{f\in H}{arg min}\sum_{i=1}^{n}L(y_{i},F_{m-1}(\vec{x_{i}})+f(x_{i})) (式1) Fm(x )=Fm1(x )+fHargmini=1nL(yi,Fm1(xi )+f(xi))1
上式中, f ( ⋅ ) f(\cdot) f()是基函数, L ( ⋅ ) L(\cdot) L()是损失函数,其典型定义为典型定义为
L ( y , F ( x ⃗ ) ) = 1 2 ( y − F ( x ⃗ ) 2 ( 式 2 ) L(y,F(\vec{x}))=\frac{1}{2}(y-F(\vec{x})^{2} (式2) L(y,F(x ))=21(yF(x )22

L ( y , F ( x ⃗ ) ) = ∣ y − F ( x ⃗ ) ∣ ( 式 3 ) L(y,F(\vec{x}))=\left | y-F(\vec{x}) \right |(式3) L(y,F(x ))=yF(x )3

从式(1)可以看出,梯度提升算法主要问题就是找出最优基函数 f ( ⋅ ) f(\cdot) f(),使用贪心法来选择最优基函数比较困难,故采用梯度下降法来近似计算:
将样本带入基函数f得到一组 f ( x 1 ) , f ( x 2 ) , . . . . , f ( x n ) f(x_1),f(x_2),....,f(x_n) f(x1),f(x2),....,f(xn)向量,从而损失函数L退化为向量 L ( y 1 , f ( x 1 ) ) , L ( y 2 , f ( x 2 ) ) , . . . , L ( y n , f ( x n ) ) L(y_1,f(x_1)),L(y_2,f(x_2)),...,L(y_n,f(x_n)) L(y1,f(x1)),L(y2,f(x2)),...,L(yn,f(xn))
F m ( x ⃗ ) = F m − 1 ( x ⃗ ) − γ m ∑ i = 1 n ▽ f L ( y i , F m − 1 ( x i ⃗ ) ) ( 式 4 ) F_{m}(\vec{x})=F_{m-1}(\vec{x})-\gamma _{m}\sum_{i=1}^{n}\bigtriangledown _{f}L(y_{i},F_{m-1}(\vec{x_{i}})) (式4) Fm(x )=Fm1(x )γmi=1nfL(yi,Fm1(xi ))(4)

式中, γ \gamma γ为梯度下降的步长,使用线性搜索求最优步长:
γ m = a r g m i n γ ∑ i = 1 n L ( y i , F m − 1 ( x i ⃗ ) − γ ▽ f L ( y i , F m − 1 ( x i ⃗ ) ) )   ( 式 5 ) \gamma _{m}=\underset{\gamma }{arg min}\sum_{i=1}^{n}L(y_{i},F_{m-1}(\vec{x_{i}})-\gamma\bigtriangledown _{f}L(y_{i},F_{m-1}(\vec{x_{i}})) ) \ (式5) γm=γargmini=1nL(yi,Fm1(xi )γfL(yi,Fm1(xi ))) (5)

提升算法的步骤:
1)初始给定模型为常数

  • F 0 ( x ⃗ ) = a r g m i n γ ∑ i = 1 n L ( y i , γ ) F_{0}(\vec{x})=\underset{\gamma }{arg min}\sum_{i=1}^{n}L\left ( y_{i},\gamma \right ) F0(x )=γargmini=1nL(yi,γ) (式6)

2)对于 m = 1 m=1 m=1 M M M

  • a)计算为残差
    γ i m = [ ∂ L ( y i , F ( x i ⃗ ) ) ∂ F ( x i ⃗ ) ] F ( x ⃗ ) = F m − 1 ( x ⃗ ) , i = 1 , 2 , . . . , n \gamma _{im}=\left [ \frac{\partial L(y_{i},F(\vec{x_{i}}))}{\partial F(\vec{x_{i}})} \right ]_{F(\vec{x})=F_{m-1}(\vec{x})},i=1,2,...,n γim=[F(xi )L(yi,F(xi ))]F(x )=Fm1(x ),i=1,2,...,n (式7)
  • b)使用数据 { ( x i ⃗ , γ i m ) } i = 1 n \left \{ (\vec{x_{i}},\gamma _{im}) \right \}_{i=1}^{n} {(xi ,γim)}i=1n计算拟合残差的的基函数 f m ( x ) f_{m}(x) fm(x)
  • c)计算步长
    γ m = a r g m i n γ ∑ i = 1 n L ( y i , F m − 1 ( x i ⃗ ) − γ ⋅ f m ( x i ⃗ ) ) \gamma _{m}=\underset{\gamma }{arg min}\sum_{i=1}^{n}L(y_{i},F_{m-1}(\vec{x_{i}})-\gamma \cdot f_{m}(\vec{x_{i}})) γm=γargmini=1nL(yi,Fm1(xi )γfm(xi )) (式8)
  • d)更新模型
    F m ( x ⃗ ) = F m − 1 ( x ⃗ ) − γ ⋅ f m ( x i ⃗ ) F_{m}(\vec{x})=F_{m-1}(\vec{x})-\gamma \cdot f_{m}(\vec{x_{i}}) Fm(x )=Fm1(x )γfm(xi ) (式9)

2、GBDT(Gradient Boosted Decision)

梯度提升的典型基函数即决策树(尤其是CART),GBDT是梯度提升(GB)和决策树(DT)的结合,这里的决策树是弱回归树,这就限制了DBDT以CART回归树作为基函数,进而将核心问题转化为,如何使用数据-------拟合一棵CART树?
对于CART分类树的介绍已在前面的一篇决策树的博文里面讲过,这里不再赘述。GBDT中使用的是CART回归树,回归树的生成步骤和分类树类似,但是每个结点不再是类别,而是预测值,这个预测值是该结点中所有样本的平均值。CART分类树的
最佳切分点选择原则是Gini指标,选择Gini指数最小的特征及其对应的切分点作为最优特征与最优切分点,而CART回归树中的衡量标准是最小平方残差,其思想是,让组内方差最小,对应组间方差最大,即树分裂的左枝和右枝差异化最大。
邹博老师的PPT里内容讲的很全面,这里就贴一下邹博老师的关于GBDT的课件内容:
这里写图片描述
这里写图片描述

这里写图片描述
这里写图片描述

3、GBDT和随机森林的区别

GBDT和随机森林(random forest)都是由多棵树组成,最终的结果都是由多棵树一起决定,它们都是属于集成学习(ensemble learning)的范畴。集成学习下有两个重要的策略Bagging和Boosting。

1)随机森林属于Bagging算法,每个分类器都随机从原样本中做有放回的采样,然后分别在这些采样后的样本上训练分类器,然后再把这些分类器组合起来,采用多数投票等来决定最终结果,GBDT属于Boosting算法,通过迭代地训练一系列的分类器,每个分类器采用的样本分布都和上一轮的学习结果有关 ,最终将所有结果加权累加起来。

2)组成随机森林的树可以为回归树,也可以是分类树;但GBDT只能是回归树

3)组成随机森林的树可以并行生成;而组成GBDT的树与上一轮的树相关,只能串行生成

下一篇就来复习一下XGBoost,以及两者之间的主要区别。
借此感谢一下邹博老师,我学术上的男神老师~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值