当前位置: 首页 > news >正文

xgboost:算法数学原理

xgboost算法数学原理

1、求预测值
y^i=ϕ(xi)=∑k=1Kfk(xi),fk∈F,(1)\hat{y}_i=\phi\left(\mathbf{x}_i\right)=\sum_{k=1}^K f_k\left(\mathbf{x}_i\right), \quad f_k \in \mathcal{F},\tag{1} y^i=ϕ(xi)=k=1Kfk(xi),fkF,(1)
F={f(x)=wq(x)}(q:Rm→T,w∈RT)\mathcal{F}=\left\{f(\mathbf{x})=w_{q(\mathbf{x})}\right\}\left(q: \mathbb{R}^m \rightarrow T, w \in \mathbb{R}^T\right)F={f(x)=wq(x)}(q:RmT,wRT):递归树的的空间;

qqq:每棵树的结构,映射一个样本到一个叶子节点index;

T:T:T:叶子的数目;fkf_kfk对于一个独立的树结构qqq和叶子权重www

wiw_iwi:在i−thi-thith叶子节点的分数;(与决策树不同,递归树在每个叶子节点上包含一个连续分数)。

示例图:(注:图中的人指的是一个个样本)

结合上面的公式理解就是对于样本iii的预测值等于KKK棵递归树样本落在的叶子节点对应的分数的和;

在这里插入图片描述

2、计算带正则项的损失
L(ϕ)=∑il(y^i,yi)+∑kΩ(fk)where Ω(f)=γT+12λ∥w∥2(2)\begin{aligned} & \mathcal{L}(\phi)=\sum_i l\left(\hat{y}_i, y_i\right)+\sum_k \Omega\left(f_k\right) \\ & \text { where } \Omega(f)=\gamma T+\frac{1}{2} \lambda\|w\|^2 \end{aligned}\tag{2} L(ϕ)=il(y^i,yi)+kΩ(fk) where Ω(f)=γT+21λw2(2)
lll:衡量预测值yi^\hat{y_i}yi^和目标值yiy_iyi差别的可微的凸函数;

Ω\OmegaΩ:模型复杂度的惩罚项;用于平滑最终的学习权重避免过拟合。正则化的目标函数倾向于选择一个更简单、可预测的函数(递归树模型);传统的梯度提升树没有用正则化项,RGF用到。

3、梯度树集成(Gradient Tree Boosting)

从对全部递归树的损失,利用贪心和近似,推导到一棵树的损失

为什么用(3)式作为目标函数而不是(2)式?

将(1)和(2)合并:
L(ϕ)=∑il(∑k=1Kfk(xi),yi)+∑kΩ(fk)where Ω(f)=γT+12λ∥w∥2(2)\begin{aligned} & \mathcal{L}(\phi)=\sum_i l\left(\sum_{k=1}^K f_k\left(\mathbf{x}_i\right), y_i\right)+\sum_k \Omega\left(f_k\right) \\ & \text { where } \Omega(f)=\gamma T+\frac{1}{2} \lambda\|w\|^2 \end{aligned}\tag{2} L(ϕ)=il(k=1Kfk(xi),yi)+kΩ(fk) where Ω(f)=γT+21λw2(2)

可以看到(2)式不能进行优化,不能优化的原因是KKK棵树的话,就有KKKf(x)f(x)f(x),在优化理论中,相当于多变量优化,是一个极其难以优化的问题。所以使用(3)式这种贪婪的方式,每一次只优化一棵树。
L(t)=∑i=1nl(yi,y^i(t−1)+ft(xi))+Ω(ft)(3)\mathcal{L}^{(t)}=\sum_{i=1}^n l\left(y_i, \hat{y}_i^{(t-1)}+f_t\left(\mathbf{x}_i\right)\right)+\Omega\left(f_t\right)\tag{3} L(t)=i=1nl(yi,y^i(t1)+ft(xi))+Ω(ft)(3)
yi^t\hat{y_i}^{t}yi^t:第iii个样本实例在第ttt次迭代的预测值;

注:二阶泰勒公式:
f(x+Δx)≈f(x)+f′(x)⋅Δx+12f′′(x)⋅Δx2f(x+\Delta x)\approx f(x)+f'(x)\cdot\Delta x+\dfrac{1}{2}f''(x)\cdot\Delta x^2 f(x+Δx)f(x)+f(x)Δx+21f′′(x)Δx2

但是(3)式还是不容易优化,需要进行二阶近似:
L(t)≃∑i=1n[l(yi,y^(t−1))+gift(xi)+12hift2(xi)]+Ω(ft)(4)\mathcal{L}^{(t)} \simeq \sum_{i=1}^n\left[l\left(y_i, \hat{y}^{(t-1)}\right)+g_i f_t\left(\mathbf{x}_i\right)+\frac{1}{2} h_i f_t^2\left(\mathbf{x}_i\right)\right]+\Omega\left(f_t\right)\tag{4} L(t)i=1n[l(yi,y^(t1))+gift(xi)+21hift2(xi)]+Ω(ft)(4)
gig_igigi=∂y^(t−1)l(yi,y^(t−1))g_i=\partial_{\hat{y}^{(t-1)}} l\left(y_i, \hat{y}^{(t-1)}\right)gi=y^(t1)l(yi,y^(t1))

hih_ihihi=∂y^(t−1)2l(yi,y^(t−1))h_i=\partial_{\hat{y}^{(t-1)}}^2 l\left(y_i, \hat{y}^{(t-1)}\right)hi=y^(t1)2l(yi,y^(t1))

