原文地址: http://xgboost.apachecn.org/cn/latest/model.html#xgboost

Boosted Trees 介绍

XGBoost 是 “Extreme Gradient Boosting” 的缩写,其中 “Gradient Boosting” 一词在论文 Greedy Function Approximation: A Gradient Boosting Machine 中,由 Friedman 提出。 XGBoost 基于这个原始模型。 这是 gradient boosted trees(梯度增强树)的教程,大部分内容是基于 xgboost 的作者的这些 slides 。

GBM (boosted trees,增强树)已经有一段时间了,关于这个话题有很多的材料。 这个教程试图用监督学习的元素以独立和有原则的方式解释 boosted trees (增强树)。 我们认为这个解释更加清晰,更加正式,并激发了 xgboost 中使用的变体。

监督学习的要素

XGBoost 用于监督学习问题,我们使用训练数据 xixi 来预测目标变量 yiyi 。 在我们深入了解 boosted trees 之前,首先回顾一下监督学习的重要组成部件。

模型和参数

监督学习中的 model(模型) 通常是指给定输入 xixi 如何去预测输出 yiyi 的数学结构。 例如,一个常见的模型是一个 linear model(线性模型)(如线性回归和 logistic regression),其中的预测是由 y^i=∑jwjxijy^i=∑jwjxij 给出的,这是加权输入特征的线性组合(线性叠加的方式)。 其实这里的预测 yy 可以有不同的解释,取决于做的任务。 例如,我们可以通过 logistic 转换得到 logistic regression 中 positive 类别的概率,当我们想要对输出结果排序的时候,也可以作为排序得分指标等。

parameters(参数) 是我们需要从数据中学习的未确定部分。在线性回归问题中,参数是系数 ww 。 通常我们使用 ΘΘ 来表示参数。

目标函数:训练损失 + 正则

基于对 yiyi 的不同理解,我们可以得到不同的问题,比如回归,分类,排序等。 我们需要找到一种方法来找到训练数据的最佳参数。为了做到这一点,我们需要定义一个所谓的 objective function(目标函数) 以给定一组参数来衡量模型的性能。

关于目标函数的一个非常重要的事实是,它们 must always(必须总是) 包含两个部分:training loss (训练损失) 和 regularization(正则化)。

Obj(Θ)=L(Θ)+Ω(Θ)Obj(Θ)=L(Θ)+Ω(Θ)

其中 LL 是训练损失函数, ΩΩ 是正则化项。 training loss (训练损失)衡量我们的数据对训练数据的预测性。 例如,常用的训练损失是 mean squared error(均方误差,MSE)。

L(Θ)=∑i(yi−y^i)2L(Θ)=∑i(yi−y^i)2

另一个常用的损失函数是 logistic 回归的 logistic 损失。

L(θ)=∑i[yiln(1+e−y^i)+(1−yi)ln(1+ey^i)]L(θ)=∑i[yiln⁡(1+e−y^i)+(1−yi)ln⁡(1+ey^i)]

regularization term(正则化项) 是人们通常忘记添加的内容。正则化项控制模型的复杂性,这有助于避免过拟合。 这听起来有些抽象,那么我们在下面的图片中考虑下面的问题。在图像左上角给出输入数据点的情况下,要求您在视觉上 fit(拟合) 一个 step function(阶梯函数)。 您认为三种中的哪一种解决方案是最拟合效果最好的?

答案已经标注为红色了。请思考一下这个是否在你的视觉上较为合理?总的原则是我们想要一个 simple(简单) 和 predictive(可预测) 的模型。 两者之间的权衡也被称为机器学习中的 bias-variance tradeoff(偏差-方差 权衡)。

对于线性模型常见的正则化项有 L2L2 正则和 L1L1 正则。这样的目标函数的设计来自于统计学习中的一个重要概念,也是我们刚才说的, bias-variance tradeoff(偏差-方差 权衡)。比较感性的理解, Bias 可以理解为假设我们有无限多数据的时候,可以训练出最好的模型所拿到的误差。而 Variance 是因为我们只有有限数据,其中随机性带来的误差。目标中误差函数鼓励我们的模型尽可能去拟合训练数据,这样相对来说最后的模型会有比较小的 bias 。而正则化项则鼓励更加简单的模型。因为当模型简单之后,有限数据拟合出来结果的随机性比较小,不容易过拟合,使得最后模型的预测更加稳定。

