【机器学习】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

相关文章

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

oracle中exists和not exists用法举例详解

《oracle中exists和notexists用法举例详解》:本文主要介绍oracle中exists和notexists用法的相关资料,EXISTS用于检测子查询是否返回任何行,而NOTE... 目录基本概念:举例语法pub_name总结 exists (sql 返回结果集为真)not exists (s

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

详解Spring Boot接收参数的19种方式

《详解SpringBoot接收参数的19种方式》SpringBoot提供了多种注解来接收不同类型的参数,本文给大家介绍SpringBoot接收参数的19种方式,感兴趣的朋友跟随小编一起看看吧... 目录SpringBoot接受参数相关@PathVariable注解@RequestHeader注解@Reque

Springboot中Jackson用法详解

《Springboot中Jackson用法详解》Springboot自带默认json解析Jackson,可以在不引入其他json解析包情况下,解析json字段,下面我们就来聊聊Springboot中J... 目录前言Jackson用法将对象解析为json字符串将json解析为对象将json文件转换为json

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

spring 参数校验Validation示例详解

《spring参数校验Validation示例详解》Spring提供了Validation工具类来实现对客户端传来的请求参数的有效校验,本文给大家介绍spring参数校验Validation示例详... 目录前言一、Validation常见的校验注解二、Validation的简单应用三、分组校验四、自定义校

SpringBoot中Get请求和POST请求接收参数示例详解

《SpringBoot中Get请求和POST请求接收参数示例详解》文章详细介绍了SpringBoot中Get请求和POST请求的参数接收方式,包括方法形参接收参数、实体类接收参数、HttpServle... 目录1、Get请求1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert