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. 如何快速将本地项目托管到到github上?

    1,打开你的本地项目文件夹,比如 test-demo: 2,打开github(没有github的要自己注册下), 点击new repository 3,填写项目信息,创建项目 4,复制新建的项目url ...

  2. 跟着刚哥梳理java知识点——深入理解String类(九)

    一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class String implements java.io.Ser ...

  3. 【学而思】利用shouldComponentUpdate钩子函数优化react性能以及引入immutable库的必要性

    凡是参阅过react官方英文文档的童鞋大体上都能知道对于一个组件来说,其state的改变(调用this.setState()方法)以及从父组件接受的props发生变化时,会导致组件重渲染,正所谓&qu ...

  4. STAR法则的感想

    STAR法则百度百科上被解释为,面试官用于收集面试者信息的工具,而我个人理解,它更像是一个表达技巧,叙述结构,我们先来看看什么是STAR法则: STAR法则,即为Situation Task Acti ...

  5. 解析View的getDrawingCache方法

    1. View 的getDrawingCache方法 有时候需要将某个view的内容以图片的方式保存下来,感觉就和截图差不多,可以使用View 的getDrawingCache方法,返回一个Bitma ...

  6. Java设计模式———静态工厂

    上课时yqj2065要求:除了JDK等框架或工具中的类,自己编写的类不得使用new创建对象(Test除外). 据说是因为使用new会涉及到硬编码.(不是很懂) 所以要求用God类利用反射+配置文件来创 ...

  7. UPYUN云服务体验计划,阅读神器Kindle、LaCie移动硬盘、索尼大法充电宝、高大上极路由、UPYUN代金券等你拿!

    请看以下的“通关攻略”,分享你对云服务的“体验心得”,即可赢取绝佳的“通关宝藏”,阅读神器Kindle.LaCie移动硬盘.索尼大法充电宝.高大上极路由.UPYUN代金券等你拿!先来了解下UPYUN能 ...

  8. Android系统--输入系统(十)Reader线程_核心类及配置文件深入分析

    Android系统--输入系统(十)Reader线程_核心类及配置文件深入分析 0. 前言 个人认为该知识点阅读Android源代码会不仅容易走进死胡同,并且效果并不好,前脚看完后脚忘记,故进行总结, ...

  9. [内存管理]linux内存管理 之 内存节点和内存分区

    Linux支持多种硬件体系结构,因此Linux必须采用通用的方法来描述内存,以方便对内存进行管理.为此,Linux有了内存节点.内存区.页框的概念,这些概念也是一目了然的. 内存节点:主要依据CPU访 ...

  10. nginx源码分析——configure脚本

    源码:nginx 1.13.0-release   一.前言      在分析源码时,经常可以看到类似 #if (NGX_PCRE) .... #endif 这样的代码段,这样的设计可以在不改动源码的 ...