Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
社区首页 >专栏 >机器学习之梯度提升决策树(GBDT)

机器学习之梯度提升决策树(GBDT)

作者头像
小一
发布于 2019-08-14 07:41:49
发布于 2019-08-14 07:41:49
3.9K00
代码可运行
举报
文章被收录于专栏:谓之小一谓之小一
运行总次数:0
代码可运行

1.GBDT算法简介

GBDT(Gradient Boosting Decision Tree)是一种迭代的决策树算法,由多棵决策树组成,所有树的结论累加起来作为最终答案,我们根据其名字(Gradient Boosting Decision Tree)来展开推导过程。决策树(Decision Tree)我们已经不再陌生,在之前介绍到的机器学习之决策树(C4.5算法)机器学习之分类与回归树(CART)机器学习之随机森林中已经多次接触,在此不再赘述。但BoostingGradient方法是什么含义呢,又如何跟Decision Tree相结合?首先我们来了解集成学习中的Boosting概念。

1.1集成学习之Boosting

集成学习不是单独的机器学习方法,而是通过构建并结合多个机器学习器来完成任务,集成学习可以用于分类问题集成、回归问题集成、特征选取集成、异常点检测集成等方面。其思想是对于训练数据集,我们通过训练若干个个体学习器,通过一定的结合策略形成一个强学习器,以达到博采众长的目的。在机器学习之随机森林中我们已经用到集成学习中的bagging方法,此处我们详细介绍集成学习中的Boosting方法。

从上图可以看出,Boosting算法的工作机制是从训练集用初始权重训练出一个弱学习器1,根据弱学习器的学习误差率来更新训练样本的权重,使得之前弱学习器1中学习误差率高的训练样本点权重变高。然后这些误差率高的点在弱学习器2中得到更高的重视,利用调整权重后的训练集来训练弱学习器2。如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。了解Boosting方法后,我们便可将Boosting方法和Decision Tree相结合便可得到Boosting Decision Tree

1.2 Boosting Decision Tree

提升树(Boosting Decision Tree)由于输出样本是连续值,因此我们通过迭代多棵回归树来共同决策。在机器学习之分类与回归树(CART)中我们已经详细推导分类树与回归树的构建过程,在此不再赘述。

我们利用平方误差来表示损失函数,其中每一棵回归树学习的是之前所有树的结论和残差,拟合得到一个当前的残差回归树。其中残差=真实值-预测值,提升树即是整个迭代过程生成的回归树的累加。

我们通过以下例子来详解算法过程,希望通过训练提升树来预测年龄。训练集是4个人,A、B、C、D年龄分别是14、16、24、26。样本中有购物金额、上网时长、经常到百度知道提问等特征。提升树的过程如下

我们能够直观的看到,预测值等于所有树值的累加,如A的预测值=树1左节点(15)+树2左节点(-1)=14。因此给定当前决策树模型ft-1(x),只需拟合决策树的残差,便可迭代得到提升树,算法过程如下

我们介绍了Boosting Decision Tree的基本思路,但是没有解决损失函数拟合方法的问题。针对这个问题,Freidman提出用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。了解Boosting Decision Tree方法后,我们便可将Gradient与Boosting Decision Tree相结合得到Gradient Boosting Decision Tree的负梯度拟合

1.3GBDT负梯度拟合

我们利用损失函数L的负梯度来拟合本轮损失函数的近似值,进而拟合一个CART回归树。其中第t轮的第i个样本的损失函数的负梯度表示为

针对每一个叶子节点中的样本,我们求出使损失函数最小,也就是拟合叶子节点最好的输出值ctj。其中决策树中叶节点值已经生成一遍,此步目的是稍加改变决策树中叶节点值,希望拟合的误差越来越小。

这样我们便得到本轮的决策树拟合函数

从而本轮最终得到的强学习器表达式如下

通过损失函数的负梯度拟合,我们找到一种通用的拟合损失函数的方法,这样无论是分类问题还是回归问题,我们通过其损失函数的负梯度拟合,就可以用GBDT来解决我们的分类回归问题。

2.GBDT回归算法

通过上述GBDT负梯度拟合我们来总结下GBDT的回归算法,为什么没有加上分类算法是因为分类算法的输出是不连续的类别值,需要一些处理才能使用负梯度,我们将在下一节详细介绍GBDT分类算法。

3.GBDT分类算法

