XGBoost中参数调优
本文参考xgboost官方文档以及python中xgboost参数设置而作。
使用语言:python
- 采用python的XGBoost模块有一个sklearn包,XGBClassifier
目的: 是为了自己在写一个调参库前能有一个细节理解。鉴于本人拙劣的思维,如有错误可以在评论区提出。
参数组成
- 参数主要为3部分
- General Parameters
- Booster Parameters
- Learning Task Parameters
General Parameters
- booster [default=gbtree]
- 选择在每次迭代时的模型类型–gbtree、gblinear、dart
- gbtree和dart使用基于树的模型,gblinear使用线性模型
- 由于通常gbtree表现比gblinear好,故使用默认gbtree。
- silent[default=0]
- 0代表打印运行信息,1表示不打印。由于打印信息可以观察运行情况,推荐0.
- nthread[默认为当前可获得的最大线程数]
- 若希望在所有内核上,不输入值,若想限速,输入核心数量,推荐不输入全速跑。
- num_pbuffer and num_feature
- 这两个放一起说,都是由xgboost自动设置。
Booster Parameters
在此仅说tree booster,因为它是最优的。
- eta[default=0.3]
- 可以理解为学习速率
- 缩小步伐和每个步骤的权重,防止过拟合
- 范围[0,1] 典型值为[0.01,0.2]
- gamma[default=0, alias: min_split_loss]
- 越大,算法越保守
- 范围[0,∞]
- max_depth[default=6]
- 最大化一个数的深度,增加它会使模型变得更复杂更易过拟合
- 0表示无限制,范围[0,∞]
- min_child_weight[default=1]
- 范围[0,∞]
- max_delta_step [default = 0]
- 允许每棵树的最大步长。值为0,代表没有约束
- 通常不需要设置,但数据不平衡时,可能有助逻辑回归
- subsample [default=1]
- 用于训练的子样本比例。设为0.5意味着xgboost随机收集一半的数据实例来生长树,这可以防止过拟合。
- 范围(0,1]
- colsample_bytree [default = 1]
- 表示每棵树时的随机抽样列采样率
- 范围(0,1]
- colsample_bylevel [default=1]
- 每个分级的列的子采样比率
- 范围:(0,1]
- lambda [default = 1]
- alpha [default = 0]
- 在非常高的维度使用,以便算法实现时运行得更快
- scale_pos_weight [default = 1]
- 在数据不平衡的情况下使用 有助于更快收敛
- tree_method,string [default =’auto’]
- xgboost中使用的树构造算法
- {‘auto’,’exact’,’approx’,’hist’,’gpu_exact’,’gpu_hist’}
- 待施工
- updater,[default =’grow_colmaker,prune’]
- predictor, [default=’cpu_predictor’]
* 新版xgboost支持gpu运算
* ‘cpu_predictor’,cpu运算
* ‘gpu_predictor’, 使用gpu运算,两方法结果相同,但gpu运算时间更短。
Learning Task Parameters
- objective[default = reg:linear]
- 定义了需要最小化的损耗函数(常用值如下)
- “reg:linear”– 线性回归
- “reg:logistic”– 逻辑回归
- “binary:logistic”– 二元分类的逻辑回归,输入概率
- “multi:softmax”–多类分类,还需要设置num_class
- “multi:softprob”– 和softmax近似,但输出一个ndata * nclass的向量
2.eval_metric[默认为依据对象自动设置]
- 验证数据的评估指标
- 可以添加多个评估指标(参数对的列表,而不是映射)
- 选择如下:
- rmse
- mae
- logloss
- error
- merror
- mlogloss
- auc
- ndcg
- 定义了需要最小化的损耗函数(常用值如下)
- seed[default = 0]
- 随机数种子
- 用于参数调整以及产生可以重现的结果
调参
- 思路:网格调参
- 逐步设置参数为最优。由于精度关系,一个参数可以做几次比较,需要可以再自行设置。
- 下面部分为代码
1 | # -*- coding: utf-8 -*- |