进一步去掉常数项,得到损失函数:(常数项不影响损失函数,因为常数项不影响最小化损失函数问题,只会影响损失函数的结果的量级)
L~(t)=∑i=1n[gift(xi)+12hift2(xi)]+Ω(ft)(5)\tilde{\mathcal{L}}^{(t)}=\sum_{i=1}^n\left[g_i f_t\left(\mathbf{x}_i\right)+\frac{1}{2} h_i f_t^2\left(\mathbf{x}_i\right)\right]+\Omega\left(f_t\right)\tag{5} L~(t)=i=1n[gift(xi)+21hift2(xi)]+Ω(ft)(5)
按照叶子节点进行样本的集合划分:
L~(t)=∑i=1n[gift(xi)+12hift2(xi)]+γT+12λ∑j=1Twj2=∑j=1T[(∑i∈Ijgi)wj+12(∑i∈Ijhi+λ)wj2]+γT(6)\begin{aligned} \tilde{\mathcal{L}}^{(t)} & =\sum_{i=1}^n\left[g_i f_t\left(\mathbf{x}_i\right)+\frac{1}{2} h_i f_t^2\left(\mathbf{x}_i\right)\right]+\gamma T+\frac{1}{2} \lambda \sum_{j=1}^T w_j^2 \\ & =\sum_{j=1}^T\left[\left(\sum_{i \in I_j} g_i\right) w_j+\frac{1}{2}\left(\sum_{i \in I_j} h_i+\lambda\right) w_j^2\right]+\gamma T \end{aligned}\tag{6} L~(t)=i=1n[gift(xi)+21hift2(xi)]+γT+21λj=1Twj2=j=1TiIjgiwj+21iIjhi+λwj2+γT(6)
Ij={i∣q(xi)=j}I_j=\{i|q(\mathbf{x}_i)=j\}Ij={iq(xi)=j}:叶子节点jjj的样本集合;

然后对www求导数,令其==0,得到:
wj∗=−∑i∈Ijgi∑i∈Ijhi+λ,(7)w_j^*=-\dfrac{\sum_{i\in I_j}g_i}{\sum_{i\in I_j}h_i+\lambda},\tag{7} wj=iIjhi+λiIjgi,(7)
计算对应的优化值:
L~(t)(q)=−12∑j=1T(∑i∈Ijgi)2∑i∈Ijhi+λ+γT.(8)\tilde{\mathcal{L}}^{(t)}(q)=-\dfrac{1}{2}\sum\limits_{j=1}^{T}\dfrac{\left(\sum_{i\in I_j}g_i\right)^2}{\sum_{i\in I_j}h_i+\lambda}+\gamma T.\tag{8} L~(t)(q)=21j=1TiIjhi+λ(iIjgi)2+γT.(8)
式(8)可以作为像决策树里面的纯度、信息熵一样的划分函数,得到树的划分分数。如图

在这里插入图片描述

通常应该计算单个叶子节点和添加左右节点的贪婪算法来评估是不是增加分支,而不能直接计算(8),如下:
Lsplit=12[(∑i∈ILgi)2∑i∈ILhi+λ+(∑i∈IRgi)2∑i∈IRhi+λ−(∑i∈Igi)2∑i∈Ihi+λ]−γ(9)\mathcal{L}_{split}=\dfrac{1}{2}\left[\dfrac{(\sum_{i\in I_L}g_i)^2}{\sum_{i\in I_L}h_i+\lambda}+\dfrac{(\sum_{i\in I_R}g_i)^2}{\sum_{i\in I_R}h_i+\lambda}-\dfrac{(\sum_{i\in I}g_i)^2}{\sum_{i\in I}h_i+\lambda}\right]-\gamma\tag{9} Lsplit=21[iILhi+λ(iILgi)2+iIRhi+λ(iIRgi)2iIhi+λ(iIgi)2]γ(9)
R}h_i+\lambda}-\dfrac{(\sum_{i\in I}g_i)^2}{\sum_{i\in I}h_i+\lambda}\right]-\gamma\tag{9}
$$

http://www.lryc.cn/news/26829.html

相关文章:

  • map、multimap、unordered_map
  • 2023年全国最新会计专业技术资格精选真题及答案11
  • Centos7搭建NFS
  • ThreadLoca基本使用以及与synchronized的区别
  • 【C++】纯虚函数、纯虚析构
  • Python 进阶小技巧:7招展开嵌套列表
  • 【Spring6】| Bean的作用域
  • Qt界面美化之自定义qss样式表
  • 春招进行时:“211文科硕士吐槽工资5500” HR:行情和能力决定价值
  • 【DaVinci Developer专题】-45-自动生成SWC中所有Runnable对应的C文件
  • redis启动和关闭服务脚本
  • windows CMD快捷键:
  • 【C/C++语言】刷题|双指针|数组|单链表
  • Leetcode.1487 保证文件名唯一
  • python-星号(*)-双星号(**)-函数动态参数匹配-解包操作
  • 面试官:为什么说ArrayList线程不安全?
  • STP详解
  • linux AWK常用命令 —— 筑梦之路
  • SpringCloud:服务拆分及远程调用
  • 网络应用之javascript函数定义和调用
  • 使用VNC远程连接Ubuntu - 内网穿透实现公网远程办公
  • JavaScript Date 日期对象
  • 婴幼儿常见八大疾病及护理方法
  • UVa 817 According to Bartjens 数字表达式 DFS ID 迭代加深搜 逆波兰表达式
  • c++基础/类和对象
  • 2023年中国人工智能产业趋势报告
  • STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系
  • 解决Sql WorkBench中数据库不能重命名的问题
  • REFL: 联邦学习中智能的设备选择方法
  • Linux:NFS服务器