0%

XGBoost 参数说明

XGBoost 官方参数说明文档,XGBoost 版本:0.72。

在运行 XGBoost 之前,必须设置三种类型参数:通用参数 (General Parameters)、提升参数(Booster Parameters) 和任务参数(Task Parameters)。

  • 通用参数 (General Parameters):设置整体功能,参数控制在提升(boosting) 过程中使用哪种 booster,常用的 booster 有树模型 (tree model) 和线性模型(linear model)。
  • 提升参数 (Booster Parameters):这取决于使用哪种 booster(树 or 回归)。
  • 任务参数 (Task Parameters):控制学习的场景,例如在回归问题中会使用不同的参数控制排序。

通用参数 (General Parameters)

下面这些参数定义了 XGBoost 的总体功能:

  • booster [default=gbtree]

    • 选择每次迭代过程中需要运行的模型,一共有两种模型可以选择:
    • gbtree:使用基于树的模型进行提升计算;
    • gblinear:使用线性模型进行提升计算;
  • silent [default=0]

    • 设置模型是否打印运行时信息:
    • 0:打印出运行时信息
    • 1:不打印出运行时信息
  • nthread [default = 可用的最大线程数]

    • XGBoost 运行时的线程数,默认值为当前系统可以获得的最大线程数。
  • num_pbuffer [由 XGBoost 自动设置,不需要用户设置]

    • 预测缓冲区的大小,通常设置为训练实例的数目。缓冲区用于保存最后一次升压步骤的预测结果。
  • num_feature [由 XGBoost 自动设置,不需要用户设置]

    • boosting 过程中用到的特征维数,设置为特征个数。

提升参数 (Booster Parameters)

