一、提升树

提升方法实际采用加法模型(即基函数的线性组合)与前向分布算法。以决策树为基函数的提升方法称为提升树,boosting tree。对分类问题的决策树是二叉分类树,对回归问题的决策树是二叉回归树。提升树算法是AdaBoost算法的特殊情况。我的理解提升树分为普通提升树与梯度提升树,普通提升树每次拟合的是真实残差值,而梯度提升树拟合的是损失函数在当前模型的的负梯度。

普通提升树解决回归问题算法如下

输入:训练数据集T={(x1,y1),(x2,y2),...,(xn,yn)}

输出:提升树fM(x)

1) 初始化f0(x)=0

2) 对m=1,2,...,M

  a)计算残差 rmi=yi-fm-1(xi),i=1,2,..,n

  b)拟合残差rmi学习一个回归树,得到T(x;θm)

  c)更新fm(x)=fm-1(x)+T(x;θm)

3) 得到回归问题提升树  fM(x)=∑T(x;θm),  m=1,2,...,M

二、梯度提升树GBDT(Gradient Boosting Decision Tree)

普通提升树利用加法模型与前向分布算法实现学习的优化过程,这个时候损失函数可能是平方损失(如上例子)或者指数损失函数(AdaBoost就是指数损失函数,L=exp(-yf(x))),像平方损失函数,每棵树拟合的都是之前的残差值,这个能够直观去解释,但是如果是其它更一般的损失函数呢,如何去明确无误的一步步优化呢,有什么方法论去指引优化呢,优化的合理方向在哪呢?针对这一问题,Friedman于论文” Greedy Function Approximation…”中提出GBDT模型,为更一般形式的损失函数指明了优化方向。

其模型F定义为加法模型,x为输入样本,f为单棵树,w为每棵树的参数。

通过最小化损失函数求解最优模型:

也就是我们要找到一个使损失函数L最小的F,这里的损失函数跟构建单棵树所使用的损失函数不一样,是两码事,这里面的损失指的是所有树合并起来的整体损失。

与普通提升树不同的是,GBDT每次拟合的是损失函数L在当前模型F上的负梯度值,以此作为一个近似的残差值,拟合成一个新的回归树:

从上面几个公式我们就可以看到,梯度提升就是提升树的一种,也是前向分布算法实现的,所谓分布就是逐步提升,构建多棵树。

为什么GBDT每次拟合的是负梯度呢?

从我们的优化目标着手,我们的优化目标是让损失函数L越来越小,直到求解出一个最优的F,使得L到达最小值。那么我们可以把F整体做为一个变量去理解,跟我们之前的梯度下降法求解思路一样,让损失函数L对F进行求导,得到一个负梯度值,然后根据这个负梯度值作为新的值去拟合成一棵树,有n个样本,就会有n个负梯度值产生作为新的目标值y去拟合。F的初始值为F0,每构造一棵树f,F=Fm-1+f,就相当于模型F在负梯度方向又向前走了一步,直到走到最优解。这就是GBDT的核心思路,跟我们平时利用梯度下降法求解最优参数θ思路其实一样。

GBDT具体算法流程如下:

其中的步长就是对应了xgboost中常说的shinkage技术,对应调参参数就是eta,是通过减少每棵树的学习输出值,削弱每棵树的影响,让后面的树有更大的学习空间,理论上是增加了树的个数,能够防止过拟合。比如:如果原始目标值是y=1,假如第一颗树就学到了0.9,那后面树学的信息就很少了,而且几棵树可能就让模型收敛了,这样模型整体的精确度很大程度上都依赖于第一颗树了,容易过拟合;如果将每棵树都乘以0.1,这样第一颗树输出就为0.09,后面还有很多信息可以学习,同时构造的树也多了,多方承担,有效了防止过拟合。

三、树模型的梯度提升算法与传统的梯度下降求参数区别

传统梯度下降法是在参数空间进行搜索,找到最优参数:

  

树模型的梯度提升算法,是在函数空间进行搜索,找到最优的函数,也是梯度下降,所谓的提升指的是模型整体精度提升:

四、树模型优缺点

优点:

  可解释性强
  可处理混合类型特征
  具体伸缩不变性(不用归一化特征)
  有特征组合的作用
  可自然地处理缺失值
  对异常点鲁棒
  有特征选择作用

  可扩展性强,容易并行

缺点:

  缺乏平滑性(回归预测时输出值只能输出有限的若干种数值)
  不适合处理高维稀疏数据

