写在前面

上一篇 机器学习算法总结之Boosting family:AdaBoost 提到Boost但是没说它的整个框架及分类,在这里记一下。

  • Boosting(提升方法) = 加法模型 + 前向分步算法 + 损失函数
  • AdaBoost = Boosting + 损失函数是指数函数(基函数任意)
  • Boosting Tree(提升树) = Boosting + 基函数是决策树(损失函数任意)

所以从上面的结构可以看出Boosting是一个大的概述性的框架/算法,而AdaBoost 和Boosting Tree是其中的子集/特例。

常用的损失函数主要包括:

1)指数损失函数:决定了Adaboost必须进行加权取样(权重由错误率决定),以进行下一个模型的参数学习,并且决定了最终模型也是加权累计

2)平方误差损失函数:决定了BRT的下一个模型应该学习前一个模型的残差

3)一般损失函数:决定了GBRT/GBDT的下一个模型应该学习前一个模型的梯度(残差近似)

1.提升树(Boosting Tree)简介

提升树是以分类树或者回归树为基本分类器的提升方法。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。

提升树模型可以表示为决策树的加法模型:

其中T(x;theta)表示决策树;theta为决策树的参数,M为树的个数

提升树算法采用的也是前向分步算法(具体可以参考之前的一篇:机器学习算法总结之Boosting:AdaBoost),首先确定初始提升树f0(x)=0,第m步的模型为:

通过经验风险极小化确定下一棵树的参数

2.提升树算法

根据前述Boosting框架中三个条件的不同,可以将提升树细分为几种情况:

(1)BDT(提升决策树,二分类):二叉分类树 + 指数函数 → 加权

可以发现其实就是讲AdaBoost中的基本分类器限定为二分类模型,可以说是AdaBoost的特例。

下面就不再赘述了

(2)BRT(提升回归树):二叉回归树 + 平方误差函数 → 残差

(3)GBDT(梯度提升决策树):二叉回归树(或分类树) +普通损失函数 → 损失函数的负梯度

当损失函数式平方误差函数时,就等于BRT

2.1  BRT算法推导

已知一个训练数据集T={(x1,y1),(x2,y2),…,(xN,yN)},X为输入空间,Y为输出空间。如果将输入空间X划分为J个不相交的区域R1,R2…,RJ,并且在每个区域上确定输出的常量cj,那么树可以表示为:

其中,参数:表示树的区域划分和各个区域上的常数,J是回归树的复杂度即叶结点个数。BRT采用的前向回归算法已在第一部分给出,当采用平方误差作为损失函数时:

其中:r=y-f(x)为模型拟合数据的残差。

给出提升回归树算法的具体步骤:

2.2 举个栗子(统计学习方法P149)

3.  梯度提升树(GBDT)

GBDT也是Boosting家族的一个重要成员,GBDT有很多简称,有GBT(Gradient Boosting Tree) GTB(Gradient Tree Boosting ) GBRT(Gradient Boosting Regression Tree) MART(Multiple Additive Regression Tree) 其实都是一种算法。

GBDT的弱学习器限定了只能使用CART回归树模型,在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是ft−1(x), 损失函数是L(y,ft−1(x)), 我们本轮迭代的目标是找到一个CART回归树模型的弱学习器ht(x),让本轮的损失损失L(y,ft(x))=L(y,ft−1(x)+ht(x))最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。从上面的描述可以看出,GBDT也是使用的前向分布算法和加法模型。

当损失函数时确定的平方损失或者指数损失时,每一步优化是很简单的。但是在多种多样的损失函数条件下,怎么找到这个合适的拟合量?

3.1 GBDT的负梯度拟合

针对一个一般损失函数,Freidman提出了梯度提升的算法,利用损失函数的负梯度在当前模型的值

来拟合本轮损失的近似值,进而拟合一个回归树。

3.2 GBDT回归算法

我们知道了怎么去找到这个拟合值,接下来就可以生成GBDT模型了。

输入:训练集样本, 最大迭代次数T, 损失函数L。

输出:强学习器f(x)

(1)初始化弱学习器:(是只有一个根节点的树)

(2)对迭代次数t= 1~T:

