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

机器学习: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.kler.cn/a/397872.html

相关文章:

  • vue+svg圆形进度条组件
  • 什么是Spring Boot Actuator
  • 职场汇报技巧:选择合适的汇报形式与提供数据依据
  • 网络学习第四篇
  • 大三学生实习面试经历(1)
  • 整数唯一分解定理
  • 安全见闻4
  • 《C语言程序设计现代方法》note-5 数组
  • 【开源免费】基于SpringBoot+Vue.JS卫生健康系统(JAVA毕业设计)
  • 【C++】OGRE:面向对象图形渲染库配置与示例
  • 2024山西省网络建设运维第十八届职业院校技能大赛解析答案(5. nginx 和 tomcat 服务)
  • 模型压缩相关技术概念澄清(量化/剪枝/知识蒸馏)
  • Pyhon基础数据结构(列表)【蓝桥杯】
  • 永磁同步电机负载估计--降阶龙贝格观测器
  • openai 论文Scaling Laws for Neural Language Models学习
  • 【项目日记】仿mudou的高并发服务器 --- 整体框架搭建 ,实现时间轮模块
  • 【Rust设计模式之新类型模式】
  • Android加载pdf
  • 鸿蒙HarmonyOS 地图不显示解决方案
  • ssm105基于JAVAEE技术校园车辆管理系统+jsp(论文+源码)_kaic
  • 力扣-Mysql-3278. 寻找数据科学家职位的候选人 II(中等)
  • 交易术语汇总(Technical Trading Dictionary)
  • FastAdmin 部署二开项目遇到 “No input file specified“ 的解决方案
  • 整数唯一分解定理
  • (干货)Jenkins使用kubernetes插件连接k8s的认证方式
  • MySQL技巧之跨服务器数据查询:高级篇-先调用A数据库的MySql存储过程再复制到B数据库的表中