树模型 Booster 参数

  • eta [default=0.3,别名: learning_rate]

    • 为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。eta 通过缩减每一步特征的权重使提升计算过程更加保守,使得模型更加健壮。
    • 取值范围:[0,1]。典型值一般设置为:0.01~0.2。
  • gamma [default=0,别名:min_split_loss]

    • 在树的叶子节点上进行进一步分割,所需要的最小损失函数减少的大小。越大,算法就越保守。
      这个值一般来说需要根据损失函数来调整。
    • 取值范围:[0,∞]
  • max_depth [default=6]

    • 树的最大深度,值越大,树越复杂。可以用来控制过拟合。
    • 取值范围:[1,∞]。典型值是 3-10。
  • min_child_weight [default=1]

    • 孩子节点中最小的样本权重 (hessian) 和。如果一个叶子节点的样本权重和小于 min_child_weight,则拆分过程将放弃进一步的划分。在线性回归任务中,这个参数是指建立每个模型所需要的最小样本数。该参数越大算法越保守。这个参数可以用来减少过拟合,但是过高的值也会导致欠拟合,因此可以通过交叉验证来调。
    • 取值范围: [0,∞]
  • max_delta_step [default=0]

    • 最大增量步骤,我们允许每个叶子输出。如果该值设置为 0,则意味着没有约束。如果它被设置为正值,有助于更新步骤更加保守。通常不需要这个参数,当类是非常不平衡的时,它可能有助于 logistic 回归。将其设置为 1~10 的值可能有助于控制更新。
    • 取值范围:[0,∞]
  • subsample [default=1]

    • 用于训练模型的子样本占整个样本集合的比例。如果设置为 0.5 则意味着 XGBoost 将随机的从整个样本集合中随机的抽取出 50% 的子样本建立树模型,这能够防止过拟合。
    • 取值范围为:(0,1]
  • colsample_bytree [default=1]

    • 在构建每棵树时,列的采样比 (一般是特征采样比)。在每次 boosting 迭代中都会出现一次采样。
    • 取值范围:(0,1]
  • colsample_bylevel [default=1]

    • 在每个级别上,每个样本的子样本比。每次进行新的分割时,都会出现次采样。
      当 tree_method 设置为 hist 时,此参数没有任何影响。这个一般很少用,subsample 和 colsample_bytree 参数调节就足够了。
  • lambda [default=1, 别名: reg_lambda]

    • 权重的 L2 正则化项,增加这个值会使模型更保守。这个其实用的很少。
  • alpha [default=0, 别名: reg_alpha]

    • 权重的 L1 正则化项,增加这个值会使模型更保守。这个主要是用在数据维度很高的情况下,可以提高运行速度。
  • tree_method [default=auto]

    • XGBoost 中使用的树构造算法。参见参考文献中的描述。
    • 分布式和外存版本只支持近似算法 (tree_method=approx)。
    • 选项: ‘auto’、’approx’、’exact’、’hist’、’gpu_exact’、’gpu_hist’。
      • ‘auto’: 用启发式方法去选择最快的一个。
        • 对于小到中数据集,将使用精确的贪心算法。
        • 对于大数据集,会选择近似算法。
        • 由于之前总是在单台机器上使用精确的贪心算法,所以当选择近似算法时,用户会得到一条消息来通知这个选择。
      • ‘exact’: 使用贪心算法
      • ‘approx’: 使用草图和直方图的近似贪心算法
      • ‘hist’: 快速直方图优化近似贪婪算法。它使用了一些性能改进,比如垃圾箱缓存。
      • ‘gpu_exact’: 使用 gpu 执行 exact 算法
      • ‘gpu_hist’: 使用 gpu 执行 hist 算法
  • sketch_eps [default=0.03]

    • 这个选项适用于近似贪心算法。
    • 这大概可以理解为 O(1/sketcheps) 数量的箱子。与直接选择的箱数相比,该方法具有一定的理论保证和梗概精度。
    • 通常用户不需要调整这个参数,但是使用一个较低的值唯一获得更多的精确的列举。
    • 取值范围:(0,1)
  • scale_pos_weight [default=1]

    • 用于类别不平衡的情况下,控制正负权重的平衡。将参数设置大于 0,可以加快收敛。
  • updater [default=grow_colmaker,prune]

    • 一个逗号分隔的字符串,定义了要运行的树更新器的序列,提供了一种构造和修改树的模块化方法。这是一个高级的参数通常设置为自动的,取决于其他参数。它也可以被用户明确的定义。有下列的更新器插件:
      • ‘grow_colmaker’: 非分布的基于列的树结构。
      • ‘discol’: 采用基于列的数据分割模式的分布式树结构。
      • ‘grow_histmaker’: 基于基于直方图计数的全局建议的基于行的数据分割的分布式树结构。
      • ‘grow_local_histmaker’: 基于局部直方图计数。
      • ‘grow_skmaker’: 使用近似的草图算法。
      • ‘refresh’: 根据当前数据刷新树的统计和 / 或叶值。注意,不执行任何随机的数据行子抽样。
      • ‘prune’: 在损失小于 min_split_loss (or gamma) 的情况下修剪。
    • 在分布式设置中,updater 序列应该调整为’grow_histmaker,prune’
  • refresh_leaf [default=1]

    • 设置一个刷新 updater 插件的参数。当标志为 1 时,树叶和树节点的统计信息都更新了。当标志为 0 时,只更新节点属性。
  • process_type [default=default]

    • 一种可运行的 boosting 过程
    • 选项: {‘default’,’update’}
      • ‘default’: 普通的 boosting 过程来创建新的树。
      • ‘update’: 从一个已经存在的模型并且仅仅更新它的树。在每一次 boosting 迭代,从初始模型得到的树,一个指定序列的 updater 插件为这些树运行,修改后的树被添加到新的模型。新的模型可能有相同或者更少的树,取决于 boosting 迭代的次数。目前,以下内置的 updater 插件可以与此过程类型有意义的使用:’refresh’, ‘prune’。如果 process_type=update,你就不能使用 updater 插件来创建新的树。
  • grow_policy [default=depthwise]

    • 控制节点被添加到树的方式
    • 目前仅仅支持 tree_method=hist 时的设置。
    • 选项: {‘depthwise’, ‘lossguide’}
      • ‘depthwise’: 在离根最近的节点处分割
      • ‘lossguide’: 在最大的 loss 改变出分割
  • max_leaves [default=0]

    • 最多添加的节点数量。仅当 grow_policy=lossguide 时相关。
  • max_bin [default=256]

    • 仅当 tree_method=hist 时有用。
    • 最大的离散箱数,以存储连续的特性。
    • 增加这个数字可以减少计算时间成本。
  • predictor [default=cpu_predictor]

    • 选择预测算法的类型。提供同样的结果但是可以选择使用 CPU 或者 GPU。
      • cpu_predictor: 使用多核 CPU 预测算法。
      • gpu_predictor: 使用 gpu 预测。如果 tree_method 设置为 gpu_exact 或者 gpu_hist,那么这个就是默认选项。

