XGBoost调参指南

简介

在预测分析建模时,如果结果不理想,那么不妨试试XGBoost,可以说,XGBoost已经成为许多数据科学家的秘密武器,,本文翻译自Complete Guide to Parameter Tuning in XGBoost (with codes in Python),它详细介绍了XGBoost中参数的含义以及通过实例说明调参的技艺。在此,记下自己的学习笔记。

XGBoost

XGBoost是Gradient Boosting算法的一个优化版本,由于XGBoost算法的内部复杂性,涉及很多超参数,相比于建立一个XGBoost model,提高该model的性能需要花费很大的精力,但这又是必须做的。

优势

  • 正则化,在GBM基础之上,增加了正则化,有效降低过拟合风险;
  • 并行处理,Boosting算法是顺序处理的,比起GBM,它快的惊人,另外,XGBoost也支持Hadoop实现;
  • 高度灵活性,允许自定义优化目标和评价标准;
  • 缺失值处理,内置处理缺失值的规则,提供一个特殊值作为参数传进去;
  • 剪枝,GBM实则是一贪心算法,遇到负损失,就停止分裂,XGBoost根据指定最大深度(max_depth),回过头来剪枝。如果某节点之后没有正值,它会去除这一分裂;
  • 内置交叉验证,允许在每一轮boosting迭代中使用交叉验证,方便获得最优迭代次数;
  • 上一轮结果基础上继续训练

参数

XGBoost的作者把所有参数分成3类:通用参数、Booster参数、学习目标参数。

通用参数

控制XGBoost的宏观功能。有:

  • booster,选择每次迭代的模型,默认gbtree;
  • silent,默认为0,设为1,则不会输出任何信息;
  • nthread,最大可能的线程数,用来进行多线程控制。

Booster参数

这里只介绍tree booster参数,有:

  • eta,学习率,每一步减少权重,提高模型鲁棒性。通常设置在0.01-0.2范围内;
  • min_child_weight,最小叶子节点样本权重和,避免过拟合,值过高会导致欠拟合,可以通过CV调节该参数;
  • max_depth,树最大深度,避免过拟合,值越大,模型可学到更具体更局部样本,CV调节该参数,通常设在3-10区间内;
  • max_leaf_nodes,树上叶子节点最大数量;
  • gamma,默认为0,节点分裂时,只有分裂后损失函数值下降了,才会分裂该节点,该参数指定节点分裂损失函数最小下降值,值越大,越保守;
  • subsample,控制每棵树随机采样比例,值越小越保守,避免过拟合,值过小,可能欠拟合,通常取值范围,0.5-1;
  • colsample_bytree,默认1,对列数采样比例;
  • lambda,默认1,L2正则化的权重,控制正则化部分,减少过拟合;
  • scale_pos_weight,默认1,在类别十分不均衡时,该参数设置成正值,可以是model更快收敛。

学习目标参数

控制理想的优化目标,和每一步结果的度量,有:

  • objective,最小化的损失函数,常用值有binary:logistic(二分类的逻辑回归) 、multi:softmax (softmax多分类器,返回预测的类别)、multi:softprob(softmax多分类器,返回属于各个类别的概率)
  • eval_metric,对于回归默认rmse,分类默认error,常用值,rmse,mae,logloss,error,merror,mlogloss,auc
  • seed,随机数种子,复现随机数据结果。

最后,还有两个重要参数num_boosting_roundsearly_stopping_rounds,可以控制迭代次数。
更多参数参考:
XGBoost Guide – Introduction to Boosted Trees

分享