ExtraTree|GBDT|XGBoost模型原理

news2024/10/23 23:29:17

目录

  • 1. 总述
  • 2. ExtraTree
  • 3. GBDT
  • 4. XGBoost

1. 总述

ExtraTree、GBDT 和 XGBoost 都是基于决策树的算法。ExtraTree属于Bagging(装袋法)方法,GBDT和XGBoost则属于Boosting(提升树)方法,通过逐步优化残差(GBDT使用一阶导数,XGBoost结合了一阶和二阶导数)来生成树。由于引入了二阶梯度和正则化项,XGBoost 通常在准确性上优于传统的 GBDT。

2. ExtraTree

ExtraTree(Extremely Randomized Trees,极端随机树)主要基于随机选择特征和随机分割点构建决策树。在传统决策树中,一般通过某种准则(基尼系数或信息增益)来选择最优分割点。而ExtraTree 则通过完全随机的方式选择分割点,这样能提高了树的多样性,从而降低模型的方差。
假设当前节点的数据集为 D D D,特征空间为 R R R,ExtraTree 的分割准则为:

  1. 随机选择一个特征 X i ∈ R X_i\in R XiR
  2. 在特征 X i X_i Xi 的取值范围内,随机选取一个分割点 s s s,构建决策树的分裂:
    D left = { ( x , y ) ∈ D , x i ≤ s } , D right = { ( x , y ) ∈ D , x i > s } D_{\text{left}}=\{(x,y)\in D,x_i\leq s\},\quad D_{\text{right}}=\{(x,y)\in D,x_i>s\} Dleft={(x,y)D,xis},Dright={(x,y)D,xi>s}

分裂完成后重复该过程,直到满足停止条件(达到最大深度或节点样本数小于阈值)。对于某棵决策树,由于它的最佳分叉属性是随机选择的,因此用它来预测结果往往是不准确的,但多棵决策树组合在一起,就能达到很好的预测效果。通过多个极端随机树的集成,最终的预测是这些树预测结果的平均或投票。
在随机森林中,分割点(划分数据的阈值)是从随机选取的特征中通过信息增益或基尼值数等准则选取最优的分割点。但在 ExtraTree 中,分割点是随机选取的,而不是最优的。ExtraTree 因为不用计算最佳分割点,相比于随机森林,训练速度快得多。

3. GBDT

在GBDT中,当损失函数选用均方误差损失GBDT(Gradient Boosting Decision Trees,梯度提升决策树)是一种Boosting(提升树)算法,它通过训练一系列的弱学习器(通常是决策树)来逐步改进模型的性能。与随机森林中的**Bagging(装袋法)**不同,GBDT 的核心思想是每棵树都基于前一棵树的错误进行学习。具体来说:

  1. 初始模型是一个简单的预测,比如训练集目标值的均值。
  2. 后续的每棵树学习的是前一个模型的残差,即模型预测值与真实值之间的差异。
  3. 通过逐步修正误差,GBDT 最终构建出一个强大的模型。

注:残差表示的是真实值与模型预测值之间的差异,可以表示为:
r i = y i − y i ^ r_i=y_i−\hat{y_i} ri=yiyi^

在GBDT中,当损失函数选用均方误差损失时,每一次拟合的值就是残差值(真实值-预测值),均方误差损失函数如下:
L ( y , F ( x ) ) = ( y − F ( x ) ) 2 L(y,F(x))=(y−F(x))^2 L(y,F(x))=(yF(x))2

为了求导方便,在损失函数前面乘以 1 2 \frac{1}{2} 21
L ( y , F ( x ) ) = 1 2 ( y − F ( x ) ) 2 L(y,F(x))=\frac{1}{2}(y−F(x))^2 L(y,F(x))=21(yF(x))2

此时梯度:
[ ∂ L ( y , F ( x ) ) ∂ F ( x ) ] = F ( x ) − y [\frac{∂L(y,F(x))}{∂F(x)}]=F(x)-y [F(x)L(y,F(x))]=F(x)y