GBDT分类算法在思想上和回归算法没有区别,但是由于样本输出不是连续的值,而是离散的类别,导致我们无法直接从输出类别去拟合类别输出的误差。为解决此问题,我们尝试用类似于逻辑回归的对数似然损失函数的方法,也就是说我们用的是类别的预测概率值和真实概率值来拟合损失函数。对于对数似然损失函数,我们有二元分类和多元分类的区别。

3.1二元GBDT分类算法

对于二元GBDT,如果用类似于逻辑回归的对数似然损失函数,则损失函数表示为

对于生成的决策树,我们各个叶子节点的最佳残差拟合值为

由于上式比较难优化,我们一般使用近似值代替

除了负梯度计算和叶子节点的最佳残差拟合的线性搜索外,二元GBDT分类和GBDT回归算法过程相同。

3.2多元GBDT分类算法

多元GBDT要比二元GBDT复杂一些,对应的是多元逻辑回归和二元逻辑回归的复杂度差别。假如类别数为K,则我们的对数似然函数为

其中如果样本输出类别为k,则yk=1。第k类的概率pk(x)的表达式为

集合上两式,我们可以计算出第t轮的第i个样本对应类别l的负梯度误差为

其实这里的误差就是样本i对应类别l的真实概率和t-1轮预测概率的差值。对于生成的决策树,我们各个叶子节点的最佳残差拟合值为

由于上式比较难优化,我们用近似值代替

除了负梯度计算和叶子节点的最佳残差拟合的线性搜索,多元GBDT分类和二元GBDT分类以及GBDT回归算法过程相同。

4.GBDT损失函数

对于回归算法,常用损失函数有均方差、绝对损失、Huber损失和分位数损失。

  • 均方差损失。
  • 绝对损失和对应的负梯度误差。
  • Huber损失是均方差和绝对损失的折衷产物,对于远离中心的异常点,采用绝对损失,而中心点附近采用均方差。这个界限一般用分位数点来度量,损失函数和对应的负梯度误差如下
  • 分位数损失和负梯度误差如下所示。其中其中theta为分位数,需要我们在回归前指定。

对于Huber损失和分位数损失,主要用于健壮回归,也就是减少异常点对损失函数的影响。

对于分类算法,常用损失函数有指数损失函数和对数损失函数。

  • 对数损失函数,分为二元分类和多元分类两种,我们已在上述3.1和3.2节进行介绍。
  • 指数损失函数

5.GBDT正则化

针对GBDT正则化,我们通过子采样比例方法和定义步长v方法来防止过拟合。

  • 子采样比例:通过不放回抽样的子采样比例(subsample),取值为(0,1]。如果取值为1,则全部样本都使用。如果取值小于1,利用部分样本去做GBDT的决策树拟合。选择小于1的比例可以减少方差,防止过拟合,但是会增加样本拟合的偏差。因此取值不能太低,推荐在[0.5, 0.8]之间。
  • 定义步长v:针对弱学习器的迭代,我们定义步长v,取值为(0,1]。对于同样的训练集学习效果,较小的v意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。

6.Sklearn实现GBDT算法

我们经常需要通过改变参数来让模型达到更好的分类或回归结果,具体参数设置可参考sklearn官方教程。

代码语言:javascript
代码运行次数:0
复制
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.datasets import make_regression

X,y=make_regression(n_samples=1000,n_features=4,
                    n_informative=2,random_state=0)

print(X[0:10],y[0:10])
### X Number
# [[-0.34323505  0.73129362  0.07077408 -0.78422138]
#  [-0.02852887 -0.30937759 -0.32473027  0.2847906 ]
#  [ 2.00921856  0.42218461 -0.48981473 -0.85152258]
#  [ 0.15081821  0.54565732 -0.25547079 -0.35687153]
#  [-0.97240289  1.49613964  1.34622107 -1.49026539]
#  [ 1.00610171  1.42889242  0.02479266 -0.69043143]
#  [ 0.77083696  0.96234174  0.24316822  0.45730965]
#  [ 0.8717585  -0.6374392   0.37450029  0.74681383]
#  [ 0.69178453 -0.23550331  0.56438821  2.01124319]
#  [ 0.52904524  0.14844958  0.42262862  0.47689837]]

### Y Number
# [ -12.63291254    2.12821377  -34.59433043    6.2021494   -18.03000376
#    32.9524098    85.33550027   15.3410771   124.47105816   40.98334709]