(a)对样本i = 1~m,计算负梯度:(也就是常说的“残差”,但是这里度梯度计算的是残差的近似值)

   (b)利用拟合一个回归树,得到第t颗树的叶结点区域(j=1,2,...,J,其中J为叶结点个数)

(c)对j=1,2,...,J,计算最佳拟合值:(线性搜索估计叶节点区域的值,使得损失函数极小化)

(d)更新学习器:

(3)得到强学习器表达式:

3.3  GBDT分类算法

首先明确一点,GBDT无论用于分类还是回归问题一直都是使用CART回归树。GBDT的分类算法从思想上和GBDT的回归算法没有区别,但是由于样本输出不是连续的值,而是离散的类别,导致我们无法直接从输出类别去拟合类别输出的误差。为了解决这一问题,可以用类似于逻辑回归的对数似然函数,也就是用的是类别的预测概率值和真实概率值的差来拟合。

3.3.1 GBDT二元分类算法

对于二元分类GBDT问题,

  • 可以选择损失函数为:

  • 则此时的负梯度误差为:

  • 各个叶节点的最佳残差拟合值为:

​​​​​​​

  • 由于上式比较难优化,一般选择使用近似值替代:

​​​​​​​

3.3.2  GBDT多元分类算法

对于多元分类问题

  • 假设有K类,则此时对数似然函数为:

​​​​​​​

  • 其中如果样本输出类别为k, 则yk = 1。第k类的概率为:

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

观察可以发现,其实这里的误差啊就是样本i对应类别l 的真实概率和(t-1)轮预测概率的差值。

  • 叶节点的最佳残差拟合值为

  • 由于上式比较难优化,一般选择使用近似值代替:

​​​​​​​

关于GBDT多分类问题的实践可以参考:机器学习算法GBDT的面试要点总结-上篇

3.4 GBDT常用损失函数

差不多前面重要的算法也都讲完了,接下来稍微总结一下。

对于分类算法,其损失函数一般有对数损失函数和指数损失函数两种

对于回归算法,其损失函数一般有均方差、绝对损失、Huber损失、分位数损失四种。

ps.(1)Huber损失(Huber Loss wiki),它是均方差和绝对损失的折中,即对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量。

pps.(2)分位数损失:

其中theta为分位数,需要我们在回归前指定。对应的负梯度误差为:

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

3.5 GBDT正则化

和所有机器学习算法一样,GBDT也免不了会出现过拟合风险,需要正则化来减弱,主要有三种形式:

  • 第一种是和Adaboost类似的正则化项,即步长(learning rate)。定义为ν,对于前面的弱学习器的迭代

如果我们加上了正则化项,则有

    ν的取值范围为0<ν≤1。对于同样的训练集学习效果,较小的ν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。

  • 第二种正则化的方式是通过子采样比例(subsample)。取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采样,程序可以通过采样分发到不同的任务去做boosting的迭代过程,最后形成新树,从而减少弱学习器难以并行学习的弱点。
  • 第三种是对于弱学习器即CART回归树进行正则化剪枝。与之前一篇决策树内容讲过的相同。(机器学习中树模型算法总结之 决策树(下))

小结

GBDT主要的优点有:

1) 可以灵活处理各种类型的数据,包括连续值和离散值。

2) 在相对少的调参时间情况下,预测的准备率也可以比较高。这个是相对SVM来说的。

3)使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。

GBDT的主要缺点有:

1)由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。

由于GBDT算法的卓越性,使其成为机器学习研究必须掌握的算法之一,很多面试的问题也都会涉及这个方面,包括其原理、实现以及参数调优等。目前GBDT的算法比较好的库是xgboost,sklearn。

reference

统计学习方法

梯度提升树(GBDT)原理小结

以上~

2018.04.18