负梯度:
− [ ∂ L ( y , F ( x ) ) ∂ F ( x ) ] = y − F ( x ) −[\frac{∂L(y,F(x))}{∂F(x)}]=y-F(x) [F(x)L(y,F(x))]=yF(x)

即此时负梯度等于残差,拟合残差也就是拟合负梯度,但是当损失函数不是均方误差时,残差不一定等于负梯度。后续的原理均基于损失函数选用均方误差损失的假设上,即残差等于负梯度


GBDT的每棵树都是通过优化上一步模型的残差来生成。其目标是最小化损失函数 L ( y , F ( x ) ) L(y,F(x)) L(y,F(x)),其中 F ( x ) F(x) F(x) 是模型的预测值, y y y 是真实标签。对于第 m m m 棵树,模型的预测函数(模型更新策略)为:
F m ( x ) = F m − 1 ( x ) + ν ⋅ h m ( x ) F_m(x)=F_{m−1}(x)+ν⋅h_m(x) Fm(x)=Fm1(x)+νhm(x)

其中 v v v 是学习率(步长), h m ( x ) h_m(x) hm(x) 是通过拟合负梯度(梯度是损失函数相对于预测值的变化率)生成的回归树,负梯度的计算公式为:
g m ( x ) = − [ ∂ L ( y , F ( x ) ) ∂ F ( x ) ] F ( x ) = F m − 1 ( x ) g_m(x)=−[\frac{∂L(y,F(x))}{∂F(x)}]_{F(x)=F_{m−1}(x)} gm(x)=[F(x)L(y,F(x))]F(x)=Fm1(x)

其中, F ( x ) = F m − 1 ( x ) F(x)=F_{m−1}(x) F(x)=Fm1(x) 表示在计算梯度时,使用的是前 m − 1 m-1 m1 棵树的预测值。第 m m m 棵树的任务是拟和残差值(将每个样本的残差作为其目标变量,原始样本的特征变量不变),即新树 h m ( x ) h_m(x) hm(x) 的目标是尽量逼近残差 g m ( x ) g_m(x) gm(x),使得:
h m ( x ) ≈ g m ( x ) h_m(x)\approx g_{m}(x) hm(x)gm(x)

以便缩小预测值和真实值之间的差距。GBDT模型图示如下:
在这里插入图片描述

举个简单例子
假设某人的真实身高是180 cm,初始模型的预测值为170 cm,残差为180−170=10 cm。此时,新树会尝试拟合这个 10 cm 的残差,假设新树拟合出一个 8 cm 的输出,此时假设学习率 ν = 1 ν=1 ν=1,那么新的预测值为: 170   c m + 8   c m = 178   c m 170 cm+8 cm=178 cm 170 cm+8 cm=178 cm。此时,模型的预测已经从 170 cm 提升到了 178 cm,比之前更加接近真实的 180 cm。然后模型会继续拟合剩下的残差(180−178=2 cm),通过再加入一棵树继续调整预测值,直到模型预测的结果非常接近真实值。

4. XGBoost

XGBoost(Extreme Gradient Boosting,极端梯度提升)通过构建多个弱学习器来逐步提升模型的性能。每一棵新加入的树都用于拟合当前模型的残差,从而逐步减少误差并提高模型的预测能力,XGBoost模型图示如上图(GBDT模型图示)。XGBoost 核心思想与 GBDT 类似,但增加了正则化项,用于控制模型的复杂度,防止过拟合,并通过二阶导数进行优化。在 GBDT 和 XGBoost 中,使用增益(Gain,区别于ID3算法中的信息增益)作为衡量标准来选择特征(用作分裂特征或者构建有价值的特征子集),增益定义为分裂前后损失函数的减少量,增益越大,说明该特征及其分裂点在该节点上的分裂效果越好。具体步骤是:

  1. 对于每个特征,计算所有可能的分裂点。
  2. 对每个分裂点,计算分裂前后的损失,并找到能最大化增益的特征和分裂点。

