机器学习:XGBoost模型——高效且强大的树形模型

        XGBoost(Extreme Gradient Boosting,极端梯度提升树)是一种强大的梯度提升算法,在现实中被广泛用于分类和回归任务。它通过集成多个简单的基学习器(通常是决策树)来构建一个强大的预测模型。

基本原理步骤

(一)XGBoost模型的加法模型

        Boosting 是一种集成学习方法,旨在通过将多个弱学习器(通常是决策树)结合起来,提高模型的预测性能。它的核心思想是,先训练一个弱模型,再根据该模型的错误预测来调整后续模型的训练过程,从而逐步减少预测误差。

         在XGBoost中,模型是通过加法形式来表示的。每一步,XGBoost都会将一个新的基学习器(通常是决策树)添加到模型中。假设在第 t 次迭代时,我们的模型是:

因此我们要构造初始模型, 初始模型的建立参考文章对应的部分:梯度提升树A(GBDT)

其中,\eta  是学习率,用来控制每棵树对最终预测结果的贡献,防止过拟合。

(三)定义目标函数

相对于BGDT,目标函数多了一个正则化项,XGBoost的目标函数为:

 L = \sum _{i=1}^{N}l(y_{i},F_{t}(x_{i}))+\Omega(h_{t})

其中,l(y_{i},F_{t}(x_{i}))为损失函数,\Omega(h_{t})为正则化项:

依据Boosting原理,我们知道:

当前模型的预测值 = 前一个模型的预测值 +  树的预测值(拟合的是前一个模型的误差),即:

 F_{t}(x_{i}) = F_{t-1}(x_{i}) + h_{t}(x_{i})

则有我们的目标函数可以化为:

L^{(t)} = \sum _{i=1}^{N}l(y_{i},F_{t-1}(x_{i}) + h_{t}(x_{i}))+\Omega(h_{t})

我们知道二阶泰勒展开式为:

将损失函数\sum _{i=1}^{N}l(y_{i},F_{t-1}(x_{i}) + h_{t}(x_{i}))与二阶泰勒展开式对比,把h_{t}(xi)看成\Delta x,我们可以将损失函数用二阶泰勒展开式近似,即:

对于每个样本 i ,我们是可以求出 g_{i} 和 h_{i} 的值的,需要我们计算出来并保存,以便在信息增益计算使用。

由于我们是最小化目标函数问题,我们忽略常数项l(y_{i},F_{t-1}(x_{i})),只保留一次项和二次项,则我们的目标函数最终也可以近似为:

L^{(t)} = \sum _{i=1}^{N}[g_{i}h_{t}(x_{i})+\frac{1}{2}h_{i}h_{t}(x_{i})^{2}]+\Omega(h_{t})

(三)训练树拟合残差

 近似增益(Gain)

 在训练树h_{t}(x_{i})时,每次我们做一个节点的分裂,增益可以用来衡量该分裂带来的损失减少。假设在节点的分裂中,当前节点 j 被分为两个子节点 L 和 R。此时的信息增益G计算公式为:

由于我们前面已经计算出 g_{i} 和 h_{i} ,我们可以很快地求出信息增益G,在每次分裂时,会选择能够最大化增益的分裂点(即增益最大化)。增益衡量了某一特定分裂带来的损失减少,增益越大,说明该分裂对优化目标函数的效果越好。

叶子节点权重的计算

在 XGBoost 中,\omega _{j} 是决策树中每个叶子节点的权重(划分节点的值),表示该叶子节点对最终预测值的贡献。给定一个叶子节点 j,令目标函数L 对 \omega _{j} 求偏导,令偏导 = 0 ,可以得到叶子节点权重 ​\omega _{j} :

即,\omega _{j} 的最佳值为上式。

         经过不断地分裂,最终可以训练出来一棵树h_{t}(x),可以用来h_{t}(x)的预测值来近似F_{t-1}(x)的残差,用这一近似残差乘以一个比重(学习率)来拟合F_{t-1}(x)的预测误差,使模型得到更新,即:

(四)最终模型

 经过 t 次迭代,我们得到最终模型:

F_{t}(x) = F_{0}(x) + \sum _{i=1}^{t} \eta h_{t}(x)

t 是一个待优化的超参数,要通过其他方法取得最优值。 

 