Dart Booster 额外的参数 (booster=dart)

Dart Booster 将 dropout 引入模型,这里的 dropout 不是直接扔掉,而是变权值。

  • sample_type [default=uniform]

    • 算法抽样的类型
      • uniform: 均匀选择树 dropped。
      • weighted: 按照权重来选择树 dropped。
  • normalize_type [default=tree]

    • 归一化算法的类型
      • tree: 新的树和每一个 dropped 树有同样的权重。
        • 新的树的权重为 1 / (k + learning_rate)。
        • dropped 树乘以一个系数 k / (k + learning_rate)。
      • forest: 新的树和所有 dropped 树的和有相同的权重。
        • 新的树的权重为 1 / (1 + learning_rate)。
        • dropped 树乘以一个系数 1 / (1 + learning_rate)。
  • rate_drop [default=0.0]

    • dropout 的概率 (在生成的树中 dropped 一部分)。
    • 取值范围: [0.0, 1.0]
  • one_drop [default=0]

    • 当这个被设置时,至少有一个树始终会被 dropped(支持原始 DART 论文中的 Binomial-plus-one 或 epsilon-dropout).
  • skip_drop [default=0.0]

    • 在 boosting 迭代的过程中略过 dropout 过程的概率。
      • 如果一次 dropout 被略过,新的树被添加进 model 用和 gbtree 一样的方式。
      • 非 0 的 skip_drop 比 rate_drop 和 one_drop 有更高的优先级。
    • 取值范围: [0.0, 1.0]

线性 Booster 的参数 (booster=gblinear)

  • lambda [default=0, 别名: reg_lambda]

    • L2 正则化的权重,增加该参数的值会让模型更保守
  • alpha [default=0, 别名: reg_alpha]

    • L1 正则化的权重,增加这个值会让模型更保守。归一化到训练实例的数量。
  • updater [default=shotgun]

    • 选择算法拟合线性模型
      • shotgun: 基于 shotgun 算法的并行坐标下降算法。使用 ‘HOGRAVE’ 并行性,因此在每次运行时产生一个非确定性的解决方案。
      • coord_descent: 普通坐标下降算法。而且多线程下仍然产生确定性的解决方案。

Tweedie Regression 的参数 (objective=reg:tweedie)

  • tweedie_variance_power [default=1.5]
    • 在 Tweedie 分布上控制方差的参数
      • var(y)~E(y)^tweedie_variance_power
    • 取值范围: (1,2)
    • 值越接近 2 越接近 gamma 分布
    • 值越接近 1 越接近 Poisson 分布

学习任务参数 (Learning Task Parameters)