XGBoost 中的增益公式为:
G a i n = 1 2 ( G l e f t 2 H l e f t + λ + G r i g h t 2 H r i g h t + λ − ( G l e f t + G r i g h t ) 2 H l e f t + H r i g h t + λ ) − γ \mathrm{Gain}=\frac{1}{2}\left(\frac{G_{\mathrm{left}}^2}{H_{\mathrm{left}}+\lambda}+\frac{G_{\mathrm{right}}^2}{H_{\mathrm{right}}+\lambda}-\frac{(G_{\mathrm{left}}+G_{\mathrm{right}})^2}{H_{\mathrm{left}}+H_{\mathrm{right}}+\lambda}\right)-\gamma Gain=21(Hleft+λGleft2+Hright+λGright2Hleft+Hright+λ(Gleft+Gright)2)γ

其中:
G l e f t G_{left} Gleft G r i g h t G_{right} Gright 是左右子节点的一阶导数和;
H l e f t H_{left} Hleft H r i g h t H_{right} Hright 是左右子节点的二阶导数和;
λ \lambda λ 是正则化项,用于限制模型的复杂度;
γ \gamma γ 控制分裂时的惩罚项,防止生成过多的叶节点。

在构建每棵树的过程中,XGBoost 会遍历所有特征及其所有可能的分裂点,计算每个分裂后的增益值,并选择增益最大的特征和分裂点。


XGBoost 的目标是最小化正则化的损失函数:
L ( θ ) = ∑ i = 1 n l ( y i , y ^ i ) + Ω ( f t ) L(\theta)=\sum_{i=1}^nl(y_i,\hat{y}_i)+\Omega(f_t) L(θ)=i=1nl(yi,y^i)+Ω(ft)

其中, l ( y i , y ^ i ) l(y_i,\hat{y}_i) l(yi,y^i) 是预测误差, Ω ( f t ) \Omega(f_t) Ω(ft)表示构建的第 t t t 棵决策树 f k f_k fk的正则化项,用来控制树的复杂度,通常定义为:
Ω ( f k ) = γ T + 1 2 λ ∑ j = 1 T w j 2 \Omega(f_k)=\gamma T+\frac{1}{2}\lambda\sum_{j=1}^Tw_j^2 Ω(fk)=γT+21λj=1Twj2

T T T 是树的叶节点数, w j w_j wj 是叶节点权重, γ \gamma γ λ \lambda λ 是超参数,分别控制树的复杂度和正则化强度。

XGBoost 通过一阶和二阶导数(即梯度和 Hessian 矩阵)来近似损失函数的变化,假设当前的预测为 y ^ i ( t ) \hat{y}_i^{(t)} y^i(t),对损失函数 L ( θ ) L(\theta) L(θ)进行二阶泰勒展开,可以得到如下公式:
L ( t ) ≈ ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t ( x i ) 2 ] + Ω ( f t ) L^{(t)}\approx\sum\limits_{i=1}^n\left[g_if_t(x_i)+\frac{1}{2}h_if_t(x_i)^2\right]+\Omega(f_t) L(t)i=1n[gift(xi)+21hift(xi)2]+Ω(ft)

其中
g i = ∂ l ( y i , y ^ i ( t ) ) ∂ y ^ i ( t ) g_i=\frac{∂l(y_i,\hat{y}_i^{(t)})}{∂\hat{y}_i^{(t)}} gi=y^i(t)l(yi,y^i(t))

是一阶导数,
h i = ∂ 2 l ( y i , y ^ i ( t ) ) ∂ ( y ^ i ( t ) ) 2 h_i=\frac{\partial^2l(y_i,\hat{y}_i^{(t)})}{\partial(\hat{y}_i^{(t)})^2} hi=(y^i(t))22l(yi,y^i(t))

