目录

  • 集成学习:Boosting
  • 提升决策树
  • 梯度提升算法

梯度提升决策树(Gradient Boosting Decision Tree,简称 GBDT),它属于集成学习中 Boosting 类的算法

集成学习:Boosting

集成学习是将多个模型的预测结果进行结合输出。关于集成学习,在第十四课介绍了随机森林,它属于 Bagging 类的算法。使用随机森林解决回归问题,只需要将所有回归决策树的预测值取平均即可;

Boosting 类算法在解决回归问题时,只需要将个体学习器的预测值加权求和即可,如图所示:

当图中的个体学习器为同一类模型时,个体学习器又叫做基学习器。由此引出加法模型的定义;加法模型在解决回归问题时,其输出是将多个基函数的预测值加权求和得到的:
f(x)=∑m=1Mβmb(x;γm)f(x)=\sum_{m=1}^{M}\beta_{m}b(x;\gamma_{m})f(x)=m=1∑M​βm​b(x;γm​)
公式中基函数 b(x;γm)b(x;\gamma_{m})b(x;γm​) 的输入是特征向量 xxx,γm\gamma_{m}γm​ 是基函数的参数;基函数、基模型、基学习器这几个名词可以看作同一对象的不同称谓;


以上的加法模型也被称为AdaBoost


从加法模型的表达式可知,我们需要同时求解 MMM 个基模型的参数,每个基模型都包含一组参数。按照常规思路,我们可以通过损失最小化来求解加法模型:
min{βm,γm}∑i=1NL(yi,∑m=1Mβmb(x;γm))min_{\left\{\beta_{m},\gamma_{m}\right\}}\sum_{i=1}^{N}L(y_{i},\sum_{m=1}^{M}\beta_{m}b(x;\gamma_{m}))min{βm​,γm​}​i=1∑N​L(yi​,m=1∑M​βm​b(x;γm​))
这是一个多元函数求最小值的问题,相对比较复杂,一般使用前向分步算法来求解模型参数:


算法的输入为训练集、损失函数和基函数集。首先初始化加法模型:将加法模型的预测值设置为0,图中 f(x)f(x)f(x) 的下标 0 表示加法模型的初始状态;

然后,从前向后分步迭代加法模型,一共迭代 MMM 次;第 mmm 次迭代的加法模型是由上一轮迭代的模型加上本轮迭代产生的基函数得到的,而本轮迭代的基函数的模型参数是通过加法模型在训练集上的损失函数最小化得到的;

最终,第 MMM 轮迭代后的加法模型即为算法的输出。分析整个过程可知,最终的加法模型是由 MMM 次迭代产生的基函数累加得到的;

总结:前向分步算法是每步学习一个基模型,然后累加到加法模型上,以保证当前学习到的加法模型在训练集上的损失函数取值最小

提升决策树

提升决策树( Boosting Decision Tree,简称 BDT)是以决策树为基函数的加法模型,且基函数的权重参数β\betaβ均为 1,提升决策树的数学表达式如下:
f(x)=∑m=1MT(x;θm)f(x)=\sum_{m=1}^{M}T(x;\theta_{m})f(x)=m=1∑M​T(x;θm​)
使用提升决策树解决回归问题时,基函数为如下形式的回归决策树:
T(x;θ)=∑j=1JcjI(x∈Rj)T(x;\theta)=\sum_{j=1}^{J}c_{j}I(x\in R_{j})T(x;θ)=j=1∑J​cj​I(x∈Rj​)
其中,θ={(R1,c1),(R2,c2),...,(RJ,cJ)}\theta =\left\{(R_{1},c_{1}),(R_{2},c_{2}),...,(R_{J},c_{J})\right\}θ={(R1​,c1​),(R2​,c2​),...,(RJ​,cJ​)},JJJ为叶子节点的个数;

回归树对应着特征空间的一个划分以及在划分单元上的输出值;所以,决策树的模型参数可以表示为不同叶结点区域RRR以及在该区域上的预测输出值ccc;

提升决策树的学习算法总结如下:


与加法模型的学习过程相同,这里只是把基函数替换成了回归决策树;将提升决策树 f(x)f(x)f(x) 作为自变量,f(x)f(x)f(x) 在训练集上的损失作为因变量,则 BDT 的迭代过程如下:

上图表示 f(x)f(x)f(x) 每次迭代后对损失函数的影响。若是以单个样本来看,样本真实值为 8,f(x)f(x)f(x) 每次迭代后的预测值可能大于 8 ,也可能小于 8,当 f(x)=8f(x)=8f(x)=8 时损失函数最小;将样本真实值减去模型预测值的结果定义为:模型拟合真实值的残差;

若样本真实值为 8,回归树 T1(x)=6T_{1}(x) = 6T1​(x)=6,T2(x)=1T_{2}(x) = 1T2​(x)=1,则第二次迭代后的提升决策树 f(x)=T1(x)+T2(x)=7f(x) = T_{1}(x)+T_{2}(x) = 7f(x)=T1​(x)+T2​(x)=7,此时的残差为:8−7=18 - 7 = 18−7=1;若 T3(x)=1T_{3}(x) = 1T3​(x)=1,则第三次迭代后的提升决策树 f(x)=T1(x)+T2(x)+T3(x)=8f(x) = T_{1}(x)+T_{2}(x)+T_{3}(x) = 8f(x)=T1​(x)+T2​(x)+T3​(x)=8,此时残差为零;

由此可见,提升决策树(BDT)的每棵回归树都是在拟合上一轮迭代后的 BDT 的残差:
rmi=yi−fm−1(xi),i=1,2,...,Nr_{mi}=y_{i}-f_{m-1}(x_{i}),i=1,2,...,Nrmi​=yi​−fm−1​(xi​),i=1,2,...,N
θm=argmin{θ}∑i=1NL(rmi,T(xi;θ))\theta_{m}=argmin_{\left\{\theta \right\}}\sum_{i=1}^{N}L(r_{mi},T(x_{i};\theta))θm​=argmin{θ}​i=1∑N​L(rmi​,T(xi​;θ))
先计算训练集的样本残差,然后通过拟合残差学习一棵回归树。BDT 的学习本质上还是损失最小化。当损失函数加入正则化项之后,目标就变成了结构风险(损失+正则化项)最小化。若是仅通过拟合残差学习 BDT,容易陷入过拟合的风险

梯度提升算法

提升决策树的学习本质是最小化损失函数,类比使用梯度下降算法更新模型参数的公式,可以写出加法模型 f(x)f(x)f(x) 的更新公式:
f(x)+=−∂loss∂f(x)f(x)+=-\frac{\partial loss}{\partial f(x)}f(x)+=−∂f(x)∂loss​
这里相当于将 f(x)f(x)f(x) 的学习率设置为 1,f(x)f(x)f(x) 每次朝着负梯度的方向迭代:
fm(x)=fm−1(x)−[∂loss∂fm−1(x)]f_{m}(x)=f_{m-1}(x)-[\frac{\partial loss}{\partial f_{m-1}(x)}]fm​(x)=fm−1​(x)−[∂fm−1​(x)∂loss​]
因此,第 mmm 轮新增的回归树只需拟合上一轮 BDT 的负梯度即可。通过这种方法得到的提升决策树称为梯度提升决策树,相应的学习算法称为梯度提升算法。

使用梯度提升算法学习 GBDT 的流程如下:

输入:训练集 TTT、损失函数 LLL

输出:GBDT 模型

  • 1.初始化 GBDT 模型
    f0(x)=argmin{c}∑i=1NL(yi,c)f_{0}(x)=argmin_{\left\{c\right\}}\sum_{i=1}^{N}L(y_{i},c)f0​(x)=argmin{c}​i=1∑N​L(yi​,c)
  • 2.使用前向分步算法迭代 GBDT
  • 3.得到 GBDT 模型
    f(x)=fM(x)=∑m=1MT(x;θm)f(x)=f_{M}(x)=\sum_{m=1}^{M}T(x;\theta_{m})f(x)=fM​(x)=m=1∑M​T(x;θm​)

总结

  • GBDT的基函数是回归决策树
  • GBDT每次迭代的增量都是在拟合负梯度

