万字总结XGBoost原理、核心参数以及调优思路(上篇)

news2024/9/17 8:47:46

万字总结XGBoost原理、核心参数以及调优思路(上篇)

在数据科学领域,XGBoost以其卓越的性能和灵活性,成为了众多机器学习算法中的佼佼者。作为一种梯度提升框架,XGBoost通过构建决策树的集合来最小化一个可微分的损失函数,广泛应用于分类、回归等任务。本文将万字总结XGBoost的深层原理、关键核心参数,以及实用的调优策略。从算法基础到模型部署,我们将深入探讨XGBoost的每一个环节,为读者提供全面的指导和深入的洞见。无论您是希望提升模型性能的数据科学家,还是对XGBoost感兴趣的学习者,本文都将是您理解和掌握这一强大工具的宝贵资源。让我们启程,深入探索XGBoost的奥秘。

文章目录

  • 万字总结XGBoost原理、核心参数以及调优思路(上篇)
  • 一、XGBoost的基础思想与实现
    • 1 XGBoost VS GBDT
    • 2 XGBoost回归的sklearnAPI
    • 3 XGBoost回归的原生代码实现(相比SklearnAPI运行速度可能更快)
    • 4 XGBoost分类代码实现
  • 二、XGBoost的参数
    • 1 迭代过程
    • 2 XGBoost的弱评估器
    • 3 dart树和提前停止
  • 总结


一、XGBoost的基础思想与实现

1 XGBoost VS GBDT

极限提升树XGBoost(Extreme Gradient Boosting,XGB,发音/æks-g-boost/)是基于梯度提升树GBDT全面升级的新一代提升算法,也是提升家族中最富盛名、最灵活、最被机器学习竞赛所青睐的算法。不同于其他算法,XGBoost是一个以提升树为核心的算法系统,它覆盖了至少3+建树流程、10+损失函数,可以实现各种类型的梯度提升树,灵活性无与伦比。同时,XGBoost天生被设计成支持巨量数据,因此可以自由接入GPU/分布式/数据库等系统、还创新了众多工程上对传统提升算法进行加速的新方法。可以说,XGBoost是21世纪中Boosting算法的又一个里程碑,它开创了后GBDT时代中Boosting算法的新辉煌。

作为Boosting算法,XGBoost中自然包含Boosting三要素:

  • 损失函数:用以衡量模型预测结果与真实结果的差异。
  • 弱评估器 :(一般为)决策树,不同的boosting算法使用不同的建树过程。
  • 综合集成结果:即集成算法具体如何输出集成结果

并且XGBoost同样遵循Boosting算法建模的基本流程
在这里插入图片描述
但相比GBDT,XGBoost不再准求损失函数的最小值,而是追求目标函数的最小值(这也是XGBoost与GBDT的最大区别)
欢迎关注我的公众号~XGBoost关键优化

2 XGBoost回归的sklearnAPI

XGBoost自带sklearn接口(sklearn API),通过这个接口,可以使用跟sklearn代码一样的方式来实现xgboost,即可以通过fit和predict等接口来执行训练预测过程,也可以调用属性比如coef_等。
图片

其中XGBRF的两个类是以XGBoost方式建树、但以bagging方式构建森林的类,通常只有在我们使用普通随机森林效果不佳、但又不希望使用Boosting的时候使用。除非发现必须使用Bagging算法而普通sklearn运行出来的随机森林效果又不好,才考虑使用。XGBoost与GBDT一样,在多分类问题中计算效率较差,所以一般用于回归问题中。

欢迎关注我的公众号~XGBoost sklearnAPI建模

3 XGBoost回归的原生代码实现(相比SklearnAPI运行速度可能更快)

XGBoost的原生代码与sklearn代码有很大的不同。首先,原生代码必须使用XGBoost自定义的数据结构DMatrix,这一数据结构能够保证xgboost算法运行更快,并且能够自然迁移到GPU上运行(在GPU上运行列表、数组、Dataframe都会报错),类似于列表、数组、Dataframe等结构都不能用于原生代码,因此使用原生代码的第一步就是要更换数据结构。
在这里插入图片描述
当设置好数据结构后,一般需要以字典形式设置参数。XGBoost也可以接受像sklearn一样,将所有参数都写在训练所用的类当中,然而由于xgboost的参数列表过长、参数类型过多,直接将所有参数混写在训练模型的类中会显得代码冗长且混乱,因此往往会使用字典单独呈现参数。准备好参数列表后,使用xgboost中自带的方法xgb.train(不带有评估的能力,不像sklearn中可以输出score的评估指标)或xgb.cv(交叉验证会直接返回评估指标)进行训练,训练完毕后,可以使用predict方法对结果进行预测。虽然xgboost原生代码库所使用的数据结构是DMatrix,但在预测时输出的数据结构却是普通的数组,因此可以直接使用sklearn中的评估指标,或者python编写的评估指标对模型进行评估。
在这里插入图片描述
方法xgb.train和xgb.cv的第一个参数params就是需要使用字典自定义的参数列表,第二个参数dtrain就是DMatrix结构的训练数据,第三个参数num_boost_round其实就等同于sklearn中的n_estimators,表示总共建立多少棵提升树,也就是建模过程中的迭代次数。
欢迎关注我的公众号~XGBoost 原生API建模

