Boosted Tree原理详解
简述
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∑Kfk(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∑nl(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∑tfk(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∑nl(yi,yi^)+k=1∑KΩ(fk)=i=1∑nl[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=1nl[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))+gift(xi)+21hift2(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[gift(xi)+21hift2(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∑Twj2
有不止一种的正则项定义方式,但上述这种 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∈Ijgi 和 Hj=∑i∈IjhiH_j = \sum_{i\in I_j} h_iHj=∑i∈Ijhi ,目标函数可写为:
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[Gjwj+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原理详解相关推荐
- Kd tree原理详解
目录 一.kd-tree简介 二.kd-tree的实现过程 1. kd-tree的创建 2. 最近邻搜索 三.kd-tree代码实现 一.kd-tree简介 kd-tree(全称为k-dimensi ...
- 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
- ntp如何确认与服务器偏差_NTP时间同步服务器(NTP服务器)原理详解
NTP时间同步服务器(NTP服务器)原理详解 NTP时间同步服务器(NTP服务器)原理详解 1.前言 由计算机网络系统组成的分布式系统,若想协调一致进行:IT行业的"整点开拍".& ...
- 决策树算法和CART决策树算法详细介绍及其原理详解
相关文章 K近邻算法和KD树详细介绍及其原理详解 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解 决策树算法和CART决策树算法详细介绍及其原理详解 线性回归算法和逻辑斯谛回归算法详细介绍及其原理详 ...
- K近邻算法和KD树详细介绍及其原理详解
相关文章 K近邻算法和KD树详细介绍及其原理详解 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解 决策树算法和CART决策树算法详细介绍及其原理详解 线性回归算法和逻辑斯谛回归算法详细介绍及其原理详 ...
- Storm概念、原理详解及其应用(一)BaseStorm
本文借鉴官文,添加了一些解释和看法,其中有些理解,写的比较粗糙,有问题的地方希望大家指出.写这篇文章,是想把一些官文和资料中基础.重点拿出来,能总结出便于大家理解的话语.与大多数"wordc ...
- XGBoost核心算法原理详解
XGBoost算法原理详解 前言 boosting和bagging的区别 bagging boosting 提升树-基于残差的训练 学习路径 构造目标函数 Additive Training(叠加式的 ...
- CRF(条件随机场)与Viterbi(维特比)算法原理详解
摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...
- LVS原理详解(3种工作方式8种调度算法)--老男孩
一.LVS原理详解(4种工作方式8种调度算法) 集群简介 集群就是一组独立的计算机,协同工作,对外提供服务.对客户端来说像是一台服务器提供服务. LVS在企业架构中的位置: 以上的架构只是众多企业里面 ...
最新文章
- silverlight 安全性错误
- 44-当日交易总结。(2014.12.31)
- attempt to create delete event with null entity
- Tensorflow加载模型(进阶版):如何利用预训练模型进行微调(fintuning)
- 到底哪种类型的错误信息会阻止business transaction的保存
- python读取sqlserver的数据_Python:使用并发未来进程P读取sqlserver数据
- 工作176:表单重置
- 用js实现改变随意改变div属性style的名称和值的结果
- Linux 使用root用户登录系统,并查看当前的路径。 查看当前目录下面的所有文件(包括隐藏文件)。 在当前目录下,查看根目录中的目录结构。
- Azure SQL作業
- mysql 授予用户权限_mysql授权用户权限
- 手把手教你编写网页图形验证码识别工具
- What’s difference between 1’s Complement and 2’s Complement?
- 基于STM32F103系列单片机四路定时器电机编码器模式配置过程附源码
- Windows11、10,安装最新版ENSP和最新版HCL模拟器教程、无脑下一步!带下载链接
- 深入剖析Spring(一)——IoC的基本概念(从面向对象角度介绍)
- 随手记获2亿美元C轮融资,随手记投资安全吗?
- 域名解析、映射以及添加SSL证书
- HTML语言中表格的书写中TD TR TH的英文全称
- Live2D项目,桌面可爱玩偶(可以动的),html桌面化(exe)的实现
热门文章
- 前端给map集合增加数据
- 计算机连接就是网络吗,电脑网络连接显示正常但上不了网怎么办 电脑网络连接显示正常但上不了网 - 云骑士一键重装系统...
- Python 七夕告白特技:隐藏在聊天记录里的珍贵礼物
- 214Echarts - 数据区域缩放(Wind Barb)
- [黑苹果EFI]Lenovo ThinkPad T490电脑 Hackintosh 黑苹果引导文件
- c++多态例子:制作饮料
- vue3 使用计算属性代替 filter 过滤器实现时间格式化操作
- ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑
- 桥梁模式 Bridge Patter
- tfhub调用本地模型retrain