`
阅读更多

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+1x足够小。因此,需要γ比较小才行,一般设置为 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模型函数展开为:

 

page2image7488

 

    目标函数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 的区别。

 

    代码结构设计如下图:

2
1
分享到:
评论

相关推荐

    深入解析GBDT二分类算法(附代码实现).rar

    **GBDT二分类算法详解** GBDT,全称为Gradient Boosting Decision Tree,即梯度提升...提供的"深入解析GBDT二分类算法(附代码实现).pdf"文档将更详细地介绍这些内容,包括实例和代码,有助于读者进一步掌握GBDT。

    gbdt.zip_GBDT_GBDT如何实现_gbdt模型 代码_python-gbdt_slightlyukz

    GBDT(Gradient Boosting Decision Tree)...通过阅读和理解这段代码,我们不仅能深入理解GBDT的工作机制,还能学习到如何在实际项目中实现和优化GBDT模型。对于机器学习爱好者和数据科学家来说,这是一份宝贵的资源。

    GBDT相关实验代码及数据集,详细展示可参考主页GBDT介绍部分的博文

    这个压缩包文件包含的是与GBDT相关的实验代码和数据集,旨在帮助学习者深入理解GBDT的工作原理以及如何在实际项目中应用。 1. **GBDT基本原理**: GBDT全称为梯度提升决策树(Gradient Boosting for Decision ...

    GBDT算法理解

    ### GBDT算法理解 #### 一、GBDT算法概述 ...通过对关键点的深入理解和合理设置参数,可以在多种机器学习任务中获得出色的预测效果。无论是处理回归问题还是分类问题,GBDT都能够提供一种灵活且高效的方法。

    scikit-learn梯度提升树(GBDT)算法详解与调参技巧

    适用人群:熟悉基本机器学习算法且希望深入理解和优化GBDT的研究人员与工程人员。 使用场景及目标:帮助研究与开发工作者理解 GBRT 在面对带噪或具异常点数据的情况下的行为变化,并掌握调整损失函数的选择,最终...

    GBDT源代码分析

    通过对这个GBDT源代码的深入分析,我们可以更好地理解其背后的数学原理和编程实现。这对于优化模型、调试代码以及解决实际问题都具有极大的价值。无论是初学者还是经验丰富的数据科学家,都能从这段代码中受益匪浅。

    GBDT源代码

    本文将深入探讨GBDT的源代码,以便读者能够理解其内部机制,从而更好地运用和优化这一算法。 首先,让我们了解一下GBDT的基本原理。GBDT是基于梯度提升框架的一种方法,它逐步构建模型,每次迭代都针对前一轮模型的...

    GBDT单机版Python实现源代码

    **GBDT(Gradient Boosting Decision Tree)**是一种广泛应用的机器学习算法,它属于集成学习方法,通过结合多...通过阅读和理解这些代码,你可以深入了解GBDT的工作原理,并可能学习到如何在实际项目中应用和优化GBDT。

    GBDT决策树模型开发代码

    GBDT(Gradient Boosting Decision Tree)是一种集成学习方法,它通过构建多个决策树并结合它们的预测结果来形成最终的预测...通过阅读和运行这些代码,你可以更深入地理解GBDT的工作原理,并将其应用于自己的项目中。

    集成学习终篇:从CART回归树开始,经历BDT、GBDT彻底理解XGBoost - 知乎1

    在本篇中,我们从CART回归树开始,逐步深入到Boosting算法,特别是Gradient Boosting Decision Tree (GBDT)以及XGBoost,探讨它们的原理、流程和差异。 CART回归树是一种决策树模型,主要用于连续值的预测。它通过...

    gbdt到xgboost的一些理论推导.rar

    这个压缩包文件对理解GBDT和XGBoost的内在联系和差异非常有帮助,对于想要深入学习和应用这两种算法的数据科学家和机器学习工程师来说,是一份宝贵的资料。通过阅读和理解这份推导,不仅可以提升理论知识,还能提高...

    python实现GBDT的回归、二分类以及多分类

    **GBDT(Gradient Boosting Decision Tree)**,全称梯度提升决策树,是一种集成学习方法,通过构建一系列弱预测器并逐步优化来构建强预测器。...通过实践这些方法,你将能更深入地理解GBDT算法并应用于实际项目中。

    GBDT原始论文+XGB原始论文+陈天奇 ppt

    总的来说,这些资料对于理解和掌握GBDT算法及其在XGBoost中的实现至关重要,无论是对机器学习的理论研究还是实际应用都极具价值。通过深入学习这些内容,读者不仅可以了解到梯度提升的基本理念,还能掌握一个强大且...

    GBDT原始论文

    标题所指的原始论文为Jerome H. Friedman在2001年于《Annals of Statistics》上发表的一篇名...通过阅读这篇论文,研究者和实践者可以更深入地理解GBDT算法的数学原理和实现细节,以及如何应用于不同的机器学习任务中。

    梯度提升树(GBDT)完整教程 V1.1 发布1

    例如,作者Freemanzxp的GitHub项目提供了GBDT的简易实现,包括回归、二分类、多分类和可视化功能,这对于深入理解和实践GBDT非常有帮助。 总之,GBDT是一种强大的机器学习工具,通过迭代决策树来逐步提升预测能力,...

    两个版本的GBDT(GBRT)源代码

    描述中提到,“第一个是完整版的25M(注释很少)”,这可能是指一个包含多种功能或者优化的GBDT实现,文件大小较大,可能包含了丰富的数据结构和算法实现,但由于注释较少,对于初学者来说,理解和学习可能会有一定...

    广告点击率(CTR)预测经典模型 GBDT + LR 理解与实践(附数据 + 代码).zip

    首先,让我们理解GBDT(梯度提升决策树)。GBDT是一种集成学习方法,通过迭代地添加弱预测器(通常是决策树),并针对前一轮的残差进行优化,来构建一个强预测模型。在CTR预测中,GBDT能够处理大量特征和非线性关系...

    GBDT_XGBoost_LGBM算法原理v1.11

    本文将深入探讨这些算法的核心概念和技术细节。 首先,我们从基础的数学原理出发,泰勒公式是理解许多优化算法的关键。泰勒公式提供了一种将复杂函数近似为多项式的方法,这在损失函数的优化过程中起到重要作用。...

    基于GBDT的客流量的预测.zip

    在“深度学习”这个标签下,虽然GBDT本身并不属于深度学习,但可以理解为这个项目可能结合了传统的机器学习方法(如GBDT)和深度学习方法,比如使用预训练的神经网络模型对某些特征进行编码,或者将GBDT作为深度学习...

Global site tag (gtag.js) - Google Analytics