【机器学习】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实战的案例,分享给大家!最后,如果这篇文章对小伙伴有所帮助,别忘了点赞、关注支持一波哦~大家一起进步!!!

 

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XGBoost是一种用于机器学习的强大算法,它可以在分类和回归任务中获得很好的性能。但是,为了达到最佳性能,需要对其超参数进行调整。 以下是XGBoost中需要调整的一些重要超参数: 1. n_estimators:决定树的数量,也就是模型中的基本学习者数量。 2. max_depth:树的最大深度,过高的深度可能导致过度拟合。 3. learning_rate:控制每个基本学习器的权重更新步长。 4. subsample:每次训练模型时用于构建树的样本比例。 5. colsample_bytree:每次训练模型时用于构建树的特征比例。 6. gamma:控制当树分裂时,节点的最小损失减少量。 7. reg_alpha:L1正则化参数,用于控制模型的复杂度。 8. reg_lambda:L2正则化参数,用于控制模型的复杂度。 下面是一个简单的XGBoost参数调优示例: ```python import xgboost as xgb from sklearn.datasets import load_digits from sklearn.model_selection import GridSearchCV # 加载数据集 digits = load_digits() X, y = digits.data, digits.target # 定义参数范围 param_grid = {'n_estimators': [50, 100, 150], 'max_depth': [2, 3, 4], 'learning_rate': [0.01, 0.1, 0.5], 'subsample': [0.6, 0.8, 1.0], 'colsample_bytree': [0.6, 0.8, 1.0], 'gamma': [0, 0.1, 0.2], 'reg_alpha': [0, 0.1, 1], 'reg_lambda': [0, 0.1, 1]} # 定义分类器 xgb_model = xgb.XGBClassifier(objective='multi:softmax', num_class=10) # 定义网格搜索 grid_search = GridSearchCV(estimator=xgb_model, param_grid=param_grid, cv=5, n_jobs=-1) # 进行参数调优 grid_search.fit(X, y) # 输出最佳参数 print("Best parameters found: ", grid_search.best_params_) ``` 在上面的代码中,我们使用了网格搜索来寻找最佳超参数。我们定义了一个参数范围字典,包含了所有需要调整的超参数及其可能的值。然后,我们定义了一个XGBoost分类器,并将其作为估计器传递给网格搜索。最后,我们调用fit()方法来运行网格搜索,找到最佳参数组合。 总的来说,XGBoost是一种非常强大的机器学习算法,但是需要调整一些重要的超参数才能实现最佳性能。通过调整这些超参数,可以使XGBoost分类和回归任务中获得更好的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值