XGBoost 参数

在运行 XGBoost 之前,我们必须设置三类参数:通用参数、Booster 参数和任务参数。

  • 通用参数涉及我们用于进行 Boosting 的 Booster 类型,通常是树模型或线性模型。

  • Booster 参数取决于您选择的 Booster 类型。

  • 学习任务参数决定学习场景。例如,回归任务可能与排名任务使用不同的参数。

  • 命令行参数涉及 XGBoost CLI 版本的行为。

注意

R 包中的参数

在 R 包中,您可以使用 .(点)来替换参数中的下划线,例如,您可以使用 max.depth 来表示 max_depth。下划线参数在 R 中也有效。

全局配置

以下参数可以在全局范围内设置,使用 xgboost.config_context() (Python) 或 xgb.set.config() (R)。

  • verbosity: 打印消息的详细程度。有效值为 0(静默)、1(警告)、2(信息)和 3(调试)。

  • use_rmm: 是否使用 RAPIDS 内存管理器 (RMM) 分配缓存 GPU 内存。当 XGBoost 在启用 RMM 插件的情况下构建(编译)时,主内存始终在 RMM 池上分配。有效值为 truefalse。有关详细信息,请参阅将 XGBoost 与 RAPIDS 内存管理器 (RMM) 插件结合使用

  • nthread: 设置 OpenMP 的全局线程数。仅当您需要覆盖某些与 OpenMP 相关的环境变量(如 OMP_NUM_THREADS)时才使用此参数。否则,应优先使用 Booster 和 DMatrix 的 nthread 参数,因为前者设置全局变量可能会与其他库冲突。

通用参数

  • booster [默认值= gbtree]

    • 要使用的 Booster。可以是 gbtreegblineardartgbtreedart 使用基于树的模型,而 gblinear 使用线性函数。

  • device [默认值= cpu]

    2.0.0 版本新增。

    • XGBoost 运行的设备。用户可以将其设置为以下值之一:

      • cpu: 使用 CPU。

      • cuda: 使用 GPU (CUDA 设备)。

      • cuda:<ordinal>: <ordinal> 是一个整数,指定 GPU 的序号(如果您有多个设备,则指定要使用的 GPU)。

      • gpu: 从可用和支持的设备列表中选择默认 GPU 设备。目前仅支持 cuda 设备。

      • gpu:<ordinal>: 从可用和支持的设备列表中选择默认 GPU 设备。目前仅支持 cuda 设备。

      有关 GPU 加速的更多信息,请参阅XGBoost GPU 支持。在分布式环境中,序号选择由分布式框架而不是 XGBoost 处理。因此,使用 cuda:<ordinal> 将导致错误。请改用 cuda

  • verbosity [默认值=1]

    • 打印消息的详细程度。有效值为 0(静默)、1(警告)、2(信息)、3(调试)。有时 XGBoost 会尝试根据启发式方法更改配置,这会显示为警告消息。如果出现意外行为,请尝试增加 verbose 的值。

  • validate_parameters [默认值为 false,Python、R 和 CLI 接口除外]

    • 当设置为 True 时,XGBoost 将对输入参数执行验证,以检查参数是否被使用。当存在未知参数时,会发出警告。

  • nthread [默认值为如果未设置则为最大可用线程数]

    • 运行 XGBoost 所用的并行线程数。选择时,请注意线程争用和超线程。

  • disable_default_eval_metric [默认值= false]

    • 禁用默认度量的标志。设置为 1 或 true 禁用。