GBDT理解的更多相关文章

  1. 一步一步理解GB、GBDT、xgboost

    GBDT和xgboost在竞赛和工业界使用都非常频繁,能有效的应用到分类.回归.排序问题,虽然使用起来不难,但是要能完整的理解还是有一点麻烦的.本文尝试一步一步梳理GB.GBDT.xgboost,它们 ...

  2. (转)GBDT迭代决策树理解

    在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下: GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Re ...

  3. gbdt xgboost 贼难理解!

    https://www.zybuluo.com/yxd/note/611571 https://zhuanlan.zhihu.com/p/29765582 gbdt 在看统计学习方法的时候 理解很吃力 ...

  4. 大白话5分钟带你走进人工智能-第31节集成学习之最通俗理解GBDT原理和过程

    目录 1.前述 2.向量空间的梯度下降: 3.函数空间的梯度下降: 4.梯度下降的流程: 5.在向量空间的梯度下降和在函数空间的梯度下降有什么区别呢? 6.我们看下GBDT的流程图解: 7.我们看一个 ...

  5. GB、GBDT、XGboost理解

    GBDT和xgboost在竞赛和工业界使用都非常频繁,能有效的应用到分类.回归.排序问题,虽然使用起来不难,但是要能完整的理解还是有一点麻烦的.本文尝试一步一步梳理GB.GBDT.xgboost,它们 ...

  6. GBDT的理解和总结

    2015/11/21 16:29:29 by guhaohit 导语: GBDT是非常有用的机器学习的其中一个算法,目前广泛应用于各个领域中(regression,classification,ran ...

  7. Adaboost\GBDT\GBRT\组合算法

    Adaboost\GBDT\GBRT\组合算法(龙心尘老师上课笔记) 一.Bagging (并行bootstrap)& Boosting(串行) 随机森林实际上是bagging的思路,而GBD ...

  8. LightGBM中GBDT的实现

    现在LightGBM开源了,这里将之前的一个文档发布出来供大家参考,帮助更快理解LightGBM的实现,整体思路应该是类似的. LightGBM优雅,快速,效果好,希望LightGBM越来越好:) L ...

  9. 决策树和基于决策树的集成方法(DT,RF,GBDT,XGBT)复习总结

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 内容: 1.算法概述 1.1 决策树(DT)是一种基本的分类和回归方法.在分类问题中它可以认为是if-the ...

随机推荐

  1. 20135202闫佳歆--week2 操作系统是如何工作的--学习笔记

    此为个人学习笔记存档 week 2 操作系统是怎么工作的 一.计算机是如何工作的?--三个法宝 (一)三个法宝 1.存储程序计算机 所有计算机的基础性的逻辑框架. 2.函数调用堆栈 在低级语言中并不很 ...

  2. 第一个spring,第一天。

    陈志棚:界面跳转与框架 李天麟:游戏界面ui 徐侃:算法代码的设计 经过热烈的讨论后,我们各自在完成自己的任务.

  3. Photoshop的混合模式

    1.亮度是一种颜色的相对亮度,饱和度是指一种颜色的纯度(颜色中包含多少灰) 2.混合模式 下层图片的颜色像素称为"基本颜色":选定的称为"混合"颜色,对于大部分 ...

  4. bash基本功能 -命令的别名和快捷键

    命令的别名 == 人的小名 如何查看和设定别名 alias 查看系统中的所有别名 ls --color=auto alias ll = 'ls - l --color=auto' touch abc ...

  5. 改善C++ 程序的150个建议学习之建议7:时刻提防内存溢出

    作为一个程序员,对内存溢出问题肯定不陌生,它已经是软件开发历史上存在了近40年的大难题.在内存空间中,当要表示的数据超出了计算机为该数据分配的空 间范围时,就产生了溢出,而溢出的多余数据则可以作为指令 ...

  6. SpringBoot 2.SpringBoot整合Mybatis

    一.创建Springboot的配置文件:application.properties,并添加MyBatis依赖 SpringApplication 会从 application.properties  ...

  7. NESTED内部事务异常会回滚 外部事务不会回滚 ;内部事务没有异常,外部事务有异常 则整体事务都回滚

    NESTED内部事务异常会回滚 外部事务不会回滚 :内部事务没有异常,外部事务有异常 则整体事务都回滚

  8. 【大数据】Sqoop学习笔记

    第1章 Sqoop简介 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MyS ...

  9. gitlab迁移

    1.背景: 操作系统:CentOS Linux release (Core) gitlab版本: 使用rpm包地址:https://mirrors.tuna.tsinghua.edu.cn/gitla ...

  10. 【BZOJ2054】疯狂的馒头(并查集,线段树)

    [BZOJ2054]疯狂的馒头(并查集,线段树) 题面 BZOJ 然而权限题,随便找个离线题库看看题吧. 题解 线段树就是个暴力,如果数据可以构造就能卡掉,然而不能构造,要不然复杂度瓶颈成为了读入了. ...