- 我的个人微信公众号: Microstrong
- 微信公众号ID: MicrostrongAI
- 微信公众号介绍: Microstrong(小强)同学主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容,分享在学习过程中的读书笔记!期待您的关注,欢迎一起学习交流进步!
- 我的知乎主页: https://www.zhihu.com/people/MicrostrongAI/activities
- Github: https://github.com/Microstrong0305
- 个人博客: https://blog.csdn.net/program_developer
- 本文首发在我的微信公众号里,地址:https://mp.weixin.qq.com/s/4T6OD2Hr5MzNI0j-mT3e-g,如有公式和图片不清楚,可以在我的微信公众号里阅读。
目录:
- GBDT分类算法简介
- GBDT二分类算法
2.1 逻辑回归的对数损失函数
2.2 GBDT二分类原理 - GBDT二分类算法实例
- 手撕GBDT二分类算法
4.1 用Python3实现GBDT二分类算法
4.2 用sklearn实现GBDT二分类算法 - GBDT分类任务常见的损失函数
- 总结
- 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=1∣x;θ)=hθ(x)
P ( Y = 0 ∣ x ; θ ) = 1 − h θ ( x ) P(Y=0|x;\theta) =1 - h_{\theta}(x) P(Y=0∣x;θ)=1−hθ(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=y∣x;θ)=(hθ(x))y(1−hθ(x))1−y
然后取似然函数为:
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=1∏NP(Y=yi∣xi;θ)=i=1∏N(hθ(xi))yi(1−hθ(xi))1−yi
因为 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=1∑N[yiloghθ(xi)+(1−yi)log(1−hθ(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=1∑N[yiloghθ(xi)+(1−yi)log(1−hθ(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^−(1−yi)log(1−yi^)
其中, 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+e−F(xi))+(1−yi)[F(xi)+log(1+e−F(xi))]
其中,第 m m m 棵树对应的响应值为(损失函数的负梯度,即伪残差):
r m , i = − ∣ ∂ L ( y i , F ( x i ) ) ∂ F ( x i ) ∣