树 Booster 参数

  • eta [默认值=0.3,别名: learning_rate]

    • 更新中使用的步长收缩,以防止过拟合。在每个 Boosting 步骤之后,我们可以直接获得新特征的权重,eta 收缩特征权重,使 Boosting 过程更加保守。

    • 范围:[0,1]

  • gamma [默认值=0,别名: min_split_loss]

    • 在树的叶节点上进行进一步划分所需的最小损失减少量。gamma 越大,算法就越保守。请注意,即使没有进行任何分裂的树仍然可能包含一个具有非零分数的单个终端节点。

    • 范围:[0,∞]

  • max_depth [默认值=6,类型=int32]

    • 树的最大深度。增加此值将使模型更复杂,更容易过拟合。0 表示深度无限制。请注意,XGBoost 在训练深层树时会大量消耗内存。exact 树方法需要非零值。

    • 范围:[0,∞]

  • min_child_weight [默认值=1]

    • 子节点中所需的实例权重(Hessian)的最小和。如果树划分步骤导致叶节点的实例权重和小于 min_child_weight,则构建过程将放弃进一步划分。在线性回归任务中,这简单地对应于每个节点中所需的最小实例数。min_child_weight 越大,算法就越保守。

    • 范围:[0,∞]

  • max_delta_step [默认值=0]

    • 我们允许每个叶输出的最大 delta 步长。如果该值设置为 0,则表示没有约束。如果设置为正值,它可以帮助使更新步骤更保守。通常不需要此参数,但在类极度不平衡的逻辑回归中可能会有所帮助。将其设置为 1-10 可能会有助于控制更新。

    • 范围:[0,∞]

  • subsample [默认值=1]

    • 训练实例的子样本比例。将其设置为 0.5 意味着 XGBoost 将在构建树之前随机采样一半的训练数据,这将防止过拟合。子采样将在每个 Boosting 迭代中发生一次。

    • 范围:(0,1]

  • sampling_method [默认值= uniform]

    • 用于采样训练实例的方法。

    • uniform: 每个训练实例被选中的概率相等。通常设置 subsample >= 0.5 可获得良好结果。

    • gradient_based: 每个训练实例的选择概率与梯度(更具体地说,\(\sqrt{g^2+\lambda h^2}\))的 *正则化绝对值* 成比例。subsample 可以设置低至 0.1 而不损失模型精度。请注意,此采样方法仅在 tree_method 设置为 hist 且设备为 cuda 时才受支持;其他树方法仅支持 uniform 采样。

  • colsample_bytree, colsample_bylevel, colsample_bynode [默认值=1]

    • 这是一系列用于列子采样的参数。

    • 所有 colsample_by* 参数的范围为 (0, 1],默认值为 1,并指定要子采样的列的比例。

    • colsample_bytree 是构建每棵树时列的子样本比例。每次构建树时都会发生一次子采样。

    • colsample_bylevel 是每个级别的列的子样本比例。每次树达到新的深度级别时都会发生一次子采样。列从当前树选择的列集中进行子采样。

    • colsample_bynode 是每个节点(分裂)的列的子样本比例。每次评估新分裂时都会发生一次子采样。列从当前级别选择的列集中进行子采样。这不支持精确树方法。

    • colsample_by* 参数是累积起作用的。例如,组合 {'colsample_bytree':0.5, 'colsample_bylevel':0.5, 'colsample_bynode':0.5} 对于 64 个特征将导致在每个分裂处有 8 个特征可供选择。

      使用 Python 或 R 包时,可以为 DMatrix 设置 feature_weights 以定义使用列采样时每个特征被选中的概率。在 sklearn 接口的 fit 方法中有一个类似的参数。

  • lambda [默认值=1,别名: reg_lambda]

    • 权重的 L2 正则化项。增加此值将使模型更保守。

    • 范围:[0, \(\infty\)]

  • alpha [默认值=0,别名: reg_alpha]

    • 权重的 L1 正则化项。增加此值将使模型更保守。

    • 范围:[0, \(\infty\)]

  • tree_method 字符串 [默认值= auto]

    • XGBoost 中使用的树构建算法。请参阅参考文献树方法中的描述。

    • 选项: auto, exact, approx, hist,这是常用更新器的组合。对于其他更新器,如 refresh,直接设置参数 updater

      • auto: 与 hist 树方法相同。

      • exact: 精确贪婪算法。枚举所有分裂候选。

      • approx: 使用分位数草图和梯度直方图的近似贪婪算法。

      • hist: 更快的直方图优化近似贪婪算法。

  • scale_pos_weight [默认值=1]

    • 控制正负权重之间的平衡,对于不平衡类很有用。要考虑的典型值: sum(负实例) / sum(正实例)。有关更多讨论,请参阅参数调优。另请参阅 Higgs Kaggle 竞赛演示示例: R, py1, py2, py3

  • updater

    • 一个逗号分隔的字符串,定义要运行的树更新器序列,提供一种模块化方式来构建和修改树。这是一个高级参数,通常根据其他一些参数自动设置。但是,用户也可以显式设置它。存在以下更新器:

      • grow_colmaker: 非分布式、基于列的树构建。

      • grow_histmaker: 基于直方图计数的全局提议的分布式树构建,使用基于行的数据分割。

      • grow_quantile_histmaker: 使用量化直方图构建树。

      • grow_gpu_hist: 当 tree_method 设置为 histdevice=cuda 时启用。

      • grow_gpu_approx: 当 tree_method 设置为 approxdevice=cuda 时启用。

      • sync: 同步所有分布式节点中的树。

      • refresh: 根据当前数据刷新树的统计信息和/或叶值。请注意,不执行数据行的随机子采样。

      • prune: 修剪损失 < min_split_loss (或 gamma) 的分裂以及深度大于 max_depth 的节点。

  • refresh_leaf [默认值=1]

    • 这是 refresh 更新器的一个参数。当此标志为 1 时,树的叶节点以及树节点的统计信息都会更新。当它为 0 时,只更新节点统计信息。

  • process_type [默认值= default]

    • 要运行的 Boosting 过程类型。

    • 选项: default, update

      • default: 创建新树的正常 Boosting 过程。

      • update: 从现有模型开始,只更新其树。在每个 Boosting 迭代中,从初始模型中取出一棵树,对该树运行指定序列的更新器,然后将修改后的树添加到新模型中。新模型的树数量将相同或更少,具体取决于执行的 Boosting 迭代次数。目前,以下内置更新器可有意义地与此过程类型一起使用:refresh, prune。使用 process_type=update 时,不能使用创建新树的更新器。

  • grow_policy [默认值= depthwise]

    • 控制向树添加新节点的方式。

    • 目前仅在 tree_method 设置为 histapprox 时支持。

    • 选项: depthwise, lossguide

      • depthwise: 在最接近根节点的节点处分裂。

      • lossguide: 在损失变化最大的节点处分裂。

  • max_leaves [默认值=0,类型=int32]

    • 要添加的最大节点数。不被 exact 树方法使用。

  • max_bin, [默认值=256,类型=int32]

    • 仅当 tree_method 设置为 histapprox 时使用。

    • 对连续特征进行分桶的最大离散 bin 数。

    • 增加此数量会提高分裂的最优性,但会增加计算时间。

  • num_parallel_tree, [默认值=1]

    • 每次迭代中构建的并行树的数量。此选项用于支持增强随机森林。

  • monotone_constraints

    • 变量单调性约束。有关更多信息,请参阅单调约束

  • interaction_constraints

    • 表示允许交互的交互约束。约束必须以嵌套列表的形式指定,例如 [[0, 1], [2, 3, 4]],其中每个内部列表是允许彼此交互的特征索引组。有关更多信息,请参阅特征交互约束

  • multi_strategy, [默认值 = one_output_per_tree]

    2.0.0 版本新增。

    注意

    此参数正在开发中。

    • 用于训练多目标模型的策略,包括多目标回归和多类分类。有关更多信息,请参阅多输出

      • one_output_per_tree: 每个目标一个模型。

      • multi_output_tree: 使用多目标树。