4 XGBoost分类代码实现

XGBoost默认会实现回归算法,因此在执行分类的时候,需要主动声明算法的类型。xgboost是通过当前算法所使用的损失函数来判断任务类型的,即是通过在params中填写的objective参数来判断任务类型。当不再执行回归任务时,模型的评估指标也会发生变化,因此xgboost分类所需要的参数会更多。objective参数中可以输入数十种不同的选项,常见的有:

  • 回归任务

    • reg:squarederror:平方损失,即1/2(y-y‘)^2其中1/2是为了计算简便(默认值)
    • reg:squaredlogerror:平方对数损失,即1/2[𝑙𝑜𝑔(𝑦+1)−𝑙𝑜𝑔(𝑦+1)]2,其中1/2是为了计算简便(含义和平方损失高度相近,只不过是把非常巨大的平方损失转换为数字比较小的对数平方损失,一般不会修改回归任务的默认损失函数,除非发现默认损失函数存在严重问题,如特别不稳定等等)
  • 分类任务

    • binary:logistic:二分类交叉熵损失,使用该损失时predict接口输出概率。(只有一列,一般是类别1的概率)。

    • binary:logitraw:二分类交叉熵损失,使用该损失时predict接口输出执行sigmoid变化之前的值。

    • multi:softmax:多分类交叉熵损失,使用该损失时predict接口输出具体的类别。

    • multi:softprob:多分类交叉熵,适用该损失时predict接口输出每个样本每个类别下的概率。

      注意:上述不同的损失函数会影响predict的输出,但却不会影响交叉验证方法xgb.cv的输出(只要是回归一律输出RMSE,只要是分类一律输出交叉熵损失,要改评估指标的话需要单独填写)。当不填写任何内容时,参数objective的默认值为reg:squarederror。

欢迎关注我的公众号~XGBoost 原生API分类问题建模

二、XGBoost的参数

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

1 迭代过程

欢迎关注我的公众号~XGBoost 迭代过程相关参数

2 XGBoost的弱评估器

欢迎关注我的公众号~XGBoost 弱评估器相关参数

3 dart树和提前停止

欢迎关注我的公众号~XGBoost dart树和提前停止相关参数


总结

在这里插入图片描述

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

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

相关文章

简洁易用,快速制作高品质产品册的工具

在数字化时代,高效制作高品质产品册的需求日益增长。市场上涌现出众多声称能够帮助快速制作产品册的工具,但真正能兼顾简洁易用和品质的却寥寥无几。 ​这款工具名为“FLBOOK”,它凭借其强大的功能和简单易用的操作界面,赢得了众多…

深入理解FFmpeg--libavformat接口使用(一)

libavformat(lavf)是一个用于处理各种媒体容器格式的库。它的主要两个目的是去复用(即将媒体文件拆分为组件流)和复用的反向过程(以指定的容器格式写入提供的数据)。它还有一个I/O模块,支持多种…

自动化回复信息工具的开发分享!

在当今信息爆炸的时代,无论是个人还是企业,都面临着大量的信息处理和回复工作,为了提高效率,自动化回复信息工具变得越来越重要。 本文旨在分享一个简单但实用的自动化回复信息工具的五段源代码开发过程,帮助读者理解…

Datawhale 2024 年 AI 夏令营第二期——电力需求预测挑战赛

#AI夏令营 #Datawhale #夏令营 1.赛事简介 随着全球经济的快速发展和城市化进程的加速,电力系统面临着越来越大的挑战。电力需求的准确预测对于电网的稳定运行、能源的有效管理以及可再生能源的整合至关重要。 2.赛事任务 给定多个房屋对应电力消耗历史N天的相关…

水库水电站泄洪预警系统解决方案

一、方案背景 水电站建立的初衷有两个,一是用于发电,二是用于调节水量,解决下游洪涝灾害。水电站在丰水期蓄水、枯水期泄洪,泄洪时产生的水流又急又大,对电站大坝及下游存在巨大危险。为了加强水电站工程安全管理&…

对比H100与4090:两者谁才是更好的GPU算力选择?

在进行深度学习和人工智能的应用时,挑选最合适的硬件工具对于模型的训练和推断任务显得尤为关键。尤其在大模型的训练上,英伟达4090或许并不是最合适的选项。进行训练任务时,通常要求有更大的显示存储容量、更宽的内存带宽以及更出色的计算性…

浅说背包问题(上)

背包问题 什么是背包问题背包的分类01背包思路一思路二思路三(重头戏)常规代码空间优化 例题讲解[NOIP2001 普及组] 装箱问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 最大约数和题目描述输入格式输出格式样例 #1样例输入 #1样例…

商品分类左右联动

