GBDT (Gradient Boosting Decision Tree)属于集成学习中的Boosting流派,迭代地训练基学习器 (base learner),当前基学习器依赖于上一轮基学习器的学习结果。 不同于AdaBoost自适应地调整样本的权值分布,GBDT是通过不断地拟合残差 (residual)来“纠错”基学习器的。

1. Gradient Boosting

Gradient Boosting Machine (GBM) 是由大牛Friedman [1,2] 提出来,基本思想非常简单:基学习器存在着分类/回归错误的情况,在下一轮基学习器学习时努力地纠正这个错误。在回归问题中,这个错误被称为残差。比如,在学习样本\((x, y)\)得到一个模型\(f\),预测值为\(\hat{y} = f(x)\);那么残差则为:

\[
y - \hat{y} = y- f(x)
\]

如果定义损失函数为平方损失\(\frac{1}{2}(y-f(x))^2\),那么其梯度为

\[
\frac{\partial \frac{1}{2}(y-f(x))^2}{\partial f(x)} = f(x) - y
\]

可以发现:残差为负梯度方向。对于平方损失,每一步优化是很简单的;但是,对于其他损失函数呢?Friedman利用负梯度近似残差,将Gradient Boosting推广到一般损失函数\(L(y, x)\)。步骤如下:

  1. 计算伪残差 (pseudo-residual),

\[
r_{im} = - \left[ \frac{\partial L(y_i, f(x_i))}{\partial f(x_i)} \right]_{f = f_{m-1}}
\]

  1. 基学习器\(h_m(x)\)拟合样本\(\{ (x_i, r_{im}) \}\);
  2. 计算最优乘子 (multiplier) \(\gamma_m\),使得

\[
\gamma_m = \mathop{\arg \min} \limits_{\gamma} \sum_{i} L(y_i, f_{m-1}(x) + \gamma h_m(x_i))
\]

  1. 更新模型

\begin{equation}
f_m(x) = f_{m-1}(x) + \gamma_m h_m(x)
\label{eq:update}
\end{equation}

如此迭代,直至结束或模型收敛;最后一步得到的模型\(f_M(x)\)即为GBM的最终模型。

2. GBDT

如果基学习器为决策树时,GBM则被称为GBDT。决策树本质上是对特征空间的划分\(\{ R_{jm} \}\),因此基学习器\(h_m(x)\)可改写为
\[
h_m(x) = \sum_j b_{jm} I(x \in R_{jm})
\]
其中,\(b_{jm}\)为预测值,\(I(.)\)为指示函数。那么,式子\eqref{eq:update}可以改写为
\[
f_m(x) = f_{m-1}(x) + \sum_j \gamma_{jm} I(x \in R_{jm})
\]
GBDT的算法步骤如下图所示(图片来自于 ESL [3]):

为了减小过拟合,通过Shrinkage的方式:

\[
f_m(x) = f_{m-1}(x) + \upsilon \cdot \gamma_m h_m(x)
\]

其中,\(\upsilon\)称之为学习率 (learning rate)。经验表明,当学习率\(\upsilon < 0.1\)时,泛化能力远远超过没有Shrinkage的模型(即\(\upsilon =1\))。但是,低学习率同时也带来了更多的迭代次数。

3. 参考资料

[1] Friedman, Jerome H. "Greedy function approximation: a gradient boosting machine." Annals of statistics (2001): 1189-1232.
[2] Friedman, Jerome H. "Stochastic gradient boosting." Computational Statistics & Data Analysis 38.4 (2002): 367-378.
[3] Friedman, Jerome, Trevor Hastie, and Robert Tibshirani. The elements of statistical learning. Springer, Berlin: Springer series in statistics, 2009.
[4] Cheng Li, A Gentle Introduction to Gradient Boosting.