clf=GradientBoostingRegressor(n_estimators=150,learning_rate=0.6,
                              max_depth=15,random_state=0,loss='ls')
clf.fit(X,y)

print(clf.predict([[1,-1,-1,1]]))
# [ 25.62761791]
print(clf.score(X,y))
# 0.999999999987

7.GBDT优缺点

7.1优点
  • 相对少的调参时间情况下可以得到较高的准确率。
  • 可灵活处理各种类型数据,包括连续值和离散值,使用范围广。
  • 可使用一些健壮的损失函数,对异常值的鲁棒性较强,比如Huber损失函数。
7.2缺点
  • 弱学习器之间存在依赖关系,难以并行训练数据。

文章参考

  • 刘建平Pinard_梯度提升树(GBDT)原理小结
  • taotick_GBDT梯度提升决策树

你看到的这篇文章来自于公众号「谓之小一」,欢迎关注我阅读更多文章。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 谓之小一 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
梯度提升树(GBDT)原理小结
地址:https://www.cnblogs.com/pinard/p/6140514.html
机器学习算法工程师
2018/07/26
8440
梯度提升树(GBDT)原理小结
梯度提升树(GBDT)原理小结
    在集成学习之Adaboost算法原理小结中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting Decison Tree, 以下简称GBDT)做一个总结。GBDT有很多简称,有GBT(Gradient Boosting Tree), GTB(Gradient Tree Boosting ), GBRT(Gradient Boosting Regression Tree), MART(Multiple Additive Regression Tree),其实都是指的同一种算法,本文统一简称GBDT。GBDT在BAT大厂中也有广泛的应用,假如要选择3个最重要的机器学习算法的话,个人认为GBDT应该占一席之地。
