深入理解GBDT二分类算法

目录:

  1. GBDT分类算法简介
  2. GBDT二分类算法
    2.1 逻辑回归的对数损失函数
    2.2 GBDT二分类原理
  3. GBDT二分类算法实例
  4. 手撕GBDT二分类算法
    4.1 用Python3实现GBDT二分类算法
    4.2 用sklearn实现GBDT二分类算法
  5. GBDT分类任务常见的损失函数
  6. 总结
  7. Reference

本文的主要内容概览:
在这里插入图片描述

1. GBDT分类算法简介

GBDT无论用于分类还是回归,一直使用的是CART回归树。GBDT不会因为我们所选择的任务是分类任务就选用分类树,这里的核心原因是GBDT每轮的训练是在上一轮训练模型的负梯度值基础之上训练的。这就要求每轮迭代的时候,真实标签减去弱分类器的输出结果是有意义的,即残差是有意义的。如果选用的弱分类器是分类树,类别相减是没有意义的。对于这样的问题,可以采用两种方法来解决:

  • 采用指数损失函数,这样GBDT就退化成了Adaboost,能够解决分类的问题;
  • 使用类似于逻辑回归的对数似然损失函数,如此可以通过结果的概率值与真实概率值的差距当做残差来拟合;

下面我们就通过二分类问题,去看看GBDT究竟是如何做分类的。

2. GBDT二分类算法

2.1 逻辑回归的对数损失函数

逻辑回归的预测函数为:
h θ ( x ) = 1 1 + e − θ T x h_{\theta}(x) = \frac{1}{1+ e^{-\theta^{T} x}} hθ(x)=1+eθTx1
函数 h θ ( x ) h_{\theta}(x) hθ(x) 的值有特殊的含义,它表示结果取 1 1 1 的概率,因此对于输入 x x x 分类结果为类别 1 1 1 和类别 0 0 0 的概率分别为:
P ( Y = 1 ∣ x ; θ ) = h θ ( x ) P(Y=1|x;\theta) = h_{\theta}(x) P(Y=1x;θ)=hθ(x)
P ( Y = 0 ∣ x ; θ ) = 1 − h θ ( x ) P(Y=0|x;\theta) =1 - h_{\theta}(x) P(Y=0x;θ)=1hθ(x)
下面我们根据上式,推导出逻辑回归的对数损失函数 L ( θ ) L(\theta) L(θ) 。上式综合起来可以写成:
P ( Y = y ∣ x ; θ ) = ( h θ ( x ) ) y ( 1 − h θ ( x ) ) 1 − y P(Y=y|x;\theta) = (h_{\theta}(x))^{y}(1-h_{\theta}(x))^{1-y} P(Y=yx;θ)=(hθ(x))y(1hθ(x))1y
然后取似然函数为:
l ( θ ) = ∏ i = 1 N P ( Y = y i ∣ x i ; θ ) = ∏ i = 1 N ( h θ ( x i ) ) y i ( 1 − h θ ( x i ) ) 1 − y i l(\theta) = \prod_{i=1}^{N}P(Y=y_{i}|x_{i};\theta)=\prod_{i=1}^{N}(h_{\theta}(x_{i}))^{y_{i}}(1-h_{\theta}(x_{i}))^{1- y_{i}} l(θ)=i=1NP(Y=yixi;θ)=i=1N(hθ(xi))yi(1hθ(xi))1yi
因为 l ( θ ) l(\theta) l(θ) l o g l ( θ ) logl(\theta) logl(θ) 在同一 θ \theta θ 处取得极值,因此我们接着取对数似然函数为:
L ( θ ) = ∑ i = 1 N [ y i l o g h θ ( x i ) + ( 1 − y i ) l o g ( 1 − h θ ( x i ) ) ] L(\theta) = \sum_{i=1}^{N}\left[ {y_{i}logh_{\theta}(x_{i})} + (1-y_{i})log(1-h_{\theta}(x_{i})) \right] L(θ)=i=1N[yiloghθ(xi)+(1yi)log(1hθ(xi))]
最大似然估计就是求使 L ( θ ) L(\theta) L(θ) 取最大值时的 θ \theta θ 。这里对 L ( θ ) L(\theta) L(θ) 取相反数,可以使用梯度下降法求解,求得的 θ \theta θ 就是要求的最佳参数:
J ( θ ) = − 1 N L ( θ ) = − 1 N ∑ i = 1 N [ y i l o g h θ ( x i ) + ( 1 − y i ) l o g ( 1 − h θ ( x i ) ) ] J(\theta) = - \frac{1}{N}L(\theta) =- \frac{1}{N} \sum_{i=1}^{N}\left[ {y_{i}logh_{\theta}(x_{i})} + (1-y_{i})log(1-h_{\theta}(x_{i})) \right] J(θ)=N1L(θ)=N1i=1N[yiloghθ(xi)+(1yi)log(1hθ(xi))]

2.2 GBDT二分类原理

逻辑回归单个样本 ( x i , y i ) (x_{i},y_{i}) (xi,yi) 的损失函数可以表达为:
L ( θ ) = − y i log ⁡ y i ^ − ( 1 − y i ) log ⁡ ( 1 − y i ^ ) L(\theta) = -y_i \log \hat{y_i} - (1-y_i) \log(1-\hat{y_i}) L(θ)=yilogyi^(1yi)log(1yi^)
其中, y i ^ = h θ ( x ) \hat{y_{i}} = h_{\theta}(x) yi^=hθ(x) 是逻辑回归预测的结果。假设GBDT第 M M M 步迭代之后当前学习器为 F ( x ) = ∑ m = 0 M h m ( x ) F(x) = \sum_{m=0}^M h_m(x) F(x)=m=0Mhm(x) ,将 y i ^ \hat{y_i} yi^ 替换为 F ( x ) F(x) F(x)带入上式之后,可将损失函数写为:
L ( y i , F ( x i ) ) = y i log ⁡ ( 1 + e − F ( x i ) ) + ( 1 − y i ) [ F ( x i ) + log ⁡ ( 1 + e − F ( x i ) ) ] L(y_{i},F(x_{i})) = y_i \log \left( 1+e^{-F(x_i)} \right) + (1-y_i) \left[ F(x_i) + \log \left( 1+e^{-F(x_i)} \right) \right]\\ L(yi,F(xi))=yilog(1+eF(xi))+(1yi)[F(xi)+log(1+eF(xi))]
其中,第 m m m 棵树对应的响应值为(损失函数的负梯度,即伪残差):
r m , i = − ∣ ∂ L ( y i , F ( x i ) ) ∂ F ( x i )

  • 25
    点赞
  • 181
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值