非精确树方法参数

  • max_cached_hist_node, [默认值 = 65536]

    直方图的最大缓存节点数。这可以与 histapprox 树方法一起使用。

    2.0.0 版本新增。

    • 大多数情况下,除了生长深层树,不应设置此参数。3.0 版本后,此参数也影响 GPU 算法。

  • extmem_single_page, [默认值 = false]

    此参数仅用于 hist 树方法,当 device=cudasubsample != 1.0 时。在 3.0 之前,页面总是被连接。

    3.0.0 版本新增。

    当使用外部内存时,基于 GPU 的 hist 树方法是否应将训练数据连接成单个批次,而不是按需获取数据。对于不支持地址转换服务的 GPU 设备,外部内存训练成本很高。此参数可以与子采样结合使用,以在不显著增加开销的情况下减少整体内存使用。有关更多信息,请参阅使用 XGBoost 外部内存版本

分类特征参数

这些参数仅用于分类数据训练。有关更多信息,请参阅分类数据

注意

这些参数是实验性的。exact 树方法尚未支持。

  • max_cat_to_onehot

    在版本 1.6.0 中添加。

    • 一个用于决定 XGBoost 是否应使用基于独热编码的分裂处理分类数据的阈值。当类别数量小于阈值时,选择独热编码,否则类别将被划分为子节点。

  • max_cat_threshold

    在 1.7.0 版本中添加。

    • 每个分裂考虑的最大类别数。仅用于基于分区的分裂以防止过拟合。

Dart Booster 的附加参数 (booster=dart)

注意

使用 DART Booster 的 predict()

如果 Booster 对象是 DART 类型,predict() 将执行 dropout,即只评估部分树。如果 data 不是训练数据,这将产生不正确的结果。要在测试集上获得正确的结果,请将 iteration_range 设置为非零值,例如:

preds = bst.predict(dtest, iteration_range=(0, num_round))
  • sample_type [默认值= uniform]

    • 采样算法类型。

      • uniform: 被丢弃的树均匀选择。

      • weighted: 被丢弃的树按权重比例选择。

  • normalize_type [默认值= tree]

    • 归一化算法类型。

      • tree: 新树的权重与每棵被丢弃的树的权重相同。

        • 新树的权重为 1 / (k + learning_rate)

        • 被丢弃的树按因子 k / (k + learning_rate) 进行缩放。

      • forest: 新树的权重与所有被丢弃的树(森林)的权重之和相同。

        • 新树的权重为 1 / (1 + learning_rate)

        • 被丢弃的树按因子 1 / (1 + learning_rate) 进行缩放。

  • rate_drop [默认值=0.0]

    • Dropout 率(在 dropout 期间丢弃的先前树的比例)。

    • 范围:[0.0, 1.0]

  • one_drop [默认值=0]

    • 当此标志启用时,在 dropout 期间总是至少丢弃一棵树(允许原始 DART 论文中的 Binomial-plus-one 或 epsilon-dropout)。

  • skip_drop [默认值=0.0]

    • 在 Boosting 迭代期间跳过 dropout 过程的概率。

      • 如果跳过 dropout,则新树的添加方式与 gbtree 相同。

      • 请注意,非零 skip_drop 具有比 rate_dropone_drop 更高的优先级。

    • 范围:[0.0, 1.0]

线性 Booster 参数 (booster=gblinear)

  • lambda [默认值=0,别名: reg_lambda]

    • 权重的 L2 正则化项。增加此值将使模型更保守。根据训练样本数进行归一化。

  • alpha [默认值=0,别名: reg_alpha]

    • 权重的 L1 正则化项。增加此值将使模型更保守。根据训练样本数进行归一化。

  • eta [默认值=0.5,别名: learning_rate]

    • 更新中使用的步长收缩,以防止过拟合。在每个 Boosting 步骤之后,我们可以直接获得新特征的权重,eta 收缩特征权重,使 Boosting 过程更加保守。

    • 范围:[0,1]

  • updater [默认值= shotgun]

    • 拟合线性模型的算法选择

      • shotgun: 基于 shotgun 算法的并行坐标下降算法。使用 'hogwild' 并行化,因此在每次运行中产生非确定性解决方案。

      • coord_descent: 普通坐标下降算法。也是多线程的,但仍然产生确定性解决方案。当 device 参数设置为 cudagpu 时,将使用 GPU 变体。

  • feature_selector [默认值= cyclic]

    • 特征选择和排序方法

      • cyclic: 通过一次循环遍历特征进行确定性选择。

      • shuffle: 类似于 cyclic,但在每次更新之前随机打乱特征。

      • random: 一个随机(有放回)坐标选择器。

      • greedy: 选择梯度幅度最大的坐标。它的复杂度为 O(num_feature^2)。它是完全确定性的。它允许通过设置 top_k 参数将选择限制为每组具有最大单变量权重变化幅度的 top_k 特征。这样做会将复杂度降低到 O(num_feature*top_k)

      • thrifty: 节俭的、近似贪婪的特征选择器。在循环更新之前,按其单变量权重变化的下降幅度重新排序特征。此操作是多线程的,是二次贪婪选择的线性复杂度近似。它允许通过设置 top_k 参数将选择限制为每组具有最大单变量权重变化幅度的 top_k 特征。

  • top_k [默认值=0]

    • greedythrifty 特征选择器中要选择的顶部特征的数量。值为 0 表示使用所有特征。