是二阶导数,通过拟合一阶导数和二阶导数,XGBoost 能够快速找到最优分裂点并更新模型。 f t ( x i ) f_t(x_i) ft(xi) 表示在第 t t t 棵树 f t f_t ft 对输入特征 x i x_i xi 的预测值, y ^ i ( t ) \hat{y}_i^{(t)} y^i(t) 表示模型对样本 x i x_i xi 的最终预测值:
y ^ i ( t ) = y ^ 0 + ∑ t = 1 T η ⋅ f t ( x i ) \hat{y}_i^{(t)}=\hat{y}_0+\sum_{t=1}^T\eta\cdot f_t(x_i) y^i(t)=y^0+t=1Tηft(xi)

其中, y ^ 0 \hat{y}_0 y^0是模型的初始预测值,通常为训练数据的均值。XGBoost 引入了Shrinkage(收缩)技术,用于降低模型的复杂度并防止过拟合。Shrinkage 主要通过学习率来控制每棵树对模型的贡献量。每棵树的输出会乘以一个学习率 η \eta η,使得模型更新过程更加平滑,防止过拟合。每棵树的输出 f t ( x i ) f_t(x_i) ft(xi)并不是直接给出预测值,而是给出对之前预测值的调整量,即第 t t t 棵树输出的值是对之前预测值的修正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2213093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

U盘剪切文件丢失:原因、恢复方案与预防措施

一、U盘剪切文件的定义与特性 U盘剪切文件,是指用户在将文件从U盘移动到其他存储设备(如电脑硬盘、其他U盘等)时,通过操作系统的剪切功能,将文件从U盘中原位置删除,并暂存于系统剪贴板中,等待用…

双回路防静电监控仪安全保护生产全流程

在现代工业生产中,静电防护成为了确保安全生产的重要环节,尤其是在电子、化学等易燃易爆气体环境中。静电的存在不仅可能导致设备故障,还可能引发火灾或爆炸等严重事故。为了解决这一隐患,双回路防静电监控仪应运而生,…

java面试-每日随机(1014)

1、zk如何进行故障转移? 在 Zookeeper 集群中,当节点故障时,集群需要自动剔除故障节点并进行故障恢复,确保集群的高可用性和一致性。具体来说,当跟随者节点故障时,集群可以继续运行,但当领导节…

关于Keil Compiler Version 6 移植FreeRTOS-Kernel 出现 portmacro.h 错误 - __forceinline

问题现象 在移植FreeRTOS过程中,使用Keil ARM 编译器版本 6 编译代码时出现protmacro.h错误- __forceinline 相关信息: FreeRTOS版本:V11.1.0KEIL 编译器版本:Compiler Version 6Portable路径:RVDS/ARM_CM4F/ 问题解…

P327. 渔夫捕鱼算法问题

问题描述: A、B、C、D、E 这5个人合伙夜间捕鱼,凌晨时都已经疲惫不堪,于是各自在河边的树丛中找地方睡着了。第二天日上三竿时,A第一个醒来,他将鱼平分为5份,把多余的一条扔回河中,然后拿着自己…

雷池社区版如何使用静态资源的方式建立站点

介绍: SafeLine,中文名 “雷池”,是一款简单好用, 效果突出的 Web 应用防火墙(WAF),可以保护 Web 服务不受黑客攻击。 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、X…

Mac 窗口切换技巧:大幅提高效率的必备指南

在日常使用 Mac 电脑的过程中,高效地切换窗口可以极大地提升工作效率。无论是在多个文档之间快速切换,还是在不同的应用程序之间自如跳转,掌握一些实用的窗口切换技巧能让你的操作如鱼得水。下面就为大家详细介绍一些 Mac 窗口切换的技巧。 …

[Linux] 逐层深入理解文件系统 (2)—— 文件重定向

标题:[Linux] 逐层深入理解文件系统 (2)—— 文件重定向 个人主页水墨不写bug (图片来源于网络) 目录 一、文件的读取和写入 二、文件重定向的本质 1.手动模拟重定向的过程——把标准输出重定向到redir.txt 2.重定向…

