简述

boosted Tree算法简要描述:

不断地添加树,不断地进行特征分裂来生长一棵树。每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。一个树在生长的过程中,挑选一个最佳特征的最佳分裂点,来进行特征分裂。

训练后会得到的模型是多棵树,每棵树有若干叶子节点,每个叶子节点对一个分数,假如来了一个样本,根据这个样本的特征,在每棵树上会落到对应一个叶子节点,总分数就是把落到的叶子节点的分数加起来,作为预测值。

理论推导

决策树

决策树的基础就不再赘述了。下面是一个推测一个人是否喜欢玩游戏的树的例子,结构如下:

但一棵树的决策能力通常是不够强的,我们就使用多棵树预测值的和做最后的决策。

这就可以看出多个决策树 complement 的模型和目标函数了。

模型和目标函数

模型:
yi^=∑k=1Kfk(xi),fk∈F\hat{y_i} = \sum _ {k=1}^K f_k (x_i), f_k \in \mathcal{F} yi​^​=k=1∑K​fk​(xi​),fk​∈F
其中 K 为 树的个数,$ \mathcal{F}$ 是 所有可能的 classification and regression trees (CART)集合。

目标函数:
Obj=∑i=1nl(yi,yi^)+∑k=1KΩ(fk)Obj = \sum _{i=1}^n l(y_i, \hat{y_i} ) + \sum _{k=1} ^K \Omega{(f_k)} Obj=i=1∑n​l(yi​,yi​^​)+k=1∑K​Ω(fk​)
其中,目标函数的第一项为训练损失,第二项为 树的复杂度(complexity of the Trees)

我们的模型是要学习 K 棵树,每次去拟合上一次的学习的残差。跟传统的有监督算法一样,目标函数有损失函数和正则项组成。与传统决策树不同的是,传统的决策树每次决策时 Heuristic (启发式) 的,比如 信息增益;而对于 boosted tree,每次决策都是 Objective 目标性质的,即与目标函数有关。

Additive Training

首先,我们要知道树的参数是什么? 我们可以发现需要学习函数 fkf_kfk​ ,它包含一棵树的结构和叶子的分数。学习树的结构是很复杂的,不像那些简单的优化问题可以很容易地得到梯度。一次性求解所有树是不可能的。因此我们使用“增加”策略:从一个预测常数开始,每次增加一个新函数。
yi^(0)=0yi^(1)=f1(xi)=yi^(0)+f1(xi)yi^(2)=f1(xi)+f2(xi)=yi^(1)+f2(xi)...yi^(t)=∑k=1tfk(xi)=yi^(t−1)+ft(xi)\hat{y_i} ^{(0)} = 0 \\ \hat{y_i} ^{(1)} = f_1 (x_i) = \hat{y_i} ^{(0)} + f_1 (x_i) \\ \hat{y_i} ^{(2)} = f_1 (x_i) + f_2 (x_i) = \hat{y_i} ^{(1)} + f_2 (x_i) \\ ... \\ \hat{y_i} ^{(t)} = \sum_{k=1} ^ t f_k (x_i) = \hat{y_i} ^{(t-1)} + f_t (x_i) \\ yi​^​(0)=0yi​^​(1)=f1​(xi​)=yi​^​(0)+f1​(xi​)yi​^​(2)=f1​(xi​)+f2​(xi​)=yi​^​(1)+f2​(xi​)...yi​^​(t)=k=1∑t​fk​(xi​)=yi​^​(t−1)+ft​(xi​)
可以看到,每一轮新的预测,都是上一次的预测值 + 本次学习的函数。

把最新的一次预测拆分为 上次预测值 + 本次学习的函数,即$\hat{y_i} ^{(t)} = \hat{y_i} ^{(t-1)} + f_t (x_i) $ ,则目标函数为:
Obj=∑i=1nl(yi,yi^)+∑k=1KΩ(fk)=∑i=1nl[yi,yi^(t−1)+ft(xi)]+Ω(ft)+constantObj = \sum _{i=1}^n l(y_i, \hat{y_i} ) + \sum _{k=1} ^K \Omega{(f_k)} \\ = \sum _{i=1}^n l[y_i, \hat{y_i} ^{(t-1)} + f_t (x_i) ] + \Omega{(f_t)} + constant Obj=i=1∑n​l(yi​,yi​^​)+k=1∑K​Ω(fk​)=i=1∑n​l[yi​,yi​^​(t−1)+ft​(xi​)]+Ω(ft​)+constant
目标函数中,目标值和上次预测值都是已知的,那么唯一要求的是新的函数 ftf_tft​ ,使目标函数最小,即∑i=1nl[yi,yi^(t−1)+ft(xi)]+Ω(ft)\sum _{i=1}^n l[y_i, \hat{y_i} ^{(t-1)} + f_t (x_i) ] + \Omega{(f_t)}∑i=1n​l[yi​,yi​^​(t−1)+ft​(xi​)]+Ω(ft​) 最小。