为什么要介绍 general principle(一般原则)

上面介绍的要素构成了监督学习的基本要素,它们自然是机器学习工具包的基石。 例如,你应该能够描述 boosted trees 和 random forests 之间的差异和共同点。 以正式的方式理解这个过程也有助于我们理解我们正在学习的目标以及启发式算法背后的原因,例如 pruning 和 smoothing 。

tree ensembles(树集成)

既然我们已经介绍了监督学习的内容,那么接下来让我们开始介绍真正的 trees 吧。 首先,让我们先来了解一下 xgboost 的 model(模型) : tree ensembles(树集成)。 树集成模型是一组 classification and regression trees (CART)。 下面是一个 CART 的简单的示例,它可以分类是否有人喜欢电脑游戏。

我们把一个家庭的成员分成不同的叶子,并把他们分配到相应的叶子节点上。 CART 与 decision trees(决策树)有些许的不同,就是叶子只包含决策值。在 CART 中,每个叶子都有一个 real score (真实的分数),这给了我们更丰富的解释,超越了分类。 这也使得统一的优化步骤更容易,我们将在本教程的后面部分看到。

通常情况下,单棵树由于过于简单而不够强大到可以支持在实践中使用的。实际使用的是所谓的 tree ensemble model(树集成模型),它将多棵树的预测加到一起。

上图是两棵树的集成的例子。将每棵树的预测分数加起来得到最终分数。 如果你看一下这个例子,一个重要的事实就是两棵树互相 complement(补充) 。 在数学表示上,我们可以在表单中编写我们的模型。

y^i=∑k=1Kfk(xi),fk∈Fy^i=∑k=1Kfk(xi),fk∈F

其中 KK 是树的数量, ff 是函数空间 FF 的函数, FF 是所有可能的 CARTs 的集合。所以我们优化的目标可以写成

obj(Θ)=∑inl(yi,y^i)+∑k=1KΩ(fk)obj(Θ)=∑inl(yi,y^i)+∑k=1KΩ(fk)

那么问题来了,random forests(随机森林)的 model(模型) 是什么?这正是 tree ensembles(树集成)!所以 random forests 和 boosted trees 在模型上并没有什么不同,不同之处在于我们如何训练它们。这意味着如果你写一个 tree ensembles(树集成)的预测服务,你只需要编写它们中的一个,它们应该直接为 random forests(随机森林)和 boosted trees(增强树)工作。这也是监督学习基石元素的一个例子。

Tree Boosting

在介绍完模型之后,我们从真正的训练部分开始。我们应该怎么学习 trees 呢? 答案是,对于所有的监督学习模型都一样的处理:定义一个合理的目标函数,然后去尝试优化它

假设我们有以下目标函数(记住它总是需要包含训练损失和正则化)

Obj=∑i=1nl(yi,y^(t)i)+∑i=1tΩ(fi)Obj=∑i=1nl(yi,y^i(t))+∑i=1tΩ(fi)

附加训练

我们想要问的第一件事就是树的 parameters(参数) 是什么。 你可能已经发现了,我们要学习的是那些函数 fifi ,每个函数都包含树的结构和叶子分数。这比传统的你可以找到捷径的优化问题要难得多。在 tree ensemble 中,参数对应了树的结构,以及每个叶子节点上面的预测分数。 一次性训练所有的树并不容易。 相反,我们使用一个附加的策略:优化好我们已经学习完成的树,然后一次添加一棵新的树。 我们通过 y^(t)iy^i(t) 来关注步骤 tt 的预测值,所以我们有

y^(0)iy^(1)iy^(2)iy^(t)i=0=f1(xi)=y^(0)i+f1(xi)=f1(xi)+f2(xi)=y^(1)i+f2(xi)…=∑k=1tfk(xi)=y^(t−1)i+ft(xi)y^i(0)=0y^i(1)=f1(xi)=y^i(0)+f1(xi)y^i(2)=f1(xi)+f2(xi)=y^i(1)+f2(xi)…y^i(t)=∑k=1tfk(xi)=y^i(t−1)+ft(xi)