第二十一课.GBDT相关推荐

  1. NeHe OpenGL教程 第二十一课:线的游戏

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十一课:Cocos2D-X网格特效1-3

    [麦可网]Cocos2d-X跨平台游戏开发---学习笔记 第二十一课:Cocos2D-X网格特效1-3 ================================================ ...

  3. 实践数据湖iceberg 第二十一课 flink1.13.5 + iceberg0.131 CDC(测试成功INSERT,变更操作失败)

    系列文章目录 实践数据湖iceberg 第一课 入门 实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式 实践数据湖iceberg 第三课 在sqlclient中,以sql ...

  4. OpenGL教程翻译 第二十一课 聚光灯

    第二十一课 聚光灯 原文地址:http://ogldev.atspace.co.uk/(源码请从原文主页下载) 背景 聚光灯是第三个也是最后一个我们将要介绍的光源类型(至少在一段时间内).他比平行光和 ...

  5. Python界面编程第二十一课:Pyside2 (Qt For Python)打印预览QTextEdit内容

    Pyside2 的QPrintSupport类中的QPrinter 和 QPrintPreviewDialog支持打印功能. 先看完整代码: from PySide2.QtWidgets import ...

  6. 第二十一课.DeepGraphLibrary(二)

    目录 构建GNN模块 官方SAGEConv和HeteroGraphConv用法 SAGEConv HeteroGraphConv 利用DGL构建SAGE DGL图数据集 DGLDataset 下载原始 ...

  7. 大三小学期进阶课程第二十一课:reinforcement learning and data driven approaches

    第21课.reinforcement learning and data driven approaches 解决规划问题,不能一上来就开始data driven,而是一步步来从rule based这 ...

  8. 第二十一课 图层蒙版和快速蒙版

    一.       图层蒙版   1.概念:     ◆使用蒙版可保护部分图层,该图层不能被编辑.蒙版可以控制图层区域内部分内容可隐藏或是显示.更改蒙版可以对图层应用各种效果,不会影响该图层上的图像. ...

  9. 第二十一课.粒子滤波器

    目录 粒子滤波 问题引入 采样获取数值解 权重递推关系推导 粒子滤波过程 粒子滤波采样流程 观测变量与隐变量的关系分析 滤波中的分布变化 粒子滤波的权重衰减问题 重采样解决权重衰减问题 粒子滤波 问题 ...

最新文章

  1. stm32L0工程建立(HAL+IAR,无cubemx)
  2. ubuntu 电源按钮操作_Ubuntu电脑操作基础:桌面背景,屏保和电源
  3. 【转载】性能测试浅谈
  4. vue命令行错误处理
  5. PHP 完整实战23种设计模式
  6. Java单例模式的七种写法
  7. unity如何得到所有子对象_Unity用户手册-Mesh合批
  8. python 启动新进程执行脚本
  9. 二、列表(java)
  10. webstorm中文乱码问题
  11. 010 Editor 9.x.x——安装、注册和汉化
  12. chrome清除缓存快捷键
  13. 常见水果/蔬菜/植物nbsp;英语词汇大全
  14. Cesium中如何获取鼠标单击位置的经纬度
  15. 1919: kirito's 星爆气流斩(多重背包转换为01背包+二进制优化)
  16. 相似度论文系列-1:入门方法Towards a Unified Multi-Dimensional Evaluator for Text Generation
  17. 水星路由服务器无信号,水星路由器MW326R没有WiFi信号了怎么回事?【图解】
  18. 人工智能期末复习——速通知识点
  19. C++ Opencv之3D透视变换
  20. [交换生申请之后](http://simplemind.info/blog/?p=413)

热门文章

  1. 敏捷团队如何通过Leangoo领歌做迭代管理、迭代规划及任务协同
  2. 大神程序员几行代码增粉 100W 最后入狱,附源码。
  3. 阿里飞猪搜索技术的应用与创新
  4. Linux性能挖潜的隐藏招数:内核CPU亲和性参数调整
  5. 缓存与库先写哪个,这十几张图告诉你
  6. 蚂蚁上市 P8 身价超亿,丢给我这几个牛逼的公众号
  7. 完美避坑!记一次Elasticsearch集群迁移架构实战
  8. 15 年工龄的资深技术专家职场历程自述
  9. 敏捷开发中的故事点到底是什么?如何预估故事点?
  10. 什么事情是你当了老板才知道的?