支付宝开放平台-开发者社区——AI 日报「10 月 14 日」

1 大模型「强崩溃」!Meta新作:合成数据有「剧毒」,1%即成LLM杀手 新智元|阅读原文 1%合成数据,就能让模型瞬间崩溃!甚至,参数规模越大,模型崩溃越严重。Nature封面一篇论文证实&am…

Acwing 前缀与差分

1.一维前缀和 一维前缀和:S[i]a1a2a3a4…ai,要求a从a1开始,且S[0]0 前缀和的作用:给定一组序列数据,可以计算任意第l个数到第r个数的和,S[r]-S[l-1](这里就解释了为什么要求S[0]0,因…

电力电子技术(一)

变压器漏感对整流电路的影响:

Find My微型电磨机|苹果Find My技术与电磨机结合,智能防丢,全球定位

微型电磨机是一种多功能电动工具,主要用于打磨、抛光、雕刻、钻孔等多种作业。‌ 它由控制箱和电磨笔两部分组成,通过直流稳压电源供电,电磨笔以直流马达为驱动源,带动磨头进行高速旋转机械运动,配合不同材质、形状的磨…

制药企业MES与TMS的数据库改造如何兼顾安全与效率双提升

*本图由AI生成 在全球制造业加速数字化转型的浪潮中,一家来自中国的、年营业额超过200亿元的制药企业以其前瞻性的视角和果断的行动,成为该行业里进行国产化改造的先锋。通过实施数据库改造试点项目,该企业实现了其关键业务系统MES&#xff0…

请求的响应----状态码分为五大类(爬虫)

前言 一个爬虫的成功与否,在于你是否拿到了想要的数据;一个请求的成功与否,在于响应的状态码,它标明了当前请求下这个响应的结果,是好还是坏。上节课程学习了HTTPS和HTTP协议的各自优势,本节课程进入到请求…

C++: AVL树的实现

一.AVL树的旋转 AVL树是平衡搜索二叉树的一种。 平衡因子:节点右树的高度减左树的高度,AVL树规定平衡因子的绝对值小于2。若不在这个范围内,说明该树不平衡。 AVL树节点: struct AVLTreeNode {AVLTreeNode(const T& data …

【AI 新观察】“转人工!转人工!”——智能客服痛点与破局之路

在当今数字化时代,智能客服在电商等众多领域被广泛应用,然而,一句又一句“转人工!转人工!”却常常暴露出智能客服存在的痛点。一、智能客服之痛 1. 理解偏差引不满 智能客服在理解客户问题时,常常出现偏差…

代码随想录 -- 回溯 -- 解数独

37. 解数独 - 力扣(LeetCode) 思路: class Solution(object):def back(self,board):for i in range(len(board)):for j in range(len(board[0])):if board[i][j] ! .:continuefor k in range(1,10):if self.isValid(i,j,k,board):board[i][j…

为什么要做自动化测试

一、自动化测试 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。 个人认为,只要能服务于测试工作,能够帮助我们提升工作效率的,不管是所谓的自动化工具,还是简单的SQL 脚本、批处理脚本,还是自己编写…

10.13论文阅读

通过联合学习检测和描述关键点增强可变形局部特征 摘要 局部特征提取是计算机视觉中处理图像匹配和检索等关键任务的常用方法。大多数方法的核心理念是图像经历仿射变换,忽略了诸如非刚性形变等更复杂的效果。此外,针对非刚性对应的新兴工作仍然依赖于…

2024 年江苏省职业院校技能大赛“区块链技术应用” 赛项赛卷(样卷)运维题解析二

运维题 环境: ubuntu20 fisco 2.8.0 前言 准备两台机子,并且可以能相互pin通 192.168.19.133 [M1-A] 192.168.19.137 [M2-B] 子任务 1-2-3:区块链节点运维 基于已搭建的区块链系统与控制台,在机器(M1-A)上开展区块链群组与 节点的运维工作,具体内容如下: (1)基于…