另外还有一个问题,每一步我们想要哪棵 tree 呢?一个自然而然的事情就是添加一个优化我们目标的方法。

Obj(t)=∑i=1nl(yi,y^(t)i)+∑i=1tΩ(fi)=∑i=1nl(yi,y^(t−1)i+ft(xi))+Ω(ft)+constantObj(t)=∑i=1nl(yi,y^i(t))+∑i=1tΩ(fi)=∑i=1nl(yi,y^i(t−1)+ft(xi))+Ω(ft)+constant

如果我们考虑使用 MSE 作为我们的损失函数,它将是下面的形式。

Obj(t)=∑i=1n(yi−(y^(t−1)i+ft(xi)))2+∑i=1tΩ(fi)=∑i=1n[2(y^(t−1)i−yi)ft(xi)+ft(xi)2]+Ω(ft)+constantObj(t)=∑i=1n(yi−(y^i(t−1)+ft(xi)))2+∑i=1tΩ(fi)=∑i=1n[2(y^i(t−1)−yi)ft(xi)+ft(xi)2]+Ω(ft)+constant

MSE 的形式比较友好,具有一阶项(通常称为残差)和二次项。 对于其他形式的损失(例如,logistic loss),获得这么好的形式并不是那么容易。 所以在一般情况下,我们把损失函数的泰勒展开到二阶

Obj(t)=∑i=1n[l(yi,y^(t−1)i)+gift(xi)+12hif2t(xi)]+Ω(ft)+constantObj(t)=∑i=1n[l(yi,y^i(t−1))+gift(xi)+12hift2(xi)]+Ω(ft)+constant

其中 gigi 和 hihi 被定义为

gihi=∂y^(t−1)il(yi,y^(t−1)i)=∂2y^(t−1)il(yi,y^(t−1)i)gi=∂y^i(t−1)l(yi,y^i(t−1))hi=∂y^i(t−1)2l(yi,y^i(t−1))

我们删除了所有的常量之后, tt 步骤中的具体目标就变成了

∑i=1n[gift(xi)+12hif2t(xi)]+Ω(ft)∑i=1n[gift(xi)+12hift2(xi)]+Ω(ft)

这成为了新树的优化目标。这个定义的一个重要优点是它只依赖于 gigi 和 hihi 。这就是 xgboost 如何支持自定义损失函数。 我们可以使用完全相同的使用 gigi 和 hihi 作为输入的 solver(求解器)来对每个损失函数进行优化,包括 logistic regression, weighted logistic regression。

模型复杂度

我们已经介绍了训练步骤,但是等等,还有一个重要的事情,那就是 regularization(正则化) ! 我们需要定义树的复杂度 Ω(f)Ω(f) 。为了做到这一点,让我们首先改进一棵树的定义 f(x)f(x) 如下

ft(x)=wq(x),w∈RT,q:Rd→{1,2,⋯,T}.ft(x)=wq(x),w∈RT,q:Rd→{1,2,⋯,T}.

这里 ww 是树叶上的分数向量,qq 是将每个数据点分配给叶子的函数,TT 是树叶的数量。 在 XGBoost 中,我们将复杂度定义为

Ω(f)=γT+12λ∑j=1Tw2jΩ(f)=γT+12λ∑j=1Twj2

当然有不止一种方法来定义复杂度,但是这个具体的方法在实践中运行良好。正则化是大多数树的包不那么谨慎或简单忽略的一部分。这是因为对传统的树学习算法的对待只强调提高 impurity(不纯性),而复杂度控制则是启发式的。 通过正式定义,我们可以更好地了解我们正在学习什么,是的,它在实践中运行良好。

The Structure Score(结构分数)

这是 derivation(派生)的神奇部分。在对树模型进行重新格式化之后,我们可以用第 tt 棵树来编写目标值如 :

