与论文结合详解XGBoost参数

本文最后修改于2018-01-23,文章有问题或者转载请及时联系本人,如果对你有帮助,别忘了点下关注和喜欢,感谢!

0 前言

网络上XGBoost的参数翻译很多,但是都没做什么解释,本文一部分内容参考自 Complete Guide to Parameter Tuning in XGBoost (with codes in Python),一部分内容是根据自己对论文的理解添加的,对某些参数的解释也给出了论文中对应的部分。

期望读者:

具有对基础树模型的理解,尝试使用过XGBoost,如果对XGBoost的论文有了解就更好了。

1 XGBoost的优点

  1. 正则
    • 标准的GBM实现是没有正则的。
    • XGBoost也以regularized boosting技术闻名。加入正则的目标函数如下,其中T是叶子节点的个数,w是叶子结点的权重。所以正则项是由叶子结点的数量和叶子结点权重的平方和决定
    • 10175177-6262d727d14a15b1.png
      带正则的目标函数
  2. 并行处理
    • XGBoost实现了并行化的处理。
    • XGBoost基于boosting方法,原则上不可以并行。但是XGBoost做的是特征粒度上的并行,而不是树粒度上的并行。主要用来同时遍历得到理想的分裂点。
    • XGBoost支持hadoop上实现。
  3. 高度的灵活性
    • XGBoost允许用户自定义优化目标评估准则
    • 如下所示,我们只需要知道一阶和二阶导数即可计算损失,在节点分裂的时候同样是这样的。
    • 10175177-523d59dc69953c3a.png
      只需要知道一阶和二阶导
  4. 处理缺失值方面
    • XGBoost自有一套处理缺失值的方法。论文中提到XGBoost对于缺失值当成稀疏的情况来处理。
  5. 树剪枝方面
    • GBM是在节点遇到负损失的时候停止分裂,贪心策略。(预剪枝)
    • XGBoost是在分裂抵达max_depth的时候才开始剪枝移除那些没有正收益的分裂。(后剪枝)
  6. 内置的交叉验证
    • XGBoost在boosting过程中的每一次迭代都运行CV,使得在一次运行中就可以确定最优的boosting迭代次数。
    • GBM需要我们使用网格搜索来找最优次数。
  7. 可以在存在的模型上继续训练
    • 在某些特定的场景下非常有用。
    • GBM的sklearn实现也有这个特点。

2 XGBoost的参数

  1. General Parameters
    1. booster [default=gbtree]
      • gbtree:基于树的模型
      • gblinear:线型模型
    2. silent [default=0]
      • 0会输出运行信息,1不会输出运行信息,建议保持0有助于理解模型
    3. nthread [如果不设置默认与最大的可以线程数相同]
      • 用来控制并行过程,如果想要在所有的核上都运行就让系统自己设置就好。注意,mac系统的并行有所不同,可以参见这里
    4. num_pbuffer:prediction buffe,系统自动设置
    5. num_feature:boosting过程中的特征维数,系统自动设置
  2. Booster Paramters 包含两类Booster
    1. eta [default = 0.3]
      • 类似于GBM中的学习率
      • 取值范围:[0,1],通常设置为0.01~0.2
    2. gamma [default=0 别名:min_split_loss]
      • 一个叶子节点继续分裂所需要的最小下降损失。节点分裂的计算公式如下(分裂前损失-分裂后损失),式子最后的gamma就是这里的gamma。如果gamma很大,计算出的结果是负的,证明分裂没有收益,就不再分裂。所以值越大,模型越保守/越不容易过拟合。
      • 10175177-0af8ae17dcf9eb86.png
        gamma的影响
      • 取值范围:[0, ∞]
    3. max_depth [default = 6]
      • 树的最大深度。值越大模型越复杂/越可能过拟合。设为0表示不限制。
      • 取值范围:[0, ∞]
    4. min_child_weight [default=1]
      • 孩子节点需要的最小样本权重和。如果分裂导致一个叶子节点的样本权重和小于预设值,就不会继续分裂了。当树的结构确定后,我们可以通过下式计算叶结点权重:
      • 10175177-bac88cf5337305b6.png
        叶子节点的权重计算
      • 在线型模型中,简化为每个节点所需要的最小样本数量
      • 值越大,模型越保守。
    5. min_delta_step [default=0]
      • Maximum delta step we allow each tree’s weight estimation to be. If the value is set to 0, it means there is no constraint.
      • 用的比较少,但是在逻辑回归中,如果类别极度不平衡,调整这个值会有帮助。
    6. subsample [default = 1]
      • 行采样,不用多说。取值范围:(0, 1]
    7. colsample_bytree [default = 1]
      • 列采样,在建立每一棵树的时候对特征的采样比例。取值范围:(0, 1]
    8. colsample_bylevel [default = 1]
      • 在每一次分裂时候列采样的比例(?),用的很少。取值范围:(0, 1]
    9. alpha [default = 0]
      • 权重上的L1正则
    10. lambda [default = 1]
    • 权重上的L2正则
    1. tree method [default = 'auto'] 这个不是树构建的方法,而是节点分裂的方法。这个方法从古到今做了很多的改进,之后会有一篇专门的博客介绍这个问题,这里先附上参数的英文介绍,我们一般使用auto即可。。其中
    • 'auto': Use heuristic to choose faster one.
      • For small to medium dataset, exact greedy will be used.
      • For very large-dataset, approximate algorithm will be chosen.
      • Because old behavior is always use exact greedy in single machine, user will get a message when approximate algorithm is chosen to notify this choice.
    • 'exact': Exact greedy algorithm.
    • 'approx': Approximate greedy algorithm using sketching and histogram.
    • 'hist': Fast histogram optimized approximate greedy algorithm. It uses some performance improvements such as bins caching.
    • 'gpu_exact': GPU implementation of exact algorithm.
    • 'gpu_hist': GPU implementation of hist algorithm.
    1. scale_pos_weight [defualt = 1]
      • 正负样本比例。用来控制正负样本的权重,在类别不平衡的时候用处很大。
      • 常用的计算方法:sum(negative cases) / sum(positive cases)
    2. 【Linear Booster】中有lambda,alpha,lambda_bias(在偏置上的L2正则,为什么偏置上没有L1正则,因为不重要)。
  3. Learning Task Parameters
    1. objective [default=reg:linear] 定义学习目标函数。
      • 常用的:"reg:linear","reg:logistic","binary:logistic"
      • 可以自定义目标函数,需要传入一阶,二阶导数
    2. base_score 几乎不用
    3. eval_metric [默认值根据objective]
      • 可以传多个评估指标。python特别注意要传list而不是map。

参考:

1.Complete Guide to Parameter Tuning in XGBoost (with codes in Python

2.XGBoost Parameters

猜你喜欢

转载自blog.csdn.net/wj1066/article/details/81124949
今日推荐