深入理解GBDT

GBDT 全称为 Gradient Boosting Decision Tree。顾名思义,它是一种基于决策树(decision tree)实现的分类回归算法。不难发现,GBDT
有两部分组成: gradient boosting, decision tree。Boosting 作为一种模型组合方式,与gradient descent 有很深的渊源,它们之间究竟有什么关系?同时 decisiontree 作为一种 base weak learner,又是如何通过
boosting 组装成一个强分类器?本文就通过回答这两个问题来深入了解下 GBDT 的“面子”和“里子”。

  • Gradient Descent: method of steepest descent

梯度下降作为求解确定可微方程的常用方法而被人所熟知。它是一种迭代求解过程,具体就是使解沿着当前解所对应梯度的反方向迭代。这个方向也叫做最速下降方向。具体推导过程如下。假定当前已经迭代到第
k 轮结束,那么第 k+1 轮的结果怎么得到呢?我们对函数 f 做如下一阶泰勒展开: 

为了使得第 k+1 轮的函数值比第 k 轮的小,即如下不等式成立。

则只需使:

按照这样一直迭代下去,直到 ?f(xk)=0,
 xk+1=x,函数收敛,迭代停止。由于在做泰勒展开时,要求xk+1?x足够小。因此,需要γ比较小才行,一般设置为
0~1 的小数。

什么?你没听过这个 γ? 那我说它的另一个名字你保准知道:“学习率(learning
rate)”。你终于知道为什么学习率要设置的比较小才行了吧。

顺带提一下,Gradient Descent 是一种一阶优化方法,为什么这么说呢?因为它在迭代过程中不需要二阶及以上的信息。如果我们在泰勒展开时,不是一阶展开,而是二阶展开。那对应的方法就是另一个被大家所熟知的可微方程求解方法:Newton
Method,关于牛顿法的详细内容,我们会在后续文章介绍。

  • Boosting: Gradient Descent in functional space

Boosting 一般作为一种模型组合方式存在,这也是它在 GBDT 中的作用。那Boosting 与 gradient descent 有什么关系呢?上一节我们说到 gradient descent 是一种确定可微方程的求解方法。这里的可微有一个要求,就是说上文中的损失函数
f 针对模型 x 直接可微。因此模型x可以根据梯度迭代直接求解。而这种损失函数针对模型直接可微是一个很强的假设,不是所有的模型都满足,比如说决策树模型。现在我们回到第一节,将f(x)写的更具体一点:

f(x)=l(h(x,D),Y)

其中 D 为数据特征;Y 为数据 label;h 为模型函数,解决由 D->Y 的映射,x为模型函数参数,即通常我们说的模型;l 为目标函数或损失函数。关于他们之间的关系,请参考决策树的数学原理

以逻辑回归为例, x为权重向量, h模型函数展开为:

目标函数l展开为:

我们发现函数l对h可微,同时h对x可微,因此l对x可微。因此,我们可以通过 gradient descent 的方式对 x 进行直接求解,而不用将 h 保存下来。然而,如果
l 对 h 可微,但 h 对 x 不可微呢? 我们仍按照第一节的方法先对l 进行泰勒展开,只不过不是针对 x,而是对 h。为了简单起见,我们省略 D, Y。

其中:

按照第一节的逻辑,我们不难得出如下迭代公式:

但别忘了,我们的目的不是求 h,而是 x。由于 h 对 x 不可微,所以 x 必须根据数据重新学习得到。而此时我们重新学习 x 的目标已经不是源目标 Y,而是原损失函数 l 在当前 H 处的梯度,即:

这个重新学习 x 的过程正是每个 base weak learner 所做的事情。而这种通过 weak learner 拟合每一步迭代后的梯度,进而实现 weak learner 组合的方式,就是 Boosting。又由于我们在求导过程中,损失函数
l 没法对模型 x 直接求导,而只能对模型函数 h 求导。因此 Boosting 又有一个别名:“函数空间梯度下降“。

此外,你可能会听过 boosting 的可加性(additive)。这里顺便提一句,可加性指的是 h 的可加,而不是 x 的可加。比如
x 是决策树,那两棵决策树本身怎么加在一起呢? 你顶多把他们并排放在一起。可加的只是样本根据决策树模型得到的预测值 h(x,D)罢了。

  • Decision Tree: the based weak learner

上一节最后我们提到,Boosting 的本质就是使用每个 weak learner 来拟合截止到当前的梯度。则这里的 D,还是原来数据中的 D,而 Y 已经不是原来的 Y了。而GBDT
中的这个 weak learner 就是一棵分类回归树(CART)。因此我们可以使用决策树直接拟合梯度: ?l(H(xt))。此时我们要求的x就变成了这样一棵有
k 个叶子节点的、使得如下目标函数最小化的决策树:

其中T为目标?l(H(xt)),W为每个叶子节点的权重,L为叶子节点集合。容易求得每个叶子节点的权重为归属到当前叶子节点的样本均值。即
:

每个样本的预测值即为其所归属的叶子节点的权重,即h(xt+1)

  • 后记 1