Boosting决策树:GBDT的更多相关文章

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

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

  2. 机器学习之梯度提升决策树GBDT

    集成学习总结 简单易学的机器学习算法——梯度提升决策树GBDT GBDT(Gradient Boosting Decision Tree) Boosted Tree:一篇很有见识的文章 https:/ ...

  3. Ensemble Learning 之 Gradient Boosting 与 GBDT

    之前一篇写了关于基于权重的 Boosting 方法 Adaboost,本文主要讲述 Boosting 的另一种形式 Gradient Boosting ,在 Adaboost 中样本权重随着分类正确与 ...

  4. [机器学习]梯度提升决策树--GBDT

    概述 GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由 ...

  5. Boosting算法总结(ada boosting、GBDT、XGBoost)

    把之前学习xgb过程中查找的资料整理分享出来,方便有需要的朋友查看,求大家点赞支持,哈哈哈 作者:tangg, qq:577305810 一.Boosting算法 boosting算法有许多种具体算法 ...

  6. 梯度提升决策树(GBDT)

    1.提升树 以决策树为基函数的提升方法称为提升树.决策树可以分为分类树和回归树.提升树模型可以表示为决策树的加法模型. 针对不同的问题的提升术算法的主要区别就是损失函数的不同,对于回归问题我们选用平方 ...

  7. Bagging和Boosting 概念及区别

    Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法.即将弱分类器组装成强分类器的方法. 首先介绍Boot ...

  8. Bagging和Boosting的区别

    转:http://www.cnblogs.com/liuwu265/p/4690486.html Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的 ...

  9. Boosting和Bagging的异同

    二者都是集成学习算法,都是将多个弱学习器组合成强学习器的方法. 1.Bagging (主要关注降低方差) Bagging即套袋法,其算法过程如下: A)从原始样本集中抽取训练集.每轮从原始样本集中使用 ...

随机推荐

  1. 雷达的L、S、C、X波段是什么

    L.S.C.X都是电磁波波段的划分代号. 最早用于搜索雷达的电磁波波长度为23cm,这一波段被定义为L波段(英语Long的字头),后来这一波段的中心波长度变为22cm. 当波长为10cm的电磁波被使用 ...

  2. MarkDown 常用语法教程

    MarkDown 语法说明 [TOC] 标题 标题1 ====== 标题2 ----- ## 大标题 ### 小标题 #### 小标题 列表 无序列表 + 列表文本前使用 [减号+空格] * 列表文本 ...

  3. protected 学习

    virtual是把一个方法声明为虚方法,使派生类可重写此方法,一般建立的方法是不能够重写的,譬如类A中有个方法protected void method(){ 原代码....;}类B继承自类A,类B能 ...

  4. 记录参加QCon的心得

    如有侵权,请告知作者删除.scottzg@126.com 很荣幸参加QCon全球软件开发大会,这里特别感谢我们部门的总经理,也是<互联网广告算法和系统实践>此书的作者王勇睿.因为他我才有这 ...

  5. webstorm配置编译sass的输出目录

    关于这个的问题,虽说不是很难,但还是踩了点小坑,下面就来介绍下如何使用webstorm配置编译sass的输出目录. 1.下载Ruby 2.使用Ruby安装sass 3.检测是否安装成功. 前面的几步很 ...

  6. 关于String类和String[]数组的获取长度方法细节

    一.在Java中,以下代码段有错误的是第(  )行 public static void main(String[] args) { String name = "小新";     ...

  7. zabbix主动上报的python脚本

    本代码linux.window平台通用. 不过我遇到一个Windows2008缺少运行库的提示,可能这个是Python3.6开发的.需要安装vc2015运行库吧.我没调试成功. linux平台还可以监 ...

  8. bzoj4784 [Zjoi2017]仙人掌

    Description 如果一个无自环无重边无向连通图的任意一条边最多属于一个简单环,我们就称之为仙人掌.所谓简单环即不经过重复的结点的环. 现在九条可怜手上有一张无自环无重边的无向连通图,但是她觉得 ...

  9. 基于JS的问卷调查

    主要工作 因为代码不好展示,也不好截长图,可以去看我的GitHub地址:https://github.com/14glwu/MyBlog/blob/master/questionnaire.html ...

  10. SQL SERVER 的前世今生--各版本功能对比

    背景 今天举办的 Data Amp 大会上,微软向开发者们强调了 数据如何影响他们的应用和服务 ,顺道还宣布了几个小新闻.这个免费的线上研讨会不仅展示了未来的机器学习远景,还发布了 SQL Serve ...