GBDT理解2.0

参考文献

1.GBDT原理与Sklearn源码分析-回归篇
2.GBDT原理与Sklearn源码分析-分类篇
3.GBDT原理与实践-多分类篇


前提:

CART可以用于回归和分类,那么到底用回归还是分类呢?我们知道,GBDT拟合的目标是一个梯度值,这个值当然是一个连续值或者说实值,所以在GBDT里,通通都是回归树!!!

如果损失函数选的是最小平方损失函数,那么拟合残差就和拟合损失函数的负梯度是等价的!!!


阶段1:关于基学习器CART

一般的CART是这样的:用于分类任务时,树的分裂准则采用基尼指数,用于回归任务时,用MSE(均方误差)。
注意:当然在回归任务中,分裂准则也不再局限于用MSE,也可以用MAE,还可以用Friedman_mse(改进型的mse)。


阶段2:关于GBDT的宏观思路

在这里插入图片描述
算法1实际上就是GBDT的宏观思路框架,这个框架没涉及具体的基学习器,而是给出了宏观的思路:

【1】对于算法的第3步,就是我们说的损失函数的负梯度在当前模型的值。(头脑要清醒啊啊啊,损失函数和基学习器是两回事!!!)
在这里插入图片描述

可以看到,拟合残差版本可以说是拟合损失函数的负梯度的特例,只当损失函数为最小平方误差时才成立(考虑到这一损失函数很常用,这也就解释了为什么那么多博客写两个版本等价。。)

【2】对于算法的第4步,在这里先简单提一下,其目的就是为了求一个最优的基分类器。对于不同的基分类器有不同的寻找,比如,对于决策树,寻找一个最优的树的过程其实依靠的就是启发式的分裂准则。

【3】对于算法的第5步,是一个Line search 的过程,具体可以参考Friedman的文章。在GBDT里,通常将这个过程作为Shrinkage,也就是把ρm做为学习率,后面实践部分可以看到效果。

【4】对于算法的第6步,求得新的基分类器后,利用加法模型,更新出下一个模型Fm(x)。

【5】算法的第1步是一个初始化的过程。为什么需要初始化?很简单,因为每次在计算负梯度值时需要用到前一个模型预测的值。对于我们训练的第一个模型而言,需要有F0(xi)的存在。那么F0(x)初始化为多少?这个取决于损失函数的选择,下面给出一般的做法:
(1)当loss function选择MSE时,F0(x)=样本真实值的平均值;
(2)当loss function选择MAE时,F0(x)=样本真实值的中位数;
(3)当loss function选择logisit loss时,F0(x)=样本真实值的中位数;F0(x)=(1/2)∗log(∑yi / ∑(1−yi))
这里需要注意的是,这里就是利用对数几率来初始化,分子∑yi∑yi就是正样本的个数,分母就是负样本的个数。


阶段3.1:GBDT用于回归任务

对于回归问题,基学习器为CART回归树,损失函数我们选择的是最小平方误差:
在这里插入图片描述
这样算法1将具体化为:
在这里插入图片描述

重要分析:

在这里插入图片描述


阶段3.2:GBDT用于分类任务

对于回归和分类,其实GBDT过程简直就是一模一样的。如果说最大的不同的话,那就是在于由于loss function不同而引起的初始化不同、叶子节点取值不同。

对于分类问题,基学习器还是CART回归树,损失函数我们选择的是logloss:
在这里插入图片描述
简单推导一下损失函数L:
在这里插入图片描述
这样算法步骤具体化为:
在这里插入图片描述

可见基本流程和回归问题是一致的。其实在sklearn源码里面,虽然回归任务的模型定义是GradientBoostingRegressor()而分类任务是GradientBoostingClassifier(),但是这两者区分开来是为了方便用户使用,最终两者都是共同继承BaseGradientBoosting(),算法3这些流程都是在BaseGradientBoosting()完成的,GradientBoostingRegressor()、GradientBoostingClassifier()只是完成一些学习器参数配置的任务;

在这里插入图片描述


阶段3.3:GBDT用于多分类任务

在这里插入图片描述
在这里插入图片描述
从代码上看,大致和分类时候的过程一样。最大的不同点在于多了一层内部的循环For。

这里需要注意的是:
1.对于多分类任务,GDBT的做法是采用一对多的策略(详情见文章)。
也就是说,对每个类别训练M个分类器。假设有K个类别,那么训练完之后总共有M*K颗树!!!
2.两层循环的顺序不能改变。也就是说,K个类别都拟合完第一颗树之后才开始拟合第二颗树,不允许先把某一个类别的M颗树学习完,再学习另外一个类别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值