如果我们使用均方误差(MSE)作为损失函数,那么目标函数可以写为:
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲\text{obj}^{(t)…
MSE作为损失函数是很友好的,它包含一次项(通常称为残差 residual)和二次项。我们通常对目标函数进行泰勒展开,取到二次项

根据泰勒展开对目标函数进行变形,并取前两项:
obj(t)=∑i=1n[l(yi,y^i(t−1))+gift(xi)+12hift2(xi)]+Ω(ft)+constant\text{obj}^{(t)} = \sum_{i=1}^n [l(y_i, \hat{y}_i^{(t-1)}) + g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i)] + \Omega(f_t) + \mathrm{constant} obj(t)=i=1∑n​[l(yi​,y^​i(t−1)​)+gi​ft​(xi​)+21​hi​ft2​(xi​)]+Ω(ft​)+constant
其中
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲g_i &= \partial…
可以看到,现在的目标函数的已知部分是:

  • 上次预测的损失函数对应函数值
  • 上次预测的损失函数的一级偏导数对应函数值
  • 上次预测的损失函数的二级偏导数对应函数值

去掉已知项,目标函数变为:
∑i=1n[gift(xi)+12hift2(xi)]+Ω(ft)\sum_{i=1}^n [g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i)] + \Omega(f_t) i=1∑n​[gi​ft​(xi​)+21​hi​ft2​(xi​)]+Ω(ft​)

这一些值根据上次预测结果可以求出来,唯一未知的就是新函数。而我们这里,是用一个棵树表示一个函数,每个叶子节点的输出值就是函数值,可枚举的。我们的目标就是把这些叶子节点的输出值求出来,使得目标最优。

模型的正则项

到此,我们还有一个重要的工作,即加上正则项,即定义树的复杂度 Ω(f)\Omega(f)Ω(f) ,为此,我们细化树的定义为:
ft(x)=wq(x),w∈RT,q:Rd→{1,2,⋯ ,T}.f_t(x) = w_{q(x)}, w \in R^T, q:R^d\rightarrow \{1,2,\cdots,T\} . ft​(x)=wq(x)​,w∈RT,q:Rd→{1,2,⋯,T}.
这里 www 是叶子上的分数向量,qqq 是将每个数据点分配给相应叶子的函数, TTT 是叶子的总数。XGBoost中,第一正则项为:
Ω(f)=γT+12λ∑j=1Twj2\Omega(f) = \gamma T + \frac{1}{2}\lambda \sum_{j=1}^T w_j^2 Ω(f)=γT+21​λj=1∑T​wj2​
有不止一种的正则项定义方式,但上述这种 work 很好。

模型完整体

KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲\text{obj}^{(t)…

这里 Ij={i∣q(xi)=j}I_j = \{i | q(x_i) = j \}Ij​={i∣q(xi​)=j} 是分配给第j个叶子的数据点索引集 ,注意公式第二行,我们家欢乐求和索引,这是因为所有数据点在同一个叶子上的分数相同。再引入 Gj=∑i∈IjgiG_j = \sum_{i\in I_j} g_iGj​=∑i∈Ij​​gi​ 和 Hj=∑i∈IjhiH_j = \sum_{i\in I_j} h_iHj​=∑i∈Ij​​hi​ ,目标函数可写为:
obj(t)=∑j=1T[Gjwj+12(Hj+λ)wj2]+γT\text{obj}^{(t)} = \sum^T_{j=1} [G_jw_j + \frac{1}{2} (H_j+\lambda) w_j^2] +\gamma T obj(t)=j=1∑T​[Gj​wj​+21​(Hj​+λ)wj2​]+γT
这个公式中,wjw_jwj​ 是相互独立的,且目标函数的形式是二次的,对于一个给定的结构,最好的 wjw_jwj​ 和 最小的损失为:
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲w_j^\ast &= -\f…
第二个公式用于评估树结构 q(x)q(x)q(x) 的好坏。

这些听起来有点复杂,让我们通过一个例子看看如何计算得分。 基本上,对于给定的树结构,我们将统计数据gig_igi​ 和 hih_ihi​ 推送到它们所属的叶子,将统计数据加在一起,并使用公式计算树的有效性。 这个分数就像决策树中的杂质度量,除了它还考虑了模型的复杂性。如下:

参考链接

https://xgboost.readthedocs.io/en/latest/tutorials/model.html

Boosted Tree原理详解相关推荐

  1. Kd tree原理详解

    目录 一.kd-tree简介 二.kd-tree的实现过程 1. kd-tree的创建 2. 最近邻搜索 三.kd-tree代码实现 一.kd-tree简介  kd-tree(全称为k-dimensi ...

  2. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  3. ntp如何确认与服务器偏差_NTP时间同步服务器(NTP服务器)原理详解

    NTP时间同步服务器(NTP服务器)原理详解 NTP时间同步服务器(NTP服务器)原理详解 1.前言 由计算机网络系统组成的分布式系统,若想协调一致进行:IT行业的"整点开拍".& ...

  4. 决策树算法和CART决策树算法详细介绍及其原理详解

    相关文章 K近邻算法和KD树详细介绍及其原理详解 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解 决策树算法和CART决策树算法详细介绍及其原理详解 线性回归算法和逻辑斯谛回归算法详细介绍及其原理详 ...

  5. K近邻算法和KD树详细介绍及其原理详解

    相关文章 K近邻算法和KD树详细介绍及其原理详解 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解 决策树算法和CART决策树算法详细介绍及其原理详解 线性回归算法和逻辑斯谛回归算法详细介绍及其原理详 ...

  6. Storm概念、原理详解及其应用(一)BaseStorm

    本文借鉴官文,添加了一些解释和看法,其中有些理解,写的比较粗糙,有问题的地方希望大家指出.写这篇文章,是想把一些官文和资料中基础.重点拿出来,能总结出便于大家理解的话语.与大多数"wordc ...

  7. XGBoost核心算法原理详解

    XGBoost算法原理详解 前言 boosting和bagging的区别 bagging boosting 提升树-基于残差的训练 学习路径 构造目标函数 Additive Training(叠加式的 ...

  8. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

  9. LVS原理详解(3种工作方式8种调度算法)--老男孩

    一.LVS原理详解(4种工作方式8种调度算法) 集群简介 集群就是一组独立的计算机,协同工作,对外提供服务.对客户端来说像是一台服务器提供服务. LVS在企业架构中的位置: 以上的架构只是众多企业里面 ...

最新文章

  1. silverlight 安全性错误
  2. 44-当日交易总结。(2014.12.31)
  3. attempt to create delete event with null entity
  4. Tensorflow加载模型(进阶版):如何利用预训练模型进行微调(fintuning)
  5. 到底哪种类型的错误信息会阻止business transaction的保存
  6. python读取sqlserver的数据_Python:使用并发未来进程P读取sqlserver数据
  7. 工作176:表单重置
  8. 用js实现改变随意改变div属性style的名称和值的结果
  9. Linux 使用root用户登录系统,并查看当前的路径。 查看当前目录下面的所有文件(包括隐藏文件)。 在当前目录下,查看根目录中的目录结构。
  10. Azure SQL作業
  11. mysql 授予用户权限_mysql授权用户权限
  12. 手把手教你编写网页图形验证码识别工具
  13. What’s difference between 1’s Complement and 2’s Complement?
  14. 基于STM32F103系列单片机四路定时器电机编码器模式配置过程附源码
  15. Windows11、10,安装最新版ENSP和最新版HCL模拟器教程、无脑下一步!带下载链接
  16. 深入剖析Spring(一)——IoC的基本概念(从面向对象角度介绍)
  17. 随手记获2亿美元C轮融资,随手记投资安全吗?
  18. 域名解析、映射以及添加SSL证书
  19. HTML语言中表格的书写中TD TR TH的英文全称
  20. Live2D项目,桌面可爱玩偶(可以动的),html桌面化(exe)的实现

热门文章

  1. 前端给map集合增加数据
  2. 计算机连接就是网络吗,电脑网络连接显示正常但上不了网怎么办 电脑网络连接显示正常但上不了网 - 云骑士一键重装系统...
  3. Python 七夕告白特技:隐藏在聊天记录里的珍贵礼物
  4. 214Echarts - 数据区域缩放(Wind Barb)
  5. [黑苹果EFI]Lenovo ThinkPad T490电脑 Hackintosh 黑苹果引导文件
  6. c++多态例子:制作饮料
  7. vue3 使用计算属性代替 filter 过滤器实现时间格式化操作
  8. ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑
  9. 桥梁模式 Bridge Patter
  10. tfhub调用本地模型retrain