GBDT 全称 Gradient Boosting Decision Tree,梯度提升决策树。

梯度增强决策树的思想来源于两个地方,首先是增强算法(Boosting),然后是梯度增强(Gradient Boosting)的想法。

增强算法是一种试图用弱学习器提升为强学习器的算法。这种算法中比较成熟、有代表性的是 AdaBoost 算法。增强算法的工作机制比较类似,先从初始训练集学习出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使前面做错的训练样本后续得到更多关注,再从调整后的训练样本上训练下一个基学习器。如此重复进行,直到基学习器的数目达到事先指定的值,最终将所有基学习器进行加权结合。

AdaBoost 提出后不久,机器学习和统计学家 Friedman 从统计视角解释 AdaBoost 实际上是基于加性模型以类似牛顿迭代法来优化指数损失函数,受此启发,杰米姆提出了梯度增强的想法。

梯度增强也是希望用一系列的弱学习器来达到一个强学习器的效果,从而逼近目标变量的值。根据加性模型的假设,这种逼近效果是这些弱学习器的加权平均。

如何构造这些弱学习器和加权平均的权重呢?

梯度增强采用了优化理论的视角,使得构造这些部分变得更加直观。

首先这是个迭代算法,每一轮迭代,把当前所有学习器的加权平均结果作为这一轮的函数值,然后求得针对某一个损失函数对于当前所有学习器的参数的一个梯度,然后利用某个弱学习器算法来拟合这个梯度,这个弱学习器算法可以是线性回归模型,逻辑斯特回归模型等。最后,利用线查找的方式找到权重。说白了,就是利用简单模型拟合不同迭代轮数的梯度。

梯度增强可跟梯度下降对比,梯度下降的最终预测式也可写成加和的形式,每一轮梯度的值和学习率共同叠加形成最终结果。这和构造弱学习器的加权平均联系起来看,每个梯度的值可以认为是个弱学习器,学习速率就是权重。

理解了梯度增强,梯度增强决策树就容易理解了,就是用决策树来当作弱学习器,去拟合梯度增强过程中的梯度。然后融合到整个梯度增强的过程中。

最终,梯度增强决策树就是每一轮迭代都拟合一个新的决策树,来表达当前的梯度,然后跟前面所有的决策树进行叠加。在这个过程中,决策树的形状,如多少层、总共有多少节点等,都是超参数。总共有多少决策树,也就是有多少轮迭代,是重要的调节参数,也是防止过拟合的重要手段。

参考资料

  • 洪亮劼,机器学习排序算法经典模型:GBDT

GBDT 简述的更多相关文章

  1. 提升学习算法简述:AdaBoost, GBDT和XGBoost

    1. 历史及演进 提升学习算法,又常常被称为Boosting,其主要思想是集成多个弱分类器,然后线性组合成为强分类器.为什么弱分类算法可以通过线性组合形成强分类算法?其实这是有一定的理论基础的.198 ...

  2. GBDT算法简述

    提升决策树GBDT 梯度提升决策树算法是近年来被提及较多的一个算法,这主要得益于其算法的性能,以及该算法在各类数据挖掘以及机器学习比赛中的卓越表现,有很多人对GBDT算法进行了开源代码的开发,比较火的 ...

  3. GBDT 梯度提升决策树简述

    首先明确一点,gbdt 无论用于分类还是回归一直都是使用的CART 回归树.不会因为我们所选择的任务是分类任务就选用分类树,这里面的核心是因为gbdt 每轮的训练是在上一轮的训练的残差基础之上进行训练 ...

  4. 随机森林(Random Forest),决策树,bagging, boosting(Adaptive Boosting,GBDT)

    http://www.cnblogs.com/maybe2030/p/4585705.html 阅读目录 1 什么是随机森林? 2 随机森林的特点 3 随机森林的相关基础知识 4 随机森林的生成 5 ...

  5. 机器学习(七)—Adaboost 和 梯度提升树GBDT

    1.Adaboost算法原理,优缺点: 理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络.对于决策树,Adaboost分类用了CART分类 ...

  6. 简述 OAuth 2.0 的运作流程

    本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...

  7. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  8. scikit-learn 梯度提升树(GBDT)调参小结

    在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...

  9. 梯度提升树(GBDT)原理小结

    在集成学习之Adaboost算法原理小结中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting De ...

随机推荐

  1. Weka——PrincipalComponents分析

    package weka.filters.unsupervised.attribute; PrincipalComponents 属性: /** The data to transform analy ...

  2. iOS UI基础-3.0图片浏览器及plist使用

    需求: 1.显示当前图片序号/总图片数 2.显示图片 3.上一张图片.下一张图片转换 4.显示图片描述 下面用代码来实现 // // UYViewController.m // 3.0图片查看器 // ...

  3. Leetcode: Binary Tree Level Order Transversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  4. #C++初学记录(算法2)

    A - Game 23 Polycarp plays "Game 23". Initially he has a number n and his goal is to trans ...

  5. IO—代码—基础及其用例

    字节流:文件.图片.歌曲 使用字节流的应用场景:如果是读写的数据都不需要转换成字符的时候,则使用字节流. 字节流处理单元为1个字节, 操作字节和字节数组.不能直接处理Unicode字符 字节流可用于任 ...

  6. 【Redis学习之九】Redis集群:Twemproxy和HA

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 redis-3.0.4 主从模式对写压力没有分担,解决思路就 ...

  7. Python:slice与indices

    slice: eg: >>>e=[0,1,2,3,4,5,6] >>>s=slice(2,3) >>>e[s] [2] slice的区间左闭右开[ ...

  8. Azkaban学习笔记(一)

    1. 任务调度概述 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等 各任务单元之间存在时间先后及前后依赖关系 现成的开源调 ...

  9. hive支持sql大全(收藏版)

    hive操作数据库还是比较方便的,因此才会有hbase与hive整合.下面我们hive的强大功能吧.为了增强阅读性,下面提几个问题: 1.hive支持哪些运算符? 2.hive是否支持左右连接? 3. ...

  10. charles 手机抓包 unknown

    设置通配符即可 需要注意的点: 手机配置好电脑的服务器ip和端口号后,下载证书和安装好,然后电脑也需要安装证书.再配置可允许ssl 本地域名.