学习任务参数

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

  • objective [默认值=reg:squarederror]

    • reg:squarederror: 均方误差回归。

    • reg:squaredlogerror: 平方对数损失回归 \(\frac{1}{2}[log(pred + 1) - log(label + 1)]^2\)。所有输入标签都要求大于 -1。另外,请参阅度量 rmsle 以了解此目标可能存在的问题。

    • reg:logistic: 逻辑回归,输出概率

    • reg:pseudohubererror: 伪 Huber 损失回归,是绝对损失的二次可微替代。

    • reg:absoluteerror: L1 误差回归。当使用树模型时,叶值在树构建后刷新。如果在分布式训练中使用,叶值计算为所有 worker 的平均值,这不能保证是最优的。

      在 1.7.0 版本中添加。

    • reg:quantileerror: 分位数损失,也称为 pinball loss。有关其参数和工作示例,请参见后续章节和分位数回归

      2.0.0 版本新增。

    • binary:logistic: 二元分类的逻辑回归,输出概率

    • binary:logitraw: 二元分类的逻辑回归,输出逻辑转换前的分数

    • binary:hinge: 二元分类的 Hinge 损失。这会产生 0 或 1 的预测,而不是产生概率。

    • count:poisson: 计数数据的泊松回归,输出泊松分布的均值。

      • max_delta_step 在泊松回归中默认设置为 0.7(用于保护优化)

    • survival:cox: 针对右截尾生存时间数据(负值视为右截尾)的 Cox 回归。请注意,预测以风险比尺度返回(即,在比例风险函数 h(t) = h0(t) * HR 中,HR = exp(边际预测))。

    • survival:aft: 截尾生存时间数据的加速失效时间模型。有关详细信息,请参阅使用加速失效时间的生存分析

    • multi:softmax: 将 XGBoost 设置为使用 softmax 目标进行多类分类,您还需要设置 num_class(类别数)

    • multi:softprob: 与 softmax 相同,但输出 ndata * nclass 的向量,可以进一步重塑为 ndata * nclass 矩阵。结果包含每个数据点属于每个类别的预测概率。

    • rank:ndcg: 使用 LambdaMART 执行配对排名,以最大化归一化折损累积增益 (NDCG)。此目标支持点击数据的位置去偏。

    • rank:map: 使用 LambdaMART 执行配对排名,以最大化平均精度 (MAP)

    • rank:pairwise: 使用 LambdaRank 执行配对排名,使用 ranknet 目标。

    • reg:gamma: 对数链接的伽马回归。输出是伽马分布的均值。例如,它可能对保险索赔严重程度建模或任何可能服从伽马分布的结果有用。

    • reg:tweedie: 对数链接的 Tweedie 回归。例如,它可能对保险总损失建模或任何可能服从Tweedie 分布的结果有用。

  • base_score

    所有实例的初始预测分数,也称为全局偏差或截距。

    版本 3.1.0 中的变更: XGBoost 默认使用向量值截距。

    • 该参数在训练前针对选定的目标自动估计。要禁用估计,请指定一个实数参数,例如 base_score = 0.5

    • 如果提供了 base_margin,则不使用 base_score

    • 如果我们使用足够的迭代次数训练模型,更改此值不会带来显著的好处。

    有关更多信息,包括不同的用例,请参阅截距

  • eval_metric [默认值取决于目标]

    • 验证数据的评估指标,将根据目标分配默认指标(回归为 rmse,分类为 logloss,rank:map平均精度 等)。

    • 用户可以添加多个评估指标。Python 用户:请记住将指标作为参数对列表而不是映射传递,以便后续的 eval_metric 不会覆盖之前的。

    • 选项如下:

      • rmse: 均方根误差

      • rmsle: 均方根对数误差: \(\sqrt{\frac{1}{N}[log(pred + 1) - log(label + 1)]^2}\)reg:squaredlogerror 目标的默认指标。此指标减少数据集中异常值产生的误差。但由于使用了 log 函数,当预测值小于 -1 时,rmsle 可能会输出 nan。请参阅 reg:squaredlogerror 以了解其他要求。

      • mae: 平均绝对误差

      • mape: 平均绝对百分比误差

      • mphe: 平均伪 Huber 误差reg:pseudohubererror 目标的默认指标。

      • logloss: 负对数似然

      • error: 二元分类错误率。计算方法为 #(错误案例)/#(所有案例)。对于预测,评估会将预测值大于 0.5 的实例视为正实例,其他实例视为负实例。

      • error@t: 可以通过提供数值 't' 来指定不同于 0.5 的二元分类阈值。

      • merror: 多类分类错误率。计算方法为 #(错误案例)/#(所有案例)

      • mlogloss: 多类对数损失

      • auc: 受试者工作特征曲线下面积。适用于分类和学习排名任务。

        • 当用于二元分类时,目标应该是 binary:logistic 或类似作用于概率的函数。

        • 当用于多类分类时,目标应该是 multi:softprob 而不是 multi:softmax,因为后者不输出概率。此外,AUC 是通过 1 对其余类别的计算,参考类别按类别流行度加权。

        • 当用于 LTR 任务时,AUC 通过比较文档对来计算正确排序的对数。这对应于成对学习排名。该实现存在一些问题,即组和分布式工作者之间的平均 AUC 定义不清。

        • 在单机上,AUC 计算是精确的。在分布式环境中,AUC 是每个节点上训练行 AUC 的加权平均值——因此,分布式 AUC 是对数据在工作者之间分布敏感的近似值。如果精度和可重现性很重要,请在分布式环境中使用其他指标。

        • 当输入数据集只包含负样本或正样本时,输出为 NaN。行为是实现定义的,例如,scikit-learn 返回 \(0.5\)

      • aucpr: PR 曲线下面积。适用于分类和学习排名任务。

        XGBoost 1.6 之后,在分类问题中使用 aucpr 的要求和限制与 auc 相似。对于排名任务,仅支持二元相关性标签 \(y \in [0, 1]\)。与 map (mean average precision) 不同,aucpr 使用连续插值计算 *插值* 精度召回曲线下面积。

      • pre: \(k\) 处的精度。仅支持学习排名任务。

      • ndcg: 归一化折损累积增益

      • map: 平均精度

        平均精度 定义为

        \[AP@l = \frac{1}{min{(l, N)}}\sum^l_{k=1}P@k \cdot I_{(k)}\]

        其中 \(I_{(k)}\) 是一个指示函数,当位置 \(k\) 处的文档相关时等于 \(1\),否则等于 \(0\)\(P@k\) 是位置 \(k\) 处的精度,\(N\) 是相关文档的总数。最后,平均精度 定义为所有查询的加权平均值。

      • ndcg@n, map@n, pre@n: \(n\) 可以指定为整数,以截断列表中的前 N 个位置进行评估。

      • ndcg-, map-, ndcg@n-, map@n-: 在 XGBoost 中,NDCG 和 MAP 将不包含任何正样本的列表的分数评估为 \(1\)。通过在评估指标名称后附加“ - ”,我们可以要求 XGBoost 将这些分数评估为 \(0\),以便在某些条件下保持一致。

      • poisson-nloglik: 泊松回归的负对数似然

      • gamma-nloglik: 伽马回归的负对数似然

      • cox-nloglik: Cox 比例风险回归的负偏对数似然

      • gamma-deviance: 伽马回归的残差离差

      • tweedie-nloglik: Tweedie 回归的负对数似然(在指定 tweedie_variance_power 参数值时)

      • aft-nloglik: 加速失效时间模型的负对数似然。有关详细信息,请参阅使用加速失效时间的生存分析

      • interval-regression-accuracy: 预测标签落在区间截尾标签内的数据点比例。仅适用于区间截尾数据。有关详细信息,请参阅使用加速失效时间的生存分析

  • seed [默认值=0]

    • 随机数种子。在 R 包中,如果未指定,则不会默认为种子“零”,而是通过 R 自己的 RNG 引擎获取随机种子。

  • seed_per_iteration [默认值= false]

    • 通过迭代器编号确定性地设置 PRNG 种子。