Obj(t)≈∑i=1n[giwq(xi)+12hiw2q(xi)]+γT+12λ∑j=1Tw2j=∑j=1T[(∑i∈Ijgi)wj+12(∑i∈Ijhi+λ)w2j]+γTObj(t)≈∑i=1n[giwq(xi)+12hiwq(xi)2]+γT+12λ∑j=1Twj2=∑j=1T[(∑i∈Ijgi)wj+12(∑i∈Ijhi+λ)wj2]+γT

其中 Ij={i|q(xi)=j}Ij={i|q(xi)=j} 是分配给第 jj 个叶子的数据点的索引的集合。 请注意,在第二行中,我们更改了总和的索引,因为同一叶上的所有数据点都得到了相同的分数。 我们可以通过定义 Gj=∑i∈IjgiGj=∑i∈Ijgi 和 Hj=∑i∈IjhiHj=∑i∈Ijhi 来进一步压缩表达式 :

Obj(t)=∑j=1T[Gjwj+12(Hj+λ)w2j]+γTObj(t)=∑j=1T[Gjwj+12(Hj+λ)wj2]+γT

在这个等式中 wjwj 是相互独立的,形式 Gjwj+12(Hj+λ)w2jGjwj+12(Hj+λ)wj2 是二次的,对于给定的结构 q(x)q(x) 的最好的 wjwj,我们可以得到最好的客观规约:

w∗j=−GjHj+λObj∗=−12∑j=1TG2jHj+λ+γTwj∗=−GjHj+λObj∗=−12∑j=1TGj2Hj+λ+γT

最后一个方程度量一个树结构 q(x)q(x) how good(到底有多好) 。

如果这一切听起来有些复杂,我们来看一下图片,看看分数是如何计算的。 基本上,对于一个给定的树结构,我们把统计 gigi 和 hihi push 到它们所属的叶子上,统计数据加和到一起,然后使用公式计算树是多好。 除了考虑到模型的复杂度,这个分数就像决策树中的杂质测量一样(例如,熵/GINI系数)。

学习树结构

既然我们有了一个方法来衡量一棵树有多好,理想情况下我们会列举所有可能的树并挑选出最好的树。 在实践中,这种方法是比较棘手的,所以我们会尽量一次优化树的一个层次。 具体来说,我们试图将一片叶子分成两片,并得到分数

Gain=12[G2LHL+λ+G2RHR+λ−(GL+GR)2HL+HR+λ]−γGain=12[GL2HL+λ+GR2HR+λ−(GL+GR)2HL+HR+λ]−γ

这个公式可以分解为 1) 新左叶上的得分 2) 新右叶上的得分 3) 原始叶子上的得分 4) additional leaf(附加叶子)上的正则化。 我们可以在这里看到一个重要的事实:如果增益小于 γγ,我们最好不要添加那个分支。这正是基于树模型的 pruning(剪枝) 技术!通过使用监督学习的原则,我们自然会想出这些技术工作的原因 :)

对于真实有价值的数据,我们通常要寻找一个最佳的分割。为了有效地做到这一点,我们把所有的实例按照排序顺序排列,如下图所示。 

然后从左到右的扫描就足以计算所有可能的拆分解决方案的结构得分,我们可以有效地找到最佳的拆分。

XGBoost 最后的话

既然你明白了什么是 boosted trees 了,你可能会问这在 XGBoost 中的介绍在哪里? XGBoost 恰好是本教程中引入的正式原则的动力! 更重要的是,在 systems optimization(系统优化) 和 principles in machine learning(机器学习原理) 方面都有深入的研究。 这个库的目标是推动机器计算极限的极端,以提供一个scalable(可扩展)portable(可移植) 和 accurate(精确的) 库。 确保你 试一试,最重要的是,向社区贡献你的智慧(代码,例子,教程)!

转载于:https://www.cnblogs.com/ordili/p/8157805.html