1、先看效果 2、以hooks方法处理&#xff0c;方便复制使用&#xff0c;见代码 Good.vue文件 <script setup lang"ts" name"goods">import {onMounted, ref, nextTick} from "vue";import useProductScroll from "/utils/hooks/useP…

halcon序列化机制

可以结合halcon算子的.net程序进行面向对象的编程&#xff1a; 源码如下&#xff1a; 打开算子的.net程序&#xff1a; 将程序运用到C#中&#xff1a; halcondonet.dll源码解读 halcon与C#联合编程的demo halcon的序列化机制 采用二进制进行序列化保存和反序列化 步骤&#…

GigE Vision GVCP/GVSP

GIGE协议&#xff0c;全称Gigabit Ethernet Vision协议&#xff0c;是一种基于千兆以太网&#xff08;Gigabit Ethernet&#xff09;技术开发的相机接口标准&#xff0c;主要用于高速图像采集和处理。该协议通过以太网技术实现图像数据和控制信号的传输&#xff0c;具有低成本、…

【Conda】命令大全 + 包安装报错一招解决

conda常用命令总结 一、conda常用命令大全 命令用法命令获取版本号conda -V conda --version获取帮助conda -h conda --help获取环境相关命令的帮助conda env -h所有 --单词 都可以用 -单词首字母来代替比如 -version 可以用 -V来代替&#xff0c;只不过有的是大写…

float、double

按照这个规定&#xff0c;单精度浮点数&#xff08;float&#xff09;这个数据类型所占内存大小为4个字节&#xff0c;也就是32位&#xff0c;所以单精度浮点数也叫32位浮点数&#xff0c;它在内存或硬盘中要占用32个比特。 单精度浮点数的尾数部分用23位存储&#xff0c;加上默…

贝叶斯估计模型及 Stata 具体操作步骤

目录 一、引言 二、贝叶斯估计的理论原理 三、Stata 代码示例 四、结果解读与分析 一、引言 贝叶斯估计作为一种强大的统计推断方法&#xff0c;在结合先验信息和样本数据以获得更准确的参数估计方面具有显著优势。本文将深入探讨贝叶斯估计的理论原理&#xff0c;并通过 St…

汇聚荣做拼多多电商怎么样?

汇聚荣做拼多多电商怎么样?在当前电商平台竞争激烈的背景下&#xff0c;拼多多凭借其独特的商业模式和市场定位迅速崛起。对于想要加入拼多多的商家而言&#xff0c;了解平台的特点、优势及挑战是至关重要的。本文将深入分析加入拼多多电商的多个方面&#xff0c;帮助读者全面…

网站外链还有没有作用

前言 还记得“内容为王&#xff0c;外链为皇”这句话吗&#xff1f;在以前网站外链是网站优化中非常主要的环节。那时候做一个网站&#xff0c;只要不停的发外链&#xff0c;收录就不会差&#xff0c;于是大部分站长都使劲发外链。 有市场就有商场&#xff0c;大家都看到外链…

昇思25天学习打卡营第18天|MindNLP ChatGLM-6B StreamChat

MindNLP ChatGLM-6B StreamChat MindNLP ChatGLM-6B StreamChat是基于MindNLP框架和ChatGLM-6B模型实现的聊天应用&#xff0c;利用自然语言处理技术&#xff0c;实现与用户的自然语言交流。这样的应用可以广泛应用于智能客服、在线助理和社交聊天等场景。 在当前技术环境下&a…

大数据------JavaWeb------VueElement(完整知识点汇总)

Vue 定义 Vue是一套前端框架&#xff0c;可以免除原生JavaScript中的DOM操作&#xff0c;简化书写 之前所学的MyBatis框架是用来简化JDBC代码编写的&#xff1b;而Vue是前端框架&#xff0c;用来简化JavaScript代码编写的 在Axios与JSON综合案例的添加中有大量的DOM操作&#…

设备运维、教学直播...浅析远程控制在医疗专网环境下的应用

在医疗行业内&#xff0c;无论是高端的医疗设备&#xff0c;还是医疗机构使用的各种数字化系统&#xff0c;出于安全考虑往往都搭建在专网内网之中&#xff0c;无法直接与外网连接。在这种情况下&#xff0c;常规的远程控制变得很难接入到医疗业务中。 但另一方面&#xff0c;…

TP5 封装通用的微信服务类

1、安装依赖包 我们这里用的是 EasyWeChat EasyWeCha官网 https://www.easywechat.com/ 安装地址 https://github.com/easywechat/docs 相关文档 https://www.easywechat.com/docs/4.1/payment/index composer安装 $ composer require overtrue/wechat:~4.0 -vvv1、封装服务类 …

matlab R2016b安装cplex12.6,测试时cplex出现出现内部错误的解决方法

问题场景 网上搜索matlabyalmipcplex的安装教程&#xff0c;跟着步骤操作即可&#xff0c;假如都安装好了&#xff0c;在matlab中测试安装是否成功&#xff0c;出现以下问题&#xff1a; 1、matlab中设置路径中添加了yalmip和cplex路径&#xff0c;在命令窗口中输入yalmiptest…