Tweedie 回归参数 (objective=reg:tweedie)

  • tweedie_variance_power [默认值=1.5]

    • 控制 Tweedie 分布方差的参数 var(y) ~ E(y)^tweedie_variance_power

    • 范围:(1,2)

    • 设置接近 2 以偏向伽马分布

    • 设置接近 1 以偏向泊松分布。

使用 Pseudo-Huber 的参数 (reg:pseudohubererror)

  • huber_slope : 用于伪 Huber 损失的参数,用于定义 \(\delta\) 项。[默认值 = 1.0]

使用分位数损失的参数 (reg:quantileerror)

  • quantile_alpha: 标量或目标分位数列表。

    2.0.0 版本新增。

使用 AFT 生存损失 (survival:aft) 和 AFT 度量的负对数似然 (aft-nloglik) 的参数

  • aft_loss_distribution: 概率密度函数,normallogisticextreme

学习排名参数 (rank:ndcg, rank:map, rank:pairwise)

这些是学习排名任务特有的参数。有关深入解释,请参阅学习排名

  • lambdarank_pair_method [默认值 = topk]

    如何构建配对以进行配对学习。

    • mean: 为查询列表中的每个文档采样 lambdarank_num_pair_per_sample 对。

    • topk: 关注前 lambdarank_num_pair_per_sample 个文档。为模型排名前 lambdarank_num_pair_per_sample 的每个文档构建 \(|query|\) 对。

  • lambdarank_num_pair_per_sample [范围 = \([1, \infty]\)]

    它指定当配对方法为 mean 时,为每个文档采样的配对数量,或当配对方法为 topk 时,查询的截断级别。例如,要使用 ndcg@6 进行训练,将 lambdarank_num_pair_per_sample 设置为 \(6\),将 lambdarank_pair_method 设置为 topk

  • lambdarank_normalization [默认值 = true]

    在版本 2.1.0 中添加。

    是否通过 lambda 梯度归一化叶值。这有时会阻碍训练进程。

    在版本 3.0.0 中更改。

    当使用 mean 方法时,它由 lambdarank_num_pair_per_sample 而不是梯度进行归一化。

  • lambdarank_score_normalization [默认值 = true]

    3.0.0 版本新增。

    是否通过预测分数差异归一化 delta 度量。这有时会阻碍训练进程。通过配对排名,我们可以使用每对中两个样本之间的差异归一化梯度,以减少排名分数差异较大的配对的影响。这有助于我们对模型进行正则化,以减少偏差并防止过拟合。与其他正则化技术类似,这可能会阻止训练收敛。

    2.0 版本之前没有归一化。在 2.0 及更高版本中默认使用此功能。在 3.0 版本中,我们将其设置为用户可以禁用的选项。

  • lambdarank_unbiased [默认值 = false]

指定是否需要对输入点击数据进行去偏。

  • lambdarank_bias_norm [默认值 = 2.0]

    用于位置去偏的 \(L_p\) 归一化,默认值为 \(L_2\)。仅当 lambdarank_unbiased 设置为 true 时相关。

  • ndcg_exp_gain [默认值 = true]

    我们是否应该对 NDCG 使用指数增益函数。 NDCG 有两种形式的增益函数,一种是直接使用相关性值,另一种是使用 \(2^{rel} - 1\) 来强调检索相关文档。当 ndcg_exp_gain 为 true(默认值)时,相关性程度不能大于 31。

命令行参数

以下参数仅用于 XGBoost 的控制台版本。CLI 已弃用,并将在未来版本中移除。

  • num_round

    • Boosting 的轮数

  • 数据

    • 训练数据路径

  • test:data

    • 用于预测的测试数据路径

  • save_period [默认值=0]

    • 保存模型的周期。设置 save_period=10 意味着每 10 轮 XGBoost 将保存模型。将其设置为 0 意味着在训练期间不保存任何模型。

  • task [默认值= train] 选项: train, pred, eval, dump

    • train: 使用数据进行训练

    • pred: 对 test:data 进行预测

    • eval: 用于评估由 eval[name]=filename 指定的统计信息

    • dump: 用于将学习到的模型转储为文本格式

  • model_in [默认值=NULL]

    • 输入模型的路径,testevaldump 任务需要。如果在训练中指定,XGBoost 将从输入模型继续训练。

  • model_out [默认值=NULL]

    • 训练结束后输出模型的路径。如果未指定,XGBoost 将输出名为 0003.model 的文件,其中 0003 是 Boosting 轮数。

  • model_dir [默认值= models/]

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

  • fmap

    • 特征映射,用于转储模型

  • dump_format [默认值= text] 选项: text, json

    • 模型转储文件格式

  • name_dump [默认值= dump.txt]

    • 模型转储文件名

  • name_pred [默认值= pred.txt]

    • 预测文件名,在 pred 模式下使用

  • pred_margin [默认值=0]

    • 预测边距而不是转换后的概率