【机器学习】XGBoost的用法和参数解释

2024-09-07 15:20

本文主要是介绍【机器学习】XGBoost的用法和参数解释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、XGBoost的用法

流程:

5f587abaafa94cd8a490cc8fa8d88a08.png

代码案例:

84dacc597b4b4d8a9cd5cd2766f58f0b.png

二、XGBoost的几大参数

1、一般参数,用于集成算法本身

n_estimators

集成算法通过在数据上构建多个弱 评估器,汇总所有弱评估器的建模结果,以获取比单个模型更好的回归或分类表现。sklearn中n_estimators表示弱评估器的个数,在xgboost中用num_boost_round表示,是xgboost.train()中对应第3个参数。这个参数非常强大,常常能够一次性将模型调整到极限, 在XGBoost中它也是如此。

②verbosity 

训练中是否打印每次训练的结果

verbosity , default = 0, 取值范围[0,3] 0 (silent), 1 (warning), 2 (info), 3 (debug).
#设置 verbosity = 3,会打印详细的训练过程

③subsample

随机抽样的时候抽取的样本比例,范围(0,1],默认是1

采样会减少样本数量,而从学习曲线 来看样本数量越少模型的过拟合会越严重,因为对模型来说,数据量越少模型学习越容易,学到的规则也会越具体越 不适用于测试样本。所以subsample参数通常是在样本量本身很大的时候来调整和使用。

④eta

集成中的学习率,又称为步长 以控制迭代速率,常用于防止过拟合,默认0.3,取值范围[0,1]

eta是迭代决策树时的步长(shrinkage),又叫做学习率(learning rate)。和逻辑回归中的 类似, 越大,迭代的速度越快,算法的极限很快被达到,有可能无法收敛到真正的最佳。 越小,越有可能找到更精确的最佳值,更多的空间被留给了后面建立的树,但迭代速度会比较缓慢

2、弱评估器参数

①booster(XGBoost中为xgb_model )

使用哪种弱评估器。可以输入gbtreegblineardart。输入的评估器不同,使用 的params参数也不同,每种评估器都有自 己的params列表。评估器必须于param参 数相匹配,否则报错。

gbtree:即是论文中主要讨论的树模型,推荐使用
gblinear:是线性模型,表现很差,接近一个LASSO
dart:Dropouts meet Multiple Additive Regression Trees,可译为抛弃提升树,在建树的过 程中会抛弃一部分树,比梯度提升树有更好的防过拟合功能。

②objective(重要)

(1)集成算法中的损失函数是可选的,要选用什么损失函数取决于我们希望解决什么问题,以及希望使用怎样的模型。比如说,如果我们的目标是进行回归预测,那我们可以选择调节后的均方误差RMSE作为我们的损失函数。如果我们是进行分类预测,那我们可 以选择错误率error或者对数损失log_loss。

(2)XGBoost的目标函数(Obj)被写作:传统损失函数 + 模型复杂度。

3ccaf9d2a9044ce5b166fe13d25e89ea.png

使用参数“objective"来确定我们目标函数的第一部分中的 ,也就是衡量损失的部分

(3)常见的损失函数(***)

xgb.train():objective: 默认reg:squarederror(XGBoost)
xgb.XGBRegressor() :objective: 默认reg:squarederror(Sklearn库)
xgb.XGBClassifier() : objective: 默认binary:logistic(Sklearn库)

输入选用的损失函数
reg:linear使用线性回归的损失函数,均方误差,回归时使用
binary:logistic使用逻辑回归的损失函数,对数损失log_loss,二分类时使用,,输出为概率
binary:hinge使用支持向量机的损失函数,Hinge Loss,二分类时使用
multi:softmax使用softmax损失函数,多分类时使用,同时需要设置参数num_class(类别个 数),返回预测的类别(不是概率)

PS:

如果不指定具体使用哪种objective,函数会根据是回归问题还是分类问题,默认选择相应的损失函数;
如果自行设定objective的类型,其类型需与业务的类型(回归 or 分类)相对应,否则容易报错。