XGBoost的特点

        在传统 GBDT 中,每棵树的叶子节点的权重是通过拟合残差来计算的,通常是对每个叶子节点的输出值进行回归,目标是使得叶子节点的预测值最小化残差。XGBoost 引入了正则化,通过二阶泰勒展开加速优化并拟合树,在每次分裂时会计算信息增益,使效率得到极大提升,有效防止过拟合。

 XGBoost的优点

  1. 高效性和可扩展性
    XGBoost 提供了许多优化,能够在大规模数据上高效运行。它使用了并行化算法来加速训练过程,支持多线程,能有效利用多核处理器,提高了训练速度。

  2. 良好的性能
    XGBoost 具有很高的预测准确度,经常在多个机器学习竞赛中表现突出。它通过多个技术手段(如正则化、剪枝等)提高模型的泛化能力。

  3. 支持正则化
    XGBoost 支持 L1 和 L2 正则化(类似于线性模型中的 Lasso 和 Ridge 正则化),这有助于减少过拟合并提高模型的稳定性。

  4. 自动处理缺失值
    XGBoost 内部能够自动处理缺失值(NaN),不需要额外的数据预处理。

  5. 灵活性
    XGBoost 支持多种类型的目标函数(如回归、分类、排序等),并且可以自定义损失函数和评估指标,满足各种应用需求。

  6. 过拟合控制
    通过早停(early stopping)策略和正则化(L1 和 L2)来控制模型的复杂度,减少过拟合。

  7. 支持多种特征类型
    XGBoost 能处理各种类型的特征数据,包括类别型、数值型等,并且能够在数据稀疏的情况下表现优异。

  8. 可解释性
    虽然树模型本身较为复杂,但 XGBoost 提供了多种工具,如 SHAP 值(Shapley Additive Explanations),可以帮助解释模型的预测结果。

XGBosost的局限性

  1. 训练时间较长
    虽然 XGBoost 提供了加速训练的优化方法,但在非常大的数据集(尤其是样本数非常多,特征维度也很高)上,训练时间仍然可能很长。

  2. 内存消耗较大
    在处理大规模数据时,XGBoost 的内存消耗较高,尤其是在模型复杂或树的数量较多时,可能需要更多的内存。

  3. 模型调参复杂
    XGBoost 有很多的超参数需要调优,包括学习率、树的深度、正则化参数等,找到最佳的参数组合往往需要大量的实验和计算资源。

  4. 对于线性关系的处理不如线性模型
    对于线性关系比较强的任务,XGBoost 可能并不总是比线性回归模型表现更好,反而可能会更复杂,导致过拟合。此时,简单的线性模型可能会有更好的性能。

  5. 对噪声敏感
    尽管 XGBoost 对大多数实际问题表现良好,但它对于数据中的噪声较为敏感,特别是在样本量较少或特征与目标变量不相关的情况下,容易过拟合。

  6. 缺乏透明性
    尽管 XGBoost 提供了可解释性工具,但作为一种集成学习方法,XGBoost 的模型本身较为复杂,解释模型的整体决策可能不如单一模型(如逻辑回归或决策树)那样直观。

 XGBoost的适用场景

1. 分类问题

XGBoost 在二分类和多分类任务中表现优异,尤其在数据维度较高或者类别不均衡的情况下。它能够通过特征选择、正则化和模型集成来提高分类任务的性能。

  • 金融欺诈检测:例如,通过识别异常交易来检测信用卡欺诈。XGBoost 能有效处理不平衡的数据集,准确识别少数类别的样本(例如欺诈行为)。

  • 垃圾邮件分类:识别电子邮件是否为垃圾邮件。XGBoost 能够处理大规模文本数据,并提供高准确度的分类结果。

  • 医学诊断:例如,癌症检测、疾病预测等任务,XGBoost 可以帮助医生通过患者的体征数据做出准确的预测。

2. 回归问题

XGBoost 在回归任务中的表现也非常强大,尤其是在特征数量较多或数据噪声较大的情况下。通过迭代训练和损失函数优化,XGBoost 能够找到数据中最有效的预测模式。

  • 房价预测:例如,利用房屋的各种属性(如面积、位置、房龄等)预测房价。XGBoost 通过对特征的建模和调节可以获得准确的预测。

  • 需求预测:例如,在零售和电子商务中,预测商品需求。XGBoost 能根据历史数据和其他因素(如季节性、促销等)提供准确的预测。

  • 股市预测:在金融市场中,XGBoost 可用于股票价格预测、资产管理等任务,尤其擅长处理多种因素的复杂关系。

3. 排序问题

XGBoost 也可以应用于排序任务,尤其是在推荐系统中。通过学习不同特征的排序优先级,XGBoost 能提高排序的准确性。(至于为什么可以用于排序问题,有机会再深入了解)

  • 搜索引擎排名:例如,在搜索引擎中为用户提供更相关的搜索结果,XGBoost 可以根据查询词、用户历史行为等信息来优化搜索排名。

  • 推荐系统:XGBoost 可用于基于用户兴趣预测推荐的商品或服务,优化推荐的排序结果,提高用户体验。

4. 异常检测

XGBoost 在处理异常检测任务时非常有效,尤其是在数据稀疏或样本不平衡的情况下。通过建模正常数据的分布,XGBoost 可以帮助检测出偏离正常模式的异常数据。

  • 设备故障预测:例如,使用设备的传感器数据预测设备是否会发生故障。XGBoost 能帮助识别和预测可能的故障情况。

  • 网络安全:通过网络流量数据检测异常活动,如入侵检测、恶意攻击等。XGBoost 能有效识别出异常行为,提升安全性。

5. 大数据与高维度数据

XGBoost 在大规模数据集和高维度数据(例如,特征数非常大)下表现出色。它能通过有效的训练和并行化技术,在短时间内处理海量数据。

  • 广告点击率预测:在互联网广告中,XGBoost 能根据用户特征和广告特征预测点击率。它能够有效处理成千上万的特征和用户数据,得到高效且精准的预测。

6. 多类别和不平衡数据

XGBoost 在多类别分类问题和不平衡数据集上的表现也非常优秀。它能够通过调整损失函数、样本权重等方式,处理不平衡类别分布问题。

  • 疾病分类:在多类别疾病分类中,XGBoost 可以识别不同类型的疾病或症状。对于类别不平衡的情况,可以通过调整样本权重来提高模型的性能。

  • 信用评分:XGBoost 可用于多类别信用评分任务,帮助金融机构对不同信用等级的用户进行分类和风险评估。

#  文章内容来源于各渠道整理。若对大噶有帮助的话,希望点个赞支持一下叭!

#  文章如有错误,欢迎大噶指正!

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

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

相关文章

爬虫开发工具与环境搭建——开发工具介绍

第二章:爬虫开发工具与环境搭建 第一节 开发工具介绍 爬虫开发需要一些合适的工具和框架来高效地抓取网页数据。在这节中,我们将介绍常用的开发工具,帮助开发者快速搭建爬虫开发环境。 1. Python与爬虫框架选择 Python因其简洁、易学的语法…

python高级之面向对象编程

一、面向过程与面向对象 面向过程和面向对象都是一种编程方式,只不过再设计上有区别。 1、面向过程pop: 举例:孩子上学 1. 妈妈起床 2. 妈妈洗漱 3. 妈妈做饭 4. 妈妈把孩子叫起来 5. 孩子起床 6. 孩子洗漱 7. 孩子吃饭 8. 妈妈给孩子送学校…

通过Docker实现openGauss的快速容器化安装

容器安装 本章节主要介绍通过 Docker 安装 openGauss,方便 DevOps 用户的安装、配置和环境设置。 支持的架构和操作系统版本 x86-64 CentOS 7.6 ARM64 openEuler 20.03 LTS 配置准备 使用 buildDockerImage.sh 脚本构建 docker 镜像,buildDockerIm…

康谋分享 | 确保AD/ADAS系统的安全:避免数据泛滥的关键

为确保AD/ADAS系统的安全性,各大车企通常需要收集、处理和分析来自于摄像头、激光雷达等传感器的数据,以找出提高系统安全性和性能的方法。然而在数据收集过程中,不可避免地会出现大量无价值数据,造成数据泛滥的情况,进…

电工电子原理笔记

这一篇手记会记录我硬件开发过程中遇到的一些底层电学原理,并且结合实际场景作为“例题”(出于篇幅和保密考虑会进行部分简化)。 叠加定理 基本介绍 在线性电路中,任一支路的电流(或电压)可以看成是电路…

【赵渝强老师】MySQL InnoDB的段、区和页

