一、XGBoost的用法
流程:
代码案例:
二、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 )
使用哪种弱评估器。可以输入gbtree, gblinear或dart。输入的评估器不同,使用 的params参数也不同,每种评估器都有自 己的params列表。评估器必须于param参 数相匹配,否则报错。
gbtree:即是论文中主要讨论的树模型,推荐使用
gblinear:是线性模型,表现很差,接近一个LASSO
dart:Dropouts meet Multiple Additive Regression Trees,可译为抛弃提升树,在建树的过 程中会抛弃一部分树,比梯度提升树有更好的防过拟合功能。
②objective(重要)
(1)集成算法中的损失函数是可选的,要选用什么损失函数取决于我们希望解决什么问题,以及希望使用怎样的模型。比如说,如果我们的目标是进行回归预测,那我们可以选择调节后的均方误差RMSE作为我们的损失函数。如果我们是进行分类预测,那我们可 以选择错误率error或者对数损失log_loss。
(2)XGBoost的目标函数(Obj)被写作:传统损失函数 + 模型复杂度。
使用参数“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。同时, 还是我们让树停止生长的重要参数。
⑤剪枝的参数(减轻过拟合带来的影响)
以下是几个影响比较大,常用于剪枝的参数
ps:在XGBoost中,最大深度的功能与 参数 相似,因此如果先调节了 ,则最大深度可能无法展示出巨大的效果。当然,如果先调整了最大深度,则 也有 可能无法显示明显的效果。
调参过程:通常当我们获得了一个数据集后,我们先使用网格搜索找出比较合适的n_estimators和eta组合,然后使用gamma或 者max_depth观察模型处于什么样的状态(过拟合还是欠拟合,处于方差-偏差图像的左边还是右边?),最后再决 定是否要进行剪枝。
3、其他参数
①xgboost中回归模型的默认模型评估指标参数:eval_metric
该参数的使用是为了我们方便使用xgboost.cv(交叉验证)
指标 | 含义 |
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实战的案例,分享给大家!最后,如果这篇文章对小伙伴有所帮助,别忘了点赞、关注支持一波哦~大家一起进步!!!