相信小伙伴都用过XGBoost模型了,因为效果好,透明易解释等优点,XGBoost已经成为了特别流行的算法模型,小编今天也来介绍一下XGBoost调参。
一、XGBoost参数解释
XGBoost有三类参数:
1.通用参数:模型的宏观参数,控制了模型的宏观功能,比如booster、nthread、slience。
2.Booster参数:控制每一步booster tree或regression的生成。
3.学习目标参数:决定了学习目标,如损失函数或者评价函数等。
1.1通用函数:
1、booster[默认gbtree]
选择每次迭代的模型,有两种选择:
gbtree:基于树的模型进行提升
gbliner:基于线性模型进行提升
默认是gbtree,一般gbtree的效果远远胜于gbliner
2、silent[默认0]
当这个参数值为1时,静默模式开启,即表示不打印任何运行信息。一般这个参数就保持默认的0,因为这样能帮我们更好地理解模型。
3、nthread[默认值为最大可能的线程数]
这个参数用来进行多线程控制,应当输入系统的核数。默认是当前系统最大线程数。
4、num_pbuffer[系统自动设置]
5、num_feature[系统自动设置]
1.2booster参数
这里以gbtree为例进行介绍:
1、eta[默认0.3]
学习速率,用于控制树的权重,xgb模型在进行完每一轮迭代之后,会将叶子节点的分数乘上该系数,以便于削弱各棵树的影响,避免过拟合。
一般对eta进行调优时会结合迭代次数进行考虑。
如增加eta,就减少迭代次数。反之亦然。
2、min_child_weight[默认1]
表示最小叶子节点样本权重的和。可用于避免过拟合。当它的值较大时,可以避免模型学习到局部的特殊样本。但是如果这个值过高,会导致欠拟合。这个参数需要使用CV来调整。
3、max_depth[默认6]
表示树的最大深度。也是用来避免过拟合的。当它的值越大时,模型会学到更具体更局部的样本,可能会导致过拟合。需要使用CV函数来进行调优。 典型值:3-10
4、max_leaf_nodes
表示树上最大的节点或叶子的数量。可以替代max_depth的作用。因为如果生成的是二叉树,一个深度为n的树最多生成n2个叶子。
5、gamma[默认0]
在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。Gamma指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。这个参数的值和损失函数息息相关,所以是需要调整的。
6、max_delta_step[默认0]
这参数限制每棵树权重改变的最大步长。如果这个参数的值为0,那就意味着没有约束。如果它被赋予了某个正值,那么它会让这个算法更加保守。 通常,这个参数不需要设置。但是当各类别的样本十分不平衡时,它对逻辑回归是很有帮助的。这个参数一般用不到,但是你可以挖掘出来它更多的用处。
7、subsample[默认1]
这个参数控制对于每棵树,随机采样的比例。减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。 典型值:0.5-1
8、colsample_bytree[默认1]
和GBM里面的max_features参数类似。用来控制每棵随机采样的列数的占比(每一列是一个特征)。 典型值:0.5-1
9、colsample_bylevel[默认1]
用来控制树的每一级的每一次分裂,对列数的采样的占比。我个人一般不太用这个参数,因为subsample参数和colsample_bytree参数可以起到相同的作用。但是如果感兴趣,可以挖掘这个参数更多的用处。
10、lambda[默认1]
权重的L2正则化项。(和Ridgeregression类似)。 这个参数是用来控制XGBoost的正则化部分的。虽然大部分数据科学家很少用到这个参数,但是这个参数在减少过拟合上还是可以挖掘出更多用处的。
11、alpha[默认1]
权重的L1正则化项。(和Lassoregression类似)。 可以应用在很高维度的情况下,使得算法的速度更快。
12、scale_pos_weight[默认1]
在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。
1.3学习任务参数
这个参数用来控制理想的优化目标和每一步结果的度量方法。
1、objective[默认reg:linear]
这个参数定义需要被最小化的损失函数。最常用的值有:
binary:logistic
binary:logitraw
2、eval_metric[默认值取决于objective参数的取值]
评价模型的指标,主要是对验证集进行评价。对于回归问题,默认值是rmse,对于分类问题,默认值是error。典型值有:
rmse均方根误差
mae 平均绝对误差
logloss负对数似然函数值
error二分类错误率(阈值为0.5)
merror多分类错误率
mlogloss多分类logloss损失函数
auc曲线下面积
3、seed(默认0)
随机数的种子 设置它可以复现随机数据的结果,也可以用于调整参数。
二、XGBoost调参示例
以下主要用网格搜索和随机搜索做示例:
原始数据集还是用小编上传在github上的数据集。
本篇文章使用CV进行调参,
首先定义一个XGBoost CV 函数, 它可以建立xgb模型并可以进行交叉验证。
接下来就开始进行调参了:
1. 选择较高的学习速率(learningrate)。一般情况下,学习速率的值为0.1。但是,对于不同的问题,理想的学习速率有时候会在0.05到0.3之间波动。选择对应于此学习速率的理想决策树数量。
2. 对于给定的学习速率和决策树数量,进行决策树特定参数调优(max_depth, min_child_weight, gamma, subsample, colsample_bytree)。在确定一棵树的过程中,我们可以选择不同的参数。
3.xgboost的正则化参数的调优。(lambda, alpha)。这些参数可以降低模型的复杂度,从而提高模型的表现。
4. 降低学习速率,确定理想参数。
未完待续。。。
谢谢大家返回搜狐,查看更多
责任编辑:
20201203
max_depth 和 max_leaf_nodes
二者可以替代,只需设置其中一个就可以了
gamma:在最大深度或者最大结点数量之内 如果分裂后损失函数的值下降了,就会分裂这个节点
max_delta_step:赋予正值 意味着 给了其取最大值的限制 所以说保守
subsample:这个参数控制对于每棵树,随机采样的比例 是对样本采样
colsample_bytree:和GBM里面的max_features参数类似。用来控制每棵随机采样的列数的占比
alpha[默认1]
权重的L1正则化项。(和Lassoregression类似)。 可以应用在很高维度的情况下,使得算法的速度更快。
scale_pos_weight[默认1]
在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。