MySQL的InnoDB存储引擎的逻辑存储结构和Oracle大致相同,所有数据都被逻辑地存放在一个空间中,我们称之为表空间(tablespace)。表空间又由段(segment)、区(extent)、页(pa…

Python 继承笔记

知识点: 1.has a 一个类中使用了另外一种自定义类的类型 student 使用computer book 2.类型 系统类型 str,int,float,list,tuple,dic,set 自定义类型 算是自定义的类,都可以将其当成一种类型 student是一种类型 sStudent() s是Student的类型 class Stud…

Vue3 -- 项目配置之husky【企业级项目配置保姆级教程4】

引言: eslint:代码规范校验prettier:代码格式化stylelint:CSS代码校验 上述三篇文章集成配置完成代码校验工具,当时需要每次手动的去执行命令才会格式化我们的代码。。如果有人没有格式化就提交了远程仓库&#xff0…

万字长文分析函数式编程

目录 一.认识函数式编程 一、函数式编程的定义 二、函数式编程的思想 三、函数式编程的特点 四、函数式编程的应用 二.Lambda表达式 三.Stream流 3.1 创建流对象 3.2 注意事项 3.3 Stream流的中间操作 filter map distinct sorted limit skip flatMap 3.4 St…

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (8) - 原生输入法

AWTK 在嵌入式平台使用内置的输入法,在移动设备上使用系统的原生输入法。在 AWTK-Android 和 AWTK-IOS 中,使用的是 SDL 封装之后的系统原生输入法。在 AWTK-HarmonyOS 中,要使用系统的原生输入法。需要实现 input_method 接口: 1…

【解决】Layout 下创建槽位后,执行 Image 同步槽位位置后表现错误的问题。

开发平台:Unity 6.0 编程语言:CSharp 编程平台:Visual Studio 2022   一、问题背景 | 开发库存系统 图1 位置同步失败问题 图2 位置正常同步效果表现 黑框 作用于 UnityEngine.UI.GridLayoutGruop,形成 4x6 布局,如…

【Jenkins实战】Windows安装服务启动失败

写此篇短文,望告诫后人。 如果你之前装过Jenkins,出于换域账号/本地帐号的原因想重新安装,你大概率会遇上一次Jenkins服务启动失败提示: Jenkins failed to start - Verify that you have sufficient privileges to start system…

免费,WPS Office教育考试专用版

WPS Office教育考试专用版,不仅满足了考试需求,更为教育信息化注入新动力。 https://pan.quark.cn/s/609ef85ae6d4

94个属于一区且接受医工交叉领域投稿的期刊汇总|个人观点·24-11-13

小罗碎碎念 继汇总病理AI的基础模型、病理组学&影像组学的公开数据集以后,我们再来盘一盘医工交叉领域有哪些热门期刊可以投稿。我会分区进行介绍,每个区则会进一步划分学科种类,方便大家选择适合自己的投稿期刊。 这期推文先分享大类属…

【插件】重复执行 pytest-repeat

安装 pip3 install pytest-repeat 用法 1.命令行 pytest --count num pytest --count 32.装饰器 pytest.mark.repeat(num) #num运行次数 pytest.mark.repeat(5)#执行结果如下:

el-table合并单元格之后,再进行隔行换色的且覆盖表格行鼠标移入的背景色的实现

el-table 中有现成的隔行换色功能,只要增加 stripe 属性即可。但是如果有单元格合并的话,这个属性就不可用了。这时候我们就需要动点小心思了。 基于相同字段进行合并 单元格合并:基于表头中的某一列,具有相同值的个数相加进行合…

【小白玩NAS】PVE硬盘直通

简介 在DAS架构中,硬盘(NvMe除外)通过硬盘控制器连接并由其管理。因此,如果将硬盘控制器直通到虚拟机,控制器下的所有硬盘也会间接直通至虚拟机。这样一来,虚拟机内会将这些硬盘视为物理磁盘,并…

IBM 开源的文档转化利器「GitHub 热点速览」

上周的热门开源项目,Star 数增长犹如坐上了火箭,一飞冲天。短短一周就飙升了 6k Star 的多格式文档解析和导出神器 Docling,支持库和命令行的使用方式。全新的可视化爬虫平台 Maxun,则在刚开源时便轻松斩获了 4k Star。而本地优先…

[2024最新] java八股文实用版(附带原理)---java集合篇

介绍一下常见的list实现类? ArrayList 线程不安全,内部是通过数组实现的,继承了AbstractList,实现了List,适合随机查找和遍历,不适合插入和删除。排列有序,可重复,当容量不够的时候…

windows工具 -- 使用rustdesk和云服务器自建远程桌面服务, 手机, PC, Mac, Linux远程桌面 (简洁明了)

目的 向日葵最先放弃了, todesk某些功能需要收费, 不想用了想要 自己搭建远程桌面 自己使用希望可以电脑 控制手机分辨率高一些 原理理解 ubuntu云服务器配置 够买好自己的云服务器, 安装 Ubuntu操作系统 点击下载 hbbr 和 hbbs 两个 deb文件: https://github.com/rustdesk/…