通过本文不难发现其实 GBDT 与逻辑回归的本质差别只在于 h 的不同。如果 h函数中的 x 为决策树,预测值通过决策树预测得到,那就是 GBDT;如果将 h
中的x变为一个权重向量,预测值为x与d的内积,则算法就变成了逻辑回归(LR)。

因此本文介绍的内容可以看做是一个相对通用的算法框架,只要根据不同的业务和数据,设计对应的 weak learner 及损失函数即可。在实际应用中要把握好其中“变”与“不变”的部分。

  • 后记 2

本文中的泰勒展开都限制在一阶展开,如果我们用泰勒二阶展开原损失函数(前提是损失函数存在二阶导),会有什么不同呢?

你可以自己推推看哦。

此外,关于整套 GBDT 的实现,感兴趣的朋友可参阅 github:

    https://github.com/liuzhiqiangruc/dml/tree/master/gbdt

该实现中的目标函数是“0-1 log loss”,与逻辑回归中的损失函数一致。同时,使用对损失函数进行二阶泰勒展开的策略。

通过二阶导对梯度的修正,使得算法收敛效果更好。这点可以类比 Gradient Descent 与 Newton Method 的区别。

代码结构设计如下图:

时间: 2024-10-11 23:51:55

深入理解GBDT的相关文章

理解GBDT算法(二)——基于残差的版本

GBDT算法有两种描述思路,一个是基于残差的版本,一个是基于梯度gradient的版本.这篇我们先说说基于残差的版本. 前面一篇博文已经说了该版本的大致原理,请参考. http://blog.csdn.net/puqutogether/article/details/41957089 这篇我们再总结一个几个注意点: 这个版本的核心思路:每个回归树学习前面树的残差,并且用shrinkage把学习到的结果大步变小步,不断迭代学习.其中的代价函数是常见的均方差. 其基本做法就是:先学习一个回归树,然后

理解GBDT算法(三)——基于梯度的版本

上一篇中我们讲到了GBDT算法的第一个版本,是基于残差的学习思路.今天来说第二个版本,可以说这个版本的比较复杂,涉及到一些推导和矩阵论知识.但是,我们今天可以看到,两个版本之间的联系,这个是学习算法的一个重要步骤. 这篇博文主要从下面这几个方面来说基于梯度的GBDT算法: (1)算法的基本步骤: (2)其中的学数学推导: (3)基于梯度的版本和基于残差的版本之间的联系: 在讲解算法的详细步骤之前,我们可以先明确一个思路,就是梯度版本的GBDT是用多类分类Multi-class classific

GBDT理解二三事

一.要理解GBDT当然要从GB(Gradient Boosting)和DT(Decision Tree)两个角度来理解了: 二.GB其实是一种理念,他并不是这一个具体的算法,意思是说沿着梯度方向,构造一系列的弱分类器函数,并以一定权重组合起来,形成最终决策的强分类器:注意,这里的梯度下降法是在函数空间中通过梯度下降法寻找使得LOSS最小的一个函数,区别于传统的梯度下降法选择一个方向:那么问题就来了,对函数求导?这也太难了吧.所以就有了一个近似的方法,这个方法的前提是我们认为在训练集上使得LOSS

(转)GBDT迭代决策树理解

在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下: GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案.它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法.近些年更因为被用于搜索排序的机器学习模型而引起大家关注. 后记:发现GBDT除了我描述的残差版本外还有

【转载】GBDT(MART) 迭代决策树入门教程 | 简介

      转载地址:http://blog.csdn.net/w28971023/article/details/8240756        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案.它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法.近些年更因为被用于搜索排

转:GBDT(MART) 迭代决策树入门教程 | 简介

在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下: GBDT(Gradient Boosting Decision Tree) 又 叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论 累加起来做最终答案.它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法.近些年更因为被用于搜索排序的机器学习模型而引起大家关注. 后记:发现GBDT除了我描述的残差版本外

[笔记]GBDT理论知识总结

一. GBDT的经典paper:<Greedy Function Approximation:A Gradient Boosting Machine> Abstract Function approximation是从function space方面进行numerical optimization,其将stagewise additive expamsions和steepest-descent minimization结合起来.而由此而来的Gradient Boosting Decision

从回归树到GBDT

GBDT可以看做是由多棵回归树组成的,所以要理解GBDT,就要先理解回归树.回归树也是为了做预测,只是将特征空间划分成了若干个区域,在每个区域里进行预测,举个简单例子. 图中的数据有两个特征:x1.x2,根据这两个特征可以很容易地把数据分为左下角.左上角.右上角.右下角四个区域,这四个区域各有一个中心点(5,5).(5,10).(10,10).(10,5),在对新数据做预测时,该数据落在哪个区域,就把该区域的中心点作为它的预测值.那么如何判断新数据将落在哪个区域呢?这时候"树"就派上用

GBDT(MART)

转自:http://blog.csdn.net/w28971023/article/details/8240756 在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下: GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案.它在被提出之初就和SVM一起被认为是泛化能力(generalization