机器学习算法总结之Boosting:Boosting Tree、GBDT相关推荐

  1. 深度学习笔记——基于传统机器学习算法(LR、SVM、GBDT、RandomForest)的句子对匹配方法

    句子对匹配(Sentence Pair Matching)问题是NLP中非常常见的一类问题,所谓"句子对匹配",就是说给定两个句子S1和S2,任务目标是判断这两个句子是否具备某种类 ...

  2. 机器学习算法实践:决策树 (Decision Tree)(转载)

    前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...

  3. 机器学习论文:《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》

    翻译自<LightGBM: A Highly Efficient Gradient Boosting Decision Tree> 摘要 Gradient Boosting Decisio ...

  4. Lightgbm源论文解析:LightGBM: A Highly Efficient Gradient Boosting Decision Tree

    写这篇博客的原因是,网上很多关于Lightgbm的讲解都是从Lightgbm的官方文档来的,官方文档只会告诉你怎么用,很多细节都没讲.所以自己翻过来Lightgbm的源论文:LightGBM: A H ...

  5. 『 论文阅读』LightGBM原理-LightGBM: A Highly Efficient Gradient Boosting Decision Tree

    17年8月LightGBM就开源了,那时候就开始尝试上手,不过更多还是在调参层面,在作者12月论文发表之后看了却一直没有总结,这几天想着一定要翻译下,自己也梳理下GBDT相关的算法. Abstract ...

  6. 《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》论文笔记

    1 简介 本文根据2017年microsoft研究所等人写的论文<LightGBM: A Highly Efficient Gradient Boosting Decision Tree> ...

  7. 一小部分机器学习算法小结: 优化算法、逻辑回归、支持向量机、决策树、集成算法、Word2Vec等...

    优化算法 先导知识:泰勒公式 \[ f(x)=\sum_{n=0}^{\infty}\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n \] 一阶泰勒展开: \[ f(x)\approx ...

  8. 机器学习笔记(六)Boosting集成学习算法Adaboost和GBDT

    一.前言 在前一篇文章中我们介绍了集成学习算法中的Bagging模型,本篇文章将继续介绍集成学习算法中的另一个代表性算法Boosting模型.Boosting是一种可将弱学习器提升为强学习器的算法,其 ...

  9. 复盘:GBDT,梯度提升决策树,Gradient Boosting Decision Tree,堪称最好的算法之一

    复盘:GBDT,梯度提升决策树,Gradient Boosting Decision Tree,堪称最好的算法之一 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以 ...

最新文章

  1. pytorch神经网络之卷积层与全连接层参数的设置
  2. Tomcat源码学习(4)-How Tomcat works(转)
  3. python(matplotlib7)——subplot 一个figure中国显示几个小图 分格显示
  4. ITK:将两个图像与棋盘格图案组合在一起
  5. C++开发中的预处理器
  6. JEPaas【按钮隐藏】根据单据状态值决定【添加明细】【删除】按钮的隐藏和显示
  7. Lab 2 - Task v2 SP_22-设计complex multiplication共3个part-verilog设计
  8. mysql lenenc int_MySQL-NonMySQL同步工具源码解读——确定同步位置
  9. 20140625 程序 进程 线程 物理存储器
  10. spring Autowired(required = false) 说明
  11. 表达式目录树(Expression)
  12. 递归、搜索、贪心、动态规划的区别
  13. Atitit 稳定性提升的艺术 之技术解决之道 目录 1. 2. 为什么会发生稳定性问题 1 1 2. 大原则 1 2.1. 尽快释放资源类似php最好的稳定性 1 2.2. Nginx 负载均衡
  14. atitit.html编辑器的设计要点与框架选型 attilax总结
  15. 未能将“C:\Program Files (x86)\DevExpress 2009.2\Components\Sources\DevExpress.DLL\DevExpress.XtraGrid.v
  16. 图像识别的工作原理是什么?商业上如何使用它?
  17. 阿里云 搭建flink 后 web界面可以访问 但是没有task manager节点存活
  18. c语言中Exec函数,子进程的执行 -- exec 函数
  19. Windows系统主机加固
  20. PayPal社交游戏及移动娱乐产业的海外商机

热门文章

  1. 运动场馆SAAS系统运营中心、球馆、场馆、体育馆、场地配置、场馆配置、场次、报名记录、已锁场次、积分商城、会员明细、财务报表、系统打款、价格设置、消费明细、活动报名、创建场馆、权限管理、后台管理
  2. 消费金融盈利分析及风控能力建设
  3. 函数的嵌套,名称空间和作用域
  4. ZendStudio操作技巧
  5. 高性能滚动 scroll 及页面渲染优化
  6. HNU 12894 Keys dfs
  7. shareplex的安装起停服务(添加新用户)
  8. 做购物车系统时利用到得几个存储过程
  9. Android SurfaceFlinger
  10. Harbor 使用 Helm 一键安装