Xgboost调参
Xgboost经常被用作许多数据科学家的终极武器—有多厉害不用强调了。
但是使用xgboost很简单,提高其性能就很难了。算法有太多的参数,为了提高性能,调参是必不可少的,对于一个实际问题,很难回答说—你应该tune哪个参数集?为了得到理想输出,这些参数应该如何设置?
本文会介绍xgboost调参的一些相关知识,面向初学者~
你应该知道什么?
XGBoost (eXtreme Gradient Boosting)是梯度提升算法的高级实现。
目录
1.The XGBoost Advantage
2.Understanding XGBoost Parameters
3.Tuning Parameters (with Example)
1.The XGBoost Advantage
Ø 正则化:标准GBM(Gradient Boosting Model)没有实现正则化。因此xgboost对正则化的实现可以帮助减少overfitting。
Ø 并行处理:比GBM快很多很多!【但是问题来了,boosting明显是串行结构啊,每一步的权值要根据上一步结果变化的,这是怎么做到的呢?参考http://zhanpengfang.github.io/418home.html 后续有时间的话我会再介绍相关知识。】
Ø 高灵活性:运行用户自定义优化目标和评价准则。
Ø 处理缺失值:内置程序可处理缺失值。
Ø 树剪枝:GBM会在遭遇负损失的时候停止分裂,因而这更多是贪心算法;xgboost可以分裂到max_depth深度,然后开始剪枝。
Ø 内置交叉验证:允许用户在每次迭代的时候运行交叉验证,因而可以很容易在一次运行中得到最优迭代次数。
Ø 在已有模型上继续
以上,more about xgboost,see http://xgboost.readthedocs.io/en/latest/model.html【恩,后续可能会看,也可能会翻译,敬请期待~~xgboost原理篇】
2.Understanding XGBoost Parameters
Xgboost的参数可以分为三类:
Ø 一般参数:指导全面运转;
Ø Booster参数:指导每一步中的个体booster(树/回归)
Ø 学习任务参数:指导优化执行
2.1 GeneralParameters
² Booster[default = gbtree]
选择每次迭代运行的模型类型:gbtree(基于树的模型)/gblinear(线性模型)
² silent[default = 0]
设置为1的话是silent模式,也就是不会打印运行信息,一般保持为0来帮助理解模型。
² nthread[default to maximum number of threads available if not set]
用于并行处理,可以输入系统核数。如果你想要在所有核上运行,那么不需要输入,算法会自动检测。
还有两个参数,xgboost会自动设置,你不需要关心~
2.2Booster
尽管有两种booster(上面generalparameters也有提及),我们在这里只考虑tree booster因为它通常比linear性能好,因而linear几乎不被使用。
² eta[default = 0.3]
类似GBM中的learning rate。在每一步中收缩该值会使模型更健壮。
典型的值是0.01-0.2。
² min_child_weight [default = 1]
定义孩子中所有观察值的权重和的最小值。
类似于GBM中的min_child_leaf,但不完全一样。Xgboost这个是权重之和,GBM是最小数量。
该值用于控制过拟合,Higher value防止模型过拟合,但过高则会导致欠拟合,因此该值需要tuned using CV。
² max_depth[default = 6]
树的最大深度,与GBM中一致。用于控制过拟合,因为高的深度会允许模型学习到某个样本中过于具体的规则。
需要be tuned using CV,典型值是3-10。
² max_leaf_nodes
树的末端节点,即叶子的最大数量。可替代max_depth[因为是二叉树嘛,深度为n的树就会有2^n个叶子],如果定义了该值,则会忽略max_depth。
² gamma[default = 0]
gamma定义了分裂所需的最小损失。该参数根据损失函数的不同会有不同,而且需要be tuned。
² max_delta_step[default = 0]
该参数一般不需要,但是可能在logistic回归且类别极度不均衡的时候有帮助。
² subsample[default = 1]
与GBM中的subsample一样。指示每个树的随机采样分数。
² colsample_bytree [default=1]
² colsample_bylevel [default=1]
不常用
² lambda [default=1]
权重的L2正则项(与岭回归相似)
用于处理xgboost的正则化部分,可以用于缓和过拟合。
² alpha [default=0]
权重的L1正则项(类似Lasso回归)
可以在超高维的情况下使用,以至于算法可以运行的更快。
² scale_pos_weight [default=1]
在类别十分不均衡时,使该值大于0,可以帮助快速收敛。
2.3运行任务参数
这些参数用于定义每一步中的优化目标,度量准则。
² objective[default = reg:linear]
定义了需要最小化的损失函数,常用:
二分类:logistic—返回预测概率,而非类别。
多分类:softmax
多分类:softprob
² eval_metric[default according to objective]
验证数据所使用的准则。
对回归和分类误差缺省使用rmse
典型的值有:
rmse、mae、logloss、error、merror、mlogloss、auc
² seed[default = 0]
随机数种子,可用于生成可再生/可复写的结果。
For官方的参数介绍,see http://xgboost.readthedocs.io/en/latest/parameter.html#general-parameters
3.Tuning Parameters (with Example)
一般调参方法:
² 选择相对高的学习速率(learning rate)。通常0.1works,但是有时0.05-0.3works。对该学习速率决定最优树数目。Xgboost有一个十分有用的函数---‘cv’,它在每次迭代过程中运行交叉验证,然后返回所需的最优树数目。
² Tune tree-specific参数
² Tune正则化参数: lambda,alpha,可以帮助降低model复杂度,增强性能。
² 降低学习速率并决定最优参数。