③参数化决策树 :参数alpha,lambda

L1正则项的参数 alpha,默认0,取值范围[0, +∞]

L2正则项的参数 lambda,默认1,取值范围[0, +∞]

④重要参数gamma

复杂度的惩罚项:gamma,默认0取值范围[0, +∞]

实践证明, gamma是对梯度提升树影响最大 的参数之一,其效果丝毫不逊色于n_estimators和防止过拟合的神器max_depth。同时, 还是我们让树停止生长的重要参数。

e3b71a45fff84c70b8f22793f8e2c7c7.png

⑤剪枝的参数(减轻过拟合带来的影响)

以下是几个影响比较大,常用于剪枝的参数

7b28319add3c4eabb064ba62e2b0788a.png

ps:在XGBoost中,最大深度的功能与 参数 相似,因此如果先调节了 ,则最大深度可能无法展示出巨大的效果。当然,如果先调整了最大深度,则 也有 可能无法显示明显的效果。

调参过程:通常当我们获得了一个数据集后,我们先使用网格搜索找出比较合适的n_estimators和eta组合,然后使用gamma或 者max_depth观察模型处于什么样的状态(过拟合还是欠拟合,处于方差-偏差图像的左边还是右边?),最后再决 定是否要进行剪枝

3、其他参数

①xgboost中回归模型的默认模型评估指标参数:eval_metric

该参数的使用是为了我们方便使用xgboost.cv(交叉验证

09271c21ea934ad0b5ba3feb29ae2e35.png

指标含义
rmse回归用,调整后的均方误差
mae回归用,绝对平均误差
logloss二分类用,对数损失
mlogloss多分类用,对数损失
error分类用,分类误差,等于1-准确率
auc分类用,AUC面积
  

②调节样本不平衡的参数scale_pos_weight

控制正负样本比例,表示为负/正样本比例 在样本不平衡问题中使用:scale_pos_weight,默认1

③更多计算资源:n_jobs

nthread和n_jobs都是算法运行所使用的线程,与sklearn中规则一样,输入整数表示使用的线程,输入-1表示使用计 算机全部的计算资源。如果我们的数据量很大,则我们可能需要这个参数来为我们调用更多线程。

④降低学习难度:base_score

base_score是一个比较容易被混淆的参数,它被叫做全局偏差,在分类问题中,它是我们希望关注的分类的先验概 率。通常我们不会使用这个参数,但对于严重的样本不均衡问 题,设置一个正确的base_score取值是很有必要的。

⑤生成树的随机模式:random_state

对于那些本质上是随机的过程,我们有必要控制随机的状态,这样才能重复的展现相同的结果的时候就需要设置我们的random_state为一个固定值。

⑥自动处理缺失值:missing

XGBoost被设计成是能够自动处理缺失值的模型,这个设计的初衷其实是为了让XGBoost能够处理稀疏矩阵。

三、总结

  这里只是简单介绍了 XGBoost的简单用法和一些参数的含义,方便大家入门学习,而XGBoost本身的运用与实践是很广泛的,后期我也会出一些XGBoost实战的案例,分享给大家!最后,如果这篇文章对小伙伴有所帮助,别忘了点赞、关注支持一波哦~大家一起进步!!!

 

这篇关于【机器学习】XGBoost的用法和参数解释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145427

相关文章

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模

mysql中的group by高级用法

《mysql中的groupby高级用法》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,下面给大家介绍mysql中的groupby用法... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

Java中Scanner的用法示例小结

《Java中Scanner的用法示例小结》有时候我们在编写代码的时候可能会使用输入和输出,那Java也有自己的输入和输出,今天我们来探究一下,对JavaScanner用法相关知识感兴趣的朋友一起看看吧... 目录前言一 输出二 输入Scanner的使用多组输入三 综合练习:猜数字游戏猜数字前言有时候我们在

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N