Python3机器学习实践:集成学习之GBDT
1、GBDT说明
GBDT是Gradient Boosting Decison Tree的简称,其中Gradient是梯度,是这个方法的核心;Boosting是提升树,是这个方法的框架;Decision Tree是决策树,是实现这个方法用到的模型。
GBDT可以解决回归问题,经过一些处理也可以解决分类(二类、多类)问题,但是用到的树都是回归树,这一点需要牢记。
首先通过简单的回归例子说明一下提升树(Boosting):
如果样本1的输出真实值为10,树T1针对样本1的预测值为18,
然后我们让树T2去拟合样本1的值为10-18=-8(残差)。如果树T2的输出值为-10,
我们再让树T3去拟合-8-(-10)=2(残差),结果树T3的预测值为1。
如果到此迭代结束,在最终对样本1的预测值为:18+(-10)+1=9。
到这里,提升回归树的流程就大致清楚了。也就是通过多轮迭代,每轮迭代产生一个弱模型,每个模型都是在上一个模型的残差基础上进行训练的,最后将所有树的结果求和得出最终的结果。
GBDT就是在提升树的基础上,利用了梯度提升的方法,也就是用损失函数的负梯度在当前模型下的值来作为提升树中残差的近似值。对于GBDT用于回归问题而言,如果损失函数定义为MSE,则其负梯度就是残差。因此残差是损失函数负梯度的一种特殊情况。负梯度是残差这种思想的一般化。残差只可以用于回归问题,但是这种负梯度的思想也可用于分类问题。
2、GBDT流程图
image3、GBDT回归
hh1.jpg4、GBDT分类
这里解释下,为什么GBDT解决分类问题用的也是回归树。因为GBDT的根本就是在不断地拟合残差,残差的加减可以逐渐减小偏差。而分类树输出的是类别,他们之间的加减是没有意义的。分类问题和回归问题的最大不同在于损失函数的定义以及节点输出值的确定,其他都是一样的。
4.1 二分类
hh2.jpg4.2 多分类
对于多分类任务,GDBT采用的是OneVsOther方法,也就是对每个类别训练m个弱模型。假设有K个类别,那么训练完之后总共有K*m颗树。
hh3.jpg5,GBDT实例
5.1 北京PM2.5回归
-
参数选择图
image
-
预测、真实结果对比图
image
5.2 成年人收入分类
-
参数选择图
image
-
预测结果的混淆矩阵以及个指标
image
实例代码:GBDT,扫描下方二维码或者微信公众号直接搜索”Python范儿“,关注微信公众号pythonfan, 获取更多实例和代码。
pythonfan.jpg