本文转自XGBoost-Python完全调参指南-参数解释篇。对XGBoost有需要小伙伴可以参看。并在此基础上,添加了一些内容。
在analytics vidhya上看到一篇《Complete Guide to Parameter Tuning in XGBoost in Python》,写的很好。因此打算翻译一下这篇文章,也让自己有更深的印象。具体内容主要翻译文章的关键意思。
这篇文章按照原文的分节,共分为三个部分,其中本章介绍第一部分。
1、简介与XGboost
2、参数理解
3、参数调优
关于XGBoost的参数,发现已经有比较完善的翻译了。故本文转载其内容,并作了一些修改与拓展。
原文链接见:http://blog.csdn.NET/zc02051126/article/details/46711047
XGBoost参数
XGBoost的参数可以分为三种类型:通用参数、booster参数以及学习目标参数
General parameters:参数控制在提升(boosting)过程中使用哪种booster,常用的booster有树模型(gbtree)和线性模型(gblinear model)。
Booster parameters:这取决于使用哪种booster。
Learning Task parameters:控制学习的场景,例如在回归问题中会使用不同的参数控制排序。
除了以上参数还可能有其它参数,在命令行中使用
General Parameters
- booster [default=gbtree]
有两种模型可以选择gbtree和gblinear。gbtree使用基于树的模型进行提升计算,gblinear使用线性模型进行提升计算。缺省值为gbtree - silent [default=0]
取0时表示打印出运行时信息,取1时表示以缄默方式运行,不打印运行时的信息。缺省值为0
建议取0,过程中的输出数据有助于理解模型以及调参。另外实际上我设置其为1也通常无法缄默运行。。 - nthread [default to maximum number of threads available if not set]
XGBoost运行时的线程数。缺省值(-1)是当前系统可以获得的最大线程数
如果你希望使用CPU所有的核,建议不设置这个参数,算法将自动检测并获得最大线程 - num_feature [set automatically by xgboost, no need to be set by user]
boosting过程中用到的特征维数,设置为特征个数。XGBoost会自动设置,不需要手工设置
Booster Parameters
From xgboost-unity, the bst: prefix is no longer needed for booster parameters. Parameter with or without bst: prefix will be equivalent(i.e. both bst:eta and eta will be valid parameter setting) .
Parameter for Tree Booster
- eta [default=0.3]
为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。 eta通过缩减特征的权重使提升计算过程更加保守。缺省值为0.3。这个值越小,说明对防止过拟合的要求越高。因此:eta和n_estimators是成反比的:即当n_estimators的值很大的时候,eta应该越小。
取值范围为:[0,1]
通常最后设置eta为0.01~0.2 - gamma [default=0]
节点分裂所需的最小损失函数下降值
range: [0,∞]
模型在默认情况下,对于一个节点的划分只有在其loss function 得到结果大于0的情况下才进行,而gamma 给定了所需的最低loss function的值
gamma值使得算法更保守,且其值依赖于loss function ,在模型中应该进行调参(某种程度上,类似于前剪枝(front-pruning))。 - max_depth [default=6]
树的最大深度。缺省值为6
取值范围为:[1,∞]
指树的最大深度
树的深度越大,则对数据的拟合程度越高(过拟合程度也越高)。即该参数也是控制过拟合
建议通过交叉验证(xgb.cv ) 进行调参
通常取值:3-10 - min_child_weight [default=1]
叶子节点中最小的样本权重(Hessian)和。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束。在现行回归模型中,这个参数是指建立每个模型所需要的最小样本数。该成熟越大算法越conservative。即调大这个参数能够控制过拟合。
取值范围为: [0,∞] - max_delta_step [default=0]
允许的树的最大权重
取值范围为:[0,∞]
如果取值为0,那么意味着无限制。如果取为正数,则其使得xgboost更新过程更加保守。
通常不需要设置这个值,但在使用logistics 回归时,若类别极度不平衡,则调整该参数可能有效果 - subsample [default=1]
用于训练模型的子样本占整个样本集合的比例。如果设置为0.5则意味着XGBoost将随机的从整个样本集合中抽取出50%的子样本建立树模型,这能够防止过拟合。同sklearn的GBM类似。
取值范围为:(0,1] - colsample_bytree [default=1]
在建立树时对特征随机采样的比例。缺省值为1
取值范围:(0,1] - colsample_bylevel[default=1]
决定树在每次节点划分时采样特征例的比例
通常不使用,因为subsample和colsample_bytree已经可以起到相同的作用了
- scale_pos_weight[default=0]
大于0的取值可以处理类别不平衡的情况。帮助模型更快收敛。例如对二分类问题:可以设置成样本较多类别的样本数/样本较少类别的样本数
Parameter for Linear Booster
- reg_alpha [default=0]
L2 正则的惩罚系数
用于处理XGBoost的正则化部分。通常不使用,但可以用来降低过拟合 - reg_lambda [default=0]
L1 正则的惩罚系数
当数据维度极高时可以使用,使得算法运行更快。 - lambda_bias
在偏置上的L2正则。缺省值为0(在L1上没有偏置项的正则,因为L1时偏置不重要)
Task Parameters
- objective [ default=reg:linear ]
定义学习任务及相应的学习目标,可选的目标函数如下:
“reg:linear” –线性回归。
“reg:logistic” –逻辑回归。
“binary:logistic” –二分类的逻辑回归问题,输出为概率。
“binary:logitraw” –二分类的逻辑回归问题,输出的结果为wTx。
“count:poisson” –计数问题的poisson回归,输出结果为poisson分布。
在poisson回归中,max_delta_step的缺省值为0.7。(used to safeguard optimization)
“multi:softmax” –让XGBoost采用softmax目标函数处理多分类问题,同时需要设置参数num_class(类别个数)
“multi:softprob” –和softmax一样,但是输出的是ndata * nclass的向量,可以将该向量reshape成ndata行nclass列的矩阵。每行数据表示样本所属于每个类别的概率。
“rank:pairwise” –set XGBoost to do ranking task by minimizing the pairwise loss - base_score [ default=0.5 ]
每个样本的初始估计,全局偏差 - eval_metric [ default according to objective ]
校验数据所需要的评价指标,不同的目标函数将会有缺省的评价指标(比如:回归用”rmse”, 分类用”error”)
用户可以添加多种评价指标,对于Python用户要以list传递参数对给程序,而不是map参数list参数不会覆盖’eval_metric’
The choices are listed below:
“rmse”: root mean square error
“logloss”: negative log-likelihood
“error”: Binary classification error rate. It is calculated as #(wrong cases)/#(all cases). For the predictions, the evaluation will regard the instances with prediction value larger than 0.5 as positive instances, and the others as negative instances.
“merror”: Multiclass classification error rate. It is calculated as #(wrong cases)/#(all cases).
“mlogloss”: Multiclass logloss
“auc”: Area under the curve for ranking evaluation.
“ndcg”:Normalized Discounted Cumulative Gain
“map”:Mean average precision
“ndcg@n”,”map@n”: n can be assigned as an integer to cut off the top positions in the lists for evaluation.
“ndcg-“,”map-“,”ndcg@n-“,”map@n-“: In XGBoost, NDCG and MAP will evaluate the score of a list without any positive samples as 1. By adding “-” in the evaluation metric XGBoost will evaluate these score as 0 to be consistent under some conditions.
training repeatively - seed [ default=0 ]
随机数的种子。缺省值为0
可以用于产生可重复的结果(每次取一样的seed即可得到相同的随机划分)
Console Parameters
下面的这些参数仅能用于控制台版本的xgboost。
* use_buffer [ default=1 ]
- 是否为输入创建二进制的缓存文件,缓存文件可以加速计算。缺省值为1
* num_round
- boosting迭代计算次数。
* data
- 输入数据的路径
* test:data
- 测试数据的路径
* save_period [default=0]
- 表示保存第i*save_period次迭代的模型。例如save_period=10表示每隔10迭代计算XGBoost将会保存中间结果,设置为0表示每次计算的模型都要保持。
* task [default=train] options: train, pred, eval, dump
- train:训练模型
- pred:对测试数据进行预测
- eval:通过eval[name]=filenam定义评价指标
- dump:将学习模型保存成文本格式
* model_in [default=NULL]
- 指向模型的路径在test, eval, dump都会用到,如果在training中定义XGBoost将会接着输入模型继续训练
* model_out [default=NULL]
- 训练完成后模型的保存路径,如果没有定义则会输出类似0003.model这样的结果,0003是第三次训练的模型结果。
* model_dir [default=models]
- 输出模型所保存的路径。
* fmap
- feature map, used for dump model
* name_dump [default=dump.txt]
- name of model dump file
* name_pred [default=pred.txt]
- 预测结果文件
* pred_margin [default=0]
- 输出预测的边界,而不是转换后的概率
如果你比较习惯scikit-learn的参数形式,那么XGBoost的python 版本也提供了sklearn形式的接口 XGBClassifier。它使用sklearn形式的参数命名方式,对应关系如下:
eta –> learning_rate
lambda –> reg_lambda
alpha –> reg_alpha
当然,想获取更多更详细的休息,请参考XGBoost的官方文档,也会有更多更新的内容。
①XGBoost Parameters (official guide)
②XGBoost Demo Codes (xgboost GitHub repository)
③Python API Reference (official guide)