刘建平Pinard
2018/08/14
4960
机器学习(23)之GBDT详解
关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 前言 在(机器学习(20)之Adaboost算法原理小结)中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting Decison Tree, 以下简称GBDT)做一个总结。GBDT有很多简称,有GBT(Gradient Boosting Tree), GTB(Gradient Tree
昱良
2018/04/04
1.5K0
机器学习(23)之GBDT详解
【算法】GBDT算法
小编邀请您,先思考: 1 GBDT算法的原理是什么? 2 GBDT算法如何做正则化处理? 本文对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting Decison Tree, 以下简称GBDT)做一个总结。GBDT有很多简称,有GBT(Gradient Boosting Tree), GTB(Gradient Tree Boosting ), GBRT(Gradient Boosting Regression Tree), MART(Multiple Additive Re
陆勤_数据人网
2018/03/27
1.3K0
【算法】GBDT算法
从决策树到GBDT梯度提升决策树和XGBoost
决策树可以转换成if-then规则的集合,也可以看作是定义在特征空间划分类的条件概率分布。决策树学习算法包括三部分:特征选择,数的生成和数的剪枝。最大优点: 可以自学习。在学习的过程中,不需要使用者了解过多背景知识,只需要对训练实例进行较好的标注,就能够进行学习。显然,属于有监督学习。 常用有一下三种算法:
大鹅
2021/06/15
1.2K0
从决策树到GBDT梯度提升决策树和XGBoost
GBDT梯度提升树
GBDT的全称是Gradient boosting decision tree,它是通过拟合负梯度Gradient boosting和决策回归树decision tree组合而成,该算法由多颗决策树构成,多颗决策树的结果加起来作为最终结论。让损失函数沿着梯度方向的下降。这个就是GDBT 的 GB的核心。GBDT 每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度。(如果损失函数使用的是平方误差损失函数,则这个损失函数的负梯度就可以用残差来代替,以下所说的残差拟合,便是使用了平方误差损失函数)。
opprash
2019/09/02
1.6K0
机器学习入门:硬核拆解GBDT
Boosting是集成学习的一种基分类器(弱分类器)生成方式,核心思想是通过迭代生成了一系列的学习器,给误差率低的学习器高权重,给误差率高的学习器低权重,结合弱学习器和对应的权重,生成强学习器。
统计学家
2020/07/02
1.1K0
最常用的决策树算法!Random Forest、Adaboost、GBDT 算法
本文主要介绍基于集成学习的决策树,其主要通过不同学习框架生产基学习器,并综合所有基学习器的预测结果来改善单个基学习器的识别率和泛化性。
Datawhale
2019/11/06
1.2K0
AI面试题之GBDT梯度提升树
【Boost】就是让多个弱分类器,通过不同的集成方式,来让多个弱分类器变成一个强分类器。
机器学习炼丹术
2020/07/14
1.4K0
AI面试题之GBDT梯度提升树
GBDT(梯度提升决策树)总结笔记
数据:对于输入数据 $$$x_i \in R^d$$$,训练数据里的第i个样本。 模型:如何对于给定的 $$$x_i$$$预测 $$$\hat{y}_i$$$。
用户1332428
2018/07/30
7940
GBDT(梯度提升决策树)总结笔记
深入理解GBDT回归算法
Boosting、Bagging和Stacking是集成学习(Ensemble Learning)的三种主要方法。Boosting是一族可将弱学习器提升为强学习器的算法,不同于Bagging、Stacking方法,Boosting训练过程为串联方式,弱学习器的训练是有顺序的,每个弱学习器都会在前一个学习器的基础上进行学习,最终综合所有学习器的预测值产生最终的预测结果。
OpenCV学堂
2019/10/30
2.7K0
深入理解GBDT回归算法
GBDT(梯度提升决策树)算法(详细版)
一、前言 通过之前的文章GBDT算法(简明版)对GBDT的过程做了大概的讲解,我们可以了解到GBDT是一种迭代的决策树算法,由多棵决策树组成,所有树的结论累加起来做最终答案。GBDT是一个应用很广泛的算法,可以用于分类,回归和特征选择,特别是用于和其他算法进行模型组成时,如logistic+GBDT,该算法在很多数据上都有不错的效果,GBDT还有其他的名字,如MART,GBRT和Tree Net等。 二、基础知识 2.1 决策树(DT) 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程
智能算法
2018/04/03
5.5K0
GBDT(梯度提升决策树)算法(详细版)
[白话解析] 通俗解析集成学习之GBDT
本文将为大家讲解GBDT这个机器学习中非常重要的算法。因为这个算法属于若干算法或者若干思想的结合,所以很难找到一个现实世界的通俗例子来讲解,所以只能少用数学公式来尽量减少理解难度。
罗西的思考
2020/09/07
2K0
GBDT算法总结
在上一节中,我们介绍了GBDT的基本思路,但是没有解决损失函数拟合方法的问题。针对这个问题,大牛Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。第t轮的第i个样本的损失函数的负梯度表示为
全栈程序员站长
2022/11/04
8030
GBDT算法总结
从决策树到XGBOOST
XGBoost在机器学习领域可谓风光无限,作为从学术界来的模范生,帮助工业界解决了许多实际问题,真可谓:
西西木木
2020/06/07
1.5K0
集成学习综述-从决策树到XGBoost
在之前缅怀金大侠的文章“永远的金大侠-人工智能的江湖”中提到:集成学习是机器学习中一种特殊的存在,自有其深厚而朴实的武功哲学,能化腐朽为神奇,变弱学习为强学习,虽不及武当和少林那样内力与功底深厚。其门下两个主要分支-Bagging和Boosting,各有成就,前者有随机森林支撑门面,后者有AdaBoost,GBDT,XGBoost一脉传承。门下弟子近年来在Kaggle大赛中获奖无数,体现了实用主义的风格,为众多习武之人所喜爱,趋之若鹜。
SIGAI学习与实践平台
2018/12/18
1.1K0
最全!两万字带你完整掌握八大决策树!
决策树是一个非常常见并且优秀的机器学习算法,它易于理解、可解释性强,其可作为分类算法,也可用于回归模型。
AI科技评论
2020/07/08
1.9K0
机器学习 学习笔记(18) 提升树
提升树是以分类树或回归树为基本分类器的提升方法,提升树被认为是统计学习中性能最好的方法之一。
2018/09/04
9320
机器学习 学习笔记(18) 提升树
GBDT与XGBOOST串讲
最近,一直被GBDT和XGBOOST烦恼,产生了如下的问题,由此产生了这篇文章。
张小磊
2020/09/21
6860
GBDT与XGBOOST串讲
如果你还不了解GBDT,不妨看看这篇文章
这是来自读者的一篇投稿,因为公众号对 Latex 公式支持不是很好,所以可以点击文末 “阅读原文“ 进行阅读。同时也希望觉得有帮助的欢迎到作者的 Github 上 star !
kbsc13
2019/08/16
8150
相关推荐
梯度提升树(GBDT)原理小结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验