Boosted Trees 介绍相关推荐

  1. (XGBoost)提升树入门介绍(Inrtoduction to Boosted Trees)

    提升树入门介绍(Inrtoduction to Boosted Trees) Author : Jasper Yang School : Bupt 这是一篇翻译文,翻译的内容是 XGBoost 官网的 ...

  2. 使用TensorFlow训练Boosted Trees model

    How to train Boosted Trees models in TensorFlow 官方文档链接 这篇tutorial使用tf.estimator完整的训练一个Gradient Boost ...

  3. Boosted Trees原理简介

    Boosted Trees原理简介 XGBoost代表"极端梯度增强",其中术语"梯度增强"源自Friedman撰写的论文<贪婪函数近似:梯度增强机> ...

  4. XGBoost和Boosted Trees

    树模型简介 树模型是工业界用得非常多的一个模型,它的representation类似于下图.其实基于树的模型都是通过一个个平行于坐标轴的平面去拟合训练集的实际分界面,理论上足够多的平行于坐标轴的平面能 ...

  5. Boosted Trees简介【翻译+自己的理解】

    原文 https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf 华盛顿大学的 Introduction to Boosted Trees. ...

  6. 如何在TensorFlow中训练Boosted Trees模型

    在使用结构化数据时,诸如梯度提升决策树和随机森林之类的树集合方法是最流行和最有效的机器学习工具之一. 树集合方法训练速度快,无需大量调整即可正常工作,并且不需要大型数据集进行训练. 在TensorFl ...

  7. 陈天奇《Introduction to Boosted Trees》PPT 缩略版笔记

    深入研究了一下陈天奇Boosted Tree的PPT,做了点简单的笔记,可以说是PPT的缩略版: 框架有了,截了些重要的图和公式. 虽然简略,但是足以学习大牛思考问题的方式. Review of ke ...

  8. xgboost 正则项_XGBoost入门系列第一讲

    Boosted Trees 介绍 XGBoost 是 "Extreme Gradient Boosting"的简称,其中"Gradient Boosting"来 ...

  9. CSS 颜色渐变生成器

    手工挑选颜色来制作颜色渐变需要设计经验和对色彩和谐的良好理解.如果您需要背景或 UI 元素的渐变,但又没有足够的信心自己处理任务(或者如果您很着急),则 Color gradient generato ...

最新文章

  1. Electron怎样进行渲染进程调试和使用浏览器和VSCode进行调试
  2. wpf控件设计时支持(3)
  3. linux 拨号网关,用LINUX做在一张软盘上的拨号网关 (转)
  4. SAP License:SAP MM中的几个概念
  5. 学习做生意的知识重要吗?
  6. 计算机主机英语怎么说,电脑的英文-电脑的主机这个词英语怎么说?电脑的主 – 手机爱问...
  7. jquery 之简单好用的分页插件的使用方法 jQuery分页插件pageGroup.js
  8. PHP实现讯飞语音转写demo
  9. xp计算机字体在哪,Windows XP系统字体库在哪-如何安装新字体
  10. html鼠标自动图片放大,css如何实现鼠标放在图片上时图片放大呢?
  11. 微信小程序与普通网页区别
  12. linux切换bash dash,Ubuntu下shell脚本运行异常:bash和dash的区别
  13. 学习如何读论文的一些磨刀不误砍柴工
  14. 一个安全架构师需要做什么?有什么能力要求?
  15. MAC怎样显示隐藏文件
  16. 3D模型欣赏:汉服美女 【3D游戏建模教程】
  17. oVirt管理端高可用模式搭建(hosted-engine)
  18. 人工智能实战第三次作业 焦宇恒
  19. C语言程序设计实现调制解调,安徽省二级C语言程序设计笔试样题4.doc
  20. Chalk-控制台输出着色Nodejs库

热门文章

  1. 《万箭穿心》--观后感悟
  2. 前端小菜 - web 初相识
  3. 安装SPARK 环境变量设置
  4. 谷粒商城 spu保存
  5. Linux反选删除文件
  6. AP3266 DC-DC大功率同步降压恒流芯片 过EMC三级 摩托电动汽车灯IC
  7. 怎样让你的客户服务更高效?
  8. 4.27期货全品种每日操作建议
  9. ValueError: expected 2D or 3D input (got 4D input)
  10. 22 - OAI rfsimulator 射频仿真- 博一