文章承接:
- 梯度提升框架(一)
- 梯度提升框架(二)
- GBDT+Huber loss(三)
前面的文章都是将GBDT应用于回归问题中,因此特意准备一篇有关GBDT处理分类问题的文章。本文的主要内容有:
- GBDT如何处理二分类问题,以及公式推导
- 推广GBDT处理多分类问题
之所以想写这篇文章是因为貌似没多少文章整理GBDT处理分类问题的具体实现。文中含有大量的公式推导,希望大家能耐心看完~
1.思路
在sklearn中,GBDT的损失函数有:
其中前四项是处理回归问题的,前三项在之前的文章已经做过推导。后面两项就是处理分类问题的损失函数。
考虑一下线性回归 指数损失函数,是与Adaboost相同的损失函数,官方文档也有说明,当采用该损失函数时,GBDT即为Adaboost:
指数损失只能用于二分类,除了指数损失外,还有一种损失函数deviance,其实就是我们通常所见的对数损失函数。这也是我们后头要进行探究的损失函数,它既可以二分类也能多分类。
有关指数损失与对数损失的比较见[参考链接6]。
2.二分类
考虑一下线性回归
GBDT同理,我们借助对数几率函数将原本的回归输出值转换为概率:
那么接下来GBDT的训练过程需要以逻辑回归为参照。
那么同理,GBDT采用的损失函数为:
有了损失函数我们就可以开始推导GBDT了,首先是计算伪残差:
接着训练基学习器
以为这样就结束了吗?在sklearn与原论文(参考链接1)中,针对
为了简化,我们用
其中一阶导
故最后,我们得到了
总结得出,GBDT在采用对数损失函数时的形式:
______________________________________________________________________________________________
预测阶段:
训练阶段:第
- 对每一个样本点计算对应的残差,构成新的数据集
:
- 以新的数据集去训练一颗CART树作为
;
- 计算
的叶子结点区域的最佳输出值:
- 完成当前迭代的计算:
______________________________________________________________________________________________
3.多分类
逻辑回归处理的是二分类问题,如果是多分类呢?就要推广到softmax,假设有
即
softmax回归的损失函数同样基于极大似然估计推导得出,其中
那么GBDT同理,其损失函数为:
有了损失函数后,剩下的就和正常的GBDT同理了。要注意的是,在多分类问题下,GBDT共有
就这样,针对第
最后,我们也得到了多分类下的GBDT:
______________________________________________________________________________________________
预测阶段:属于第
训练阶段:第
1. 对每一个样本点计算对应的残差,构成新的数据集
2. 以新的数据集去训练一颗CART树作为
3. 计算
4. 完成当前迭代的计算:
参考:
1. 论文《Greedy Function Approximation: A Gradient Boosting Machine》
2. https://blog.csdn.net/mmc2015/article/details/52398488
3. Scikit Binomial Deviance Loss Function
4. GBDT如何应用于二分类问题?具体如何使用logitloss?
5. sklearn源码
6. http://biostat.mc.vanderbilt.edu/wiki/pub/Main/CourseBios362/lecture-23.pdf