指定学习任务和相应的学习目标。下面的目标选项如下:

  • objective [default=reg:linear]

    • ‘reg:linear’:线性回归。
    • ‘reg:logistic’:逻辑回归。
    • ‘binary:logistic’:二分类的逻辑回归,输出概率。
    • ‘binary:logitraw’:二分类的逻辑回归,在逻辑变换前输出得分。
    • ‘binary:hinge’:二分类的 hinge loss。使得预测结果为 0 或 1,而不是产生概率。
    • ‘gpu:reg:linear, gpu:reg:logistic, gpu:binary:logistic, gpu:binary:logitraw’: 对应在 GPU 上评价的目标函数版本。注意,像 GPU 直方图算法一样,它们只能在整个训练期间使用相同数据集时使用。
    • ‘count:poisson’:用于统计数据的 poisson 回归,输出 poisson 分布均值。
      • max_delta_step:在 poisson 回归中默认值设置为 0.7(用于维护优化)。
    • ‘survival:cox’:用于正确删除的生存时间数据的 Cox 回归 (被正确删除的作为负例)。注意,预测是按危害比表中的值返回。(例如:在比例风险函数 h(t) = h0(t) * HR 中,HR = exp(marginal_prediction)。
    • ‘multi:softmax’:设置 XGBoost 做多分类任务用 softmax 目标,你需要指定 num_class。
    • ‘multi:softprob’:和 softmax 一样,但是输出的是一个 ndata nclass 的向量,可以进一步变形为 ndata nclass 的矩阵。结果包含预测的每个数据属于每个类的概率值。
    • ‘rank:pairwise’:通过最小化 pairwise loss,设置 XGBoost 用于排序任务。
    • ‘reg:gamma’:用 log-link 的 gamma 回归。输出是 gamma 分布的均值。他是有用的,例如:为了模拟保险索赔的严谨性,或者任何输出结果可能是 gamma 分布的。
    • ‘reg:tweedie’:用 log-link 的 Tweedie 回归。他是有用的,例如:模拟保险全损,或者任何输出结果可能是 Tweedie 分布的。
  • base_score [default=0.5]

    • 初始化的所有例子的越策得分,全局 bias
    • 对于足够多的迭代次数,改变这个值不会有太大的效果
  • eval_metric [default according to objective]

    • 对于验证集的评测指标,一个默认的指标是根据目标分配的 (对于回归任务用 rmse,对于分类任务用 error,mean average precision for ranking)
    • 用户可以添加多个评测指标,对于 python 用户,记得将这些指标存入一个参数对的 list 而不是 map,不然后面的指标将会失效。
    • 可选项如下:
      • rmse:root mean square error(均方根误差)。
      • mae:mean absolute error(绝对值误差)。
      • logloss:negative log-likelihood(负对数似然)。
      • error:二分类错误率。他可以用公式 #(wrong cases)/#(all cases) 计算。对于预测,指标会把预测结果大于 0.5 的当做正类,其他当做负类。
      • error@t:与阈值为 0.5 的二分类不同,可以通过 t 设置阈值。
      • merror:多分类错误率,可以用公式 #(wrong cases)/#(all cases) 计算。
      • mlogloss:Multiclass logloss(多分类对数似然)。
      • auc:Area under the curve(曲线下面积)。
      • ndcg:Normalized Discounted Cumulative Gain(归一化累积获得收益)
      • map:Mean average precision(平均准确率,排名任务)。
      • ndcg@n,map@n:n 可以设置为整数,以切断列表中的顶部位置进行评估。
      • ndcg-,map-,ndcg@n-,map@n-:在 XGBoost,NDCG 和 MAP 将评估没有任何正例样本的列表的得分为 1。通过在评价度量中添加 “-”,XGBoost 将在某些条件下将这些分数评估为 0,反复训练。
      • poisson-nloglik:Poisson 回归的负对数似然。
      • gamma-nloglik:gamma 回归的负对数似然。
      • gamma-deviance:gamma 回归中的差残差
      • tweedie-nloglik:Tweedie 回归的负对数似然 (在 tweedie_variance_power 参数为特定值)。
  • seed [default=0]

    • 随机数种子

命令行参数

下列的参数仅仅被用在命令行版本的 xgboost 中

  • use_buffer [default=1]

    • 是否创建一个二进制缓冲从输入文本中。这样做通常会加快加载时间。
  • num_round

    • boosting 的轮数
  • data

    • 训练集的路径
  • test:data

    • 要预测的测试集的路径
  • save_period [default=0]

    • 保存模型的周期,设置 save_period=10 表示每 10 次 boosting 就会保存一次模型,设置为 0 表示在训练期间不保存任何模型。
  • task [default=train] 选项: train、pred、eval、dump

    • train:用数据训练
    • pred:预测 test:data
    • eval:设置 eval[name]=filename,评估指定的统计数据
    • dump:将学习到的模型转换为文本形式
  • model_in [default=NULL]

    • 输入模型的路径,用于 task 为 test、eval、dump ,如果被明确地指明训练,xgboost 会从输入模型继续训练。
  • model_out [default=NULL]

    • 在训练结束后输出模型的路径,如果不知名,会输出 0003.model,这里的 0003 是 boosting 的轮数。
  • model_dir [default=models/]

    • 用保存训练期间的模型输出的目录。
  • fmap

    • 特征图,用于转换模型。
  • name_dump [default=dump.txt]

    • 模型转储文件的名称。
  • name_pred [default=pred.txt]

    • 预测文件的名字,用于预测模式。
  • pred_margin [default=0]

    • 预测 margin 而不是转换概率。

——————- 本文结束感谢您的阅读 ——————-