( 保证能看懂系列)集成算法之Boosting - GBDT分类算法 手推原理 以及 python 实现

本文详细介绍了GBDT分类算法的原理,包括odds与概率的关系、log(odds)的作用,以及GBDT算法的通用流程。通过负梯度值计算和CART树建立,逐步解析分类问题的解决过程,并提供了Python实现代码,同时对比了自己实现与sklearn库的精度差异。
摘要由CSDN通过智能技术生成

回归算法已经实现,可参考《集成算法之Boosting - GBDT回归算法 手推原理 以及 python 实现》 https://blog.csdn.net/Lee_Yu_Rui/article/details/107309184

本章继续完成分类算法的基本原理和python实现,在进行推导之前首先解释几个概念:

1. odds和概率的关系

红球的Odds是红色/绿色,   红色的概率是 红色/所有。  所以odds和概率是完全不一样的概念,但是两者可以转化

                                                       

下图可知发生事件A的 odds = P/(1-P), P事件A发生的概率

                                                      

2. 图一中 表示红球表示赢得比赛 ,绿球表示输了比赛,如果一共就10场,那赢了6场 和输了 4 场是一个意思,但是在odds上却有很大的差别     odds(红球)  = 6/4 ,  odds(绿球) = 4/6,如果有1000场比赛呢,这个差别会更大。所以我们没办法用odds来解释发生事情的可能性, 为了便于理解所以引入log(odds),从下图中左边转成右边,是从odds转成 log(odds),原来的odds(绿球) = 4/6 如果红球变成1000个这个值会无限接近于0,所有odds(绿球)在0-1之间,而odds(红球)是在1-正无穷,显然这是不对称的。转变成右图之后,两者就关于0对称,所以就具备了可比性  另外 log(odds)是服从正态分布的有利与决策

                                            

3. P 和odds有关系,那么P和log(odds)关系是什么?

                                                        

4. https://blog.csdn.net/Lee_Yu_Rui/article/details/107309184这里提到Gradient boosting算法要确定损失函数,回归采用的是平方损失,分类我们采用对数损失

                                                     L(y, F(x)) = - [y\times log(p)+(1-y)\times log(1-p)]

                                                   

损失函数就通过以上的转变从概率转成了 log(odds)的形式,你可能很好奇,为啥这么折腾 变成现在这个样子,接下来的结果应该会说服你。

下图是损失函数的一阶导和二阶导,是相当简单的,求导过程就不给了,链式求导和求导四则运算用一下就行,时刻记得1.3中推得的等式就可以得到如下结果

                                                              

                                                              

Gradient boosting算法的通用流程:

input: dataset { (x_{1},y_{1}),(x_{2},y_{2})....(x_{N},y_{N}),  损失函数L(y, F(x)),回归问题最常用的损失函数是平方损失函数L(y, F(x)) = \frac{1}{2}(y-f(x))^{2}

step 1 . 通过寻找损失函数最小是对应的f_{0}(x)来设置初值

                                                                  F_{0}(x)= argmin\sum_{i=1}^{N}L(y, F_{0}(x))

step 2. for m= 1 to M:

                      (a) 计算损失函数的负梯度值(也叫伪残差)

                                                              r_{im}=\left [ -\frac{\partial }{\partial F(x)}L(y,F(x)) \right ] _{F(x)=F_{m-1}(x)}

                     (b) 建立学习器拟合以上残差,并建立每个叶子节点最终区域 R_{jm}(就是记录在每个叶子节点的数据都有哪些,便于之后步骤的数据根据和伪残差修正), j = 1,2...Jm ,Jm表示该树叶子节点的个数

                     (c)通过最小化每个节点中数据的损失函数和,计算每个节点的预测值 F_{jm}(x)

                                                            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lee_Yu_Rui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值