1. 解释一下GBDT算法的过程

GBDT(Gradient Boosting Decision Tree),全名叫梯度提升决策树,使用的是Boosting的思想。

1.1 Boosting思想

Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。

Bagging与Boosting的串行训练方式不同,Bagging方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练。

1.2 GBDT原来是这么回事

GBDT的原理很简单,就是所有弱分类器的结果相加等于预测值,然后下一个弱分类器去拟合误差函数对预测值的残差(这个残差就是预测值与真实值之间的误差)。当然了,它里面的弱分类器的表现形式就是各棵树。

举一个非常简单的例子,比如我今年30岁了,但计算机或者模型GBDT并不知道我今年多少岁,那GBDT咋办呢?

它会在第一个弱分类器(或第一棵树中)随便用一个年龄比如20岁来拟合,然后发现误差有10岁;

接下来在第二棵树中,用6岁去拟合剩下的损失,发现差距还有4岁;

接着在第三棵树中用3岁拟合剩下的差距,发现差距只有1岁了;

最后在第四课树中用1岁拟合剩下的残差,完美。

最终,四棵树的结论加起来,就是真实年龄30岁(实际工程中,gbdt是计算负梯度,用负梯度近似残差)。

为何gbdt可以用用负梯度近似残差呢?

回归任务下,GBDT 在每一轮的迭代时对每个样本都会有一个预测值,此时的损失函数为均方差损失函数,

那此时的负梯度是这样计算的

所以,当损失函数选用均方损失函数是时,每一次拟合的值就是(真实值 - 当前模型预测的值),即残差。此时的变量是y',即“当前预测模型的值”,也就是对它求负梯度。

训练过程

简单起见,假定训练集只有4个人:A,B,C,D,他们的年龄分别是14,16,24,26。其中A、B分别是高一和高三学生;C,D分别是应届毕业生和工作两年的员工。如果是用一棵传统的回归决策树来训练,会得到如下图所示结果:

现在我们使用GBDT来做这件事,由于数据太少,我们限定叶子节点做多有两个,即每棵树都只有一个分枝,并且限定只学两棵树。我们会得到如下图所示结果:

在第一棵树分枝和图1一样,由于A,B年龄较为相近,C,D年龄较为相近,他们被分为左右两拨,每拨用平均年龄作为预测值。

此时计算残差(残差的意思就是:A的实际值 - A的预测值 = A的残差),所以A的残差就是实际值14 - 预测值15 = 残差值-1。

注意,A的预测值是指前面所有树累加的和,这里前面只有一棵树所以直接是15,如果还有树则需要都累加起来作为A的预测值。

然后拿它们的残差-1、1、-1、1代替A B C D的原值,到第二棵树去学习,第二棵树只有两个值1和-1,直接分成两个节点,即A和C分在左边,B和D分在右边,经过计算(比如A,实际值-1 - 预测值-1 = 残差0,比如C,实际值-1 - 预测值-1 = 0),此时所有人的残差都是0。残差值都为0,相当于第二棵树的预测值和它们的实际值相等,则只需把第二棵树的结论累加到第一棵树上就能得到真实年龄了,即每个人都得到了真实的预测值。

换句话说,现在A,B,C,D的预测值都和真实年龄一致了。Perfect!

A: 14岁高一学生,购物较少,经常问学长问题,预测年龄A = 15 – 1 = 14

B: 16岁高三学生,购物较少,经常被学弟问问题,预测年龄B = 15 + 1 = 16

C: 24岁应届毕业生,购物较多,经常问师兄问题,预测年龄C = 25 – 1 = 24

D: 26岁工作两年员工,购物较多,经常被师弟问问题,预测年龄D = 25 + 1 = 26

所以,GBDT需要将多棵树的得分累加得到最终的预测得分,且每一次迭代,都在现有树的基础上,增加一棵树去拟合前面树的预测结果与真实值之间的残差。

2. 梯度提升和梯度下降的区别和联系是什么?

下表是梯度提升算法和梯度下降算法的对比情况。可以发现,两者都是在每 一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更 新,只不过在梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参 数的更新。而在梯度提升中,模型并不需要进行参数化表示,而是直接定义在函 数空间中,从而大大扩展了可以使用的模型种类。

3. GBDT的优点和局限性有哪些?

3.1 优点

预测阶段的计算速度快,树与树之间可并行化计算。

在分布稠密的数据集上,泛化能力和表达能力都很好,这使得GBDT在Kaggle的众多竞赛中,经常名列榜首。

采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的预处理如归一化等。

3.2 局限性

GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。

GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显。

训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。

4. RF(随机森林)与GBDT之间的区别与联系

相同点:

都是由多棵树组成,最终的结果都是由多棵树一起决定。

不同点:

组成随机森林的树可以分类树也可以是回归树,而GBDT只由回归树组成

组成随机森林的树可以并行生成,而GBDT是串行生成

随机森林的结果是多数表决表决的,而GBDT则是多棵树累加之和

随机森林对异常值不敏感,而GBDT对异常值比较敏感

随机森林是减少模型的方差,而GBDT是减少模型的偏差

随机森林不需要进行特征归一化。而GBDT则需要进行特征归一化

5. 代码实现

gbdt原文_GBDT--原来是这么回事(附代码)相关推荐

  1. gbdt原文_GBDT多分类示例

    样本编号 花萼长度(cm) 花萼宽度(cm) 花瓣长度(cm) 花瓣宽度 花的种类 1 5.1 3.5 1.4 0.2 山鸢尾 2 4.9 3.0 1.4 0.2 山鸢尾 3 7.0 3.2 4.7 ...

  2. 获取服务器信息目录失败是怎么回事,获取服务器列表失败...(是怎么回事)附解决方法...

    获取服务器列表失败...这种是什么错误,是怎么回事呢?我相信很多成人都遇到过这种错误,无论你是玩家还是开的GM,既然有问题,那么比如就会有解决的方法,今天我们就说说获取服务器列表失败...(是怎么回事 ...

  3. 推荐系统入门(五):GBDT+LR(附代码)

    推荐系统入门(五):GBDT+LR(附代码) 目录 推荐系统入门(五):GBDT+LR(附代码) 引言 1. GBDT模型 2. LR模型 3. GBDT+LR模型 4. 编程实践 实战 思考 参考资 ...

  4. 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述

    <繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...

  5. 独家 | 手把手教TensorFlow(附代码)

    上一期我们发布了"一文读懂TensorFlow(附代码.学习资料)",带领大家对TensorFlow进行了全面了解,并分享了入门所需的网站.图书.视频等资料,本期文章就来带你一步步 ...

  6. 彻底理解cookie,session,localStorage(附代码)

    2019独角兽企业重金招聘Python工程师标准>>> 1. cookie 1.1 什么是cookie cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某 ...

  7. 生成对抗网络GANs理解(附代码)

    生成对抗网络GANs理解(附代码) 原文地址: http://blog.csdn.net/sxf1061926959/article/details/54630462 生成模型和判别模型 理解对抗网络 ...

  8. ROI Align 在 R-FCN 中的推广:PSROI-Align(附代码)

    ROI Align 在 R-FCN 中的推广:PSROI-Align(附代码) 1. Position Sensitive ROI-Pooling 简介 原文:https://blog.csdn.ne ...

  9. python编程例子 输入 输出-推荐 :手把手教你用Python创建简单的神经网络(附代码)...

    原标题:推荐 :手把手教你用Python创建简单的神经网络(附代码) 作者:Michael J.Garbade:翻译:陈之炎:校对:丁楠雅 本文共2000字,9分钟. 本文将为你演示如何创建一个神经网 ...

最新文章

  1. php中的解析范围符,PHP 的范围解析操作符 (::) 的含义分析说明
  2. 神经网络入门(最通俗的理解神经网络)
  3. 如何使用CloudStats监控Linux服务器
  4. 学习:组件生命周期(1)
  5. mysql schema数据混乱_MySQL之Schema与数据类型优化
  6. 手机端java编辑器验证正确_java – 使用编辑器验证表的单元格
  7. VI命令详解(大全)
  8. 华信mysql数据恢复_华信Mysql数据库修复工具1.0
  9. SpringBoot多数据源切换详解,以及开启事务后数据源切换失败处理
  10. paip.使用WORD进行拆分段落单个汉字转表格.txt
  11. 第九届大唐杯省赛知识梳理-5G协议与信令(20%)
  12. CAD2007 病毒 处理办法
  13. 计算机ps基础知识教案范文,ps基础教案
  14. Java实现港(澳)台大陆身份证校验(亲测有效)
  15. 小学生c语言入门教程,小学生都看得懂的C语言入门(5): 指针
  16. 万物互联所必需的泛在物联网建设需要多少钱?成本低到不可想象
  17. 裁员狂潮席卷硅谷:Meta史上最大规模裁员将至,英特尔被曝裁掉数千人
  18. 《信息安全保障》一1.3 信息系统安全保障概念与模型
  19. 字典(骚气的加上二叉排序树)
  20. CentOS7修改主机名的三种方法

热门文章

  1. 2019产业AI速写:农业篇
  2. 【思维进阶】最近关于副业实操中思考的几个问题
  3. vscode 自定义注释
  4. 画频率响应和零极点图MATLAB,LTI系统频率响应的Riemann 图和地图投影图的MATLAB函数实现...
  5. esp8266-01s 不能连接华为路由器解决方法
  6. python爬虫环境配置sublime_Python环境搭建和sublime text配置(新手教程)
  7. python列表常用方法实践_Python 之列表的常用方法
  8. [phaser3学习]使用phaser3做一款飞刀小游戏
  9. freesurfer分割后的解剖文件.annot, 如何求解剖区域的三维坐标?如已知lh.HCP-MMP1.annot,如何求Glasser360的皮层三维坐标?
  10. tp5 日期范围查询_tp5(thinkPHP5框架)时间查询操作实例分析,tp5thinkphp5