XGBoost 参数

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

  • 通用参数 与我们用于提升的 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 Memory Manager (RMM) 分配缓存 GPU 内存。当 XGBoost 启用 RMM 插件构建(编译)时,主内存始终在 RMM 池上分配。有效值为 truefalse。详情请参见 将 XGBoost 与 RAPIDS Memory Manager (RMM) 插件配合使用

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

通用参数

  • booster [默认值= gbtree]

    • 使用哪种 Booster。可以是 gbtree, gblineardartgbtreedart 使用基于树的模型,而 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 会尝试基于启发式方法更改配置,这会显示为警告消息。如果出现意外行为,请尝试增加详细程度的值。

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

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

  • nthread [未设置时默认为最大可用线程数]

    • 运行 XGBoost 使用的并行线程数。选择时,请考虑线程竞争和超线程。

  • disable_default_eval_metric [默认值= false]

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

树 Booster 参数

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

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

    • 范围: [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 在生成树之前会随机抽取一半的训练数据,这可以防止过拟合。子采样会在每次提升迭代中进行一次。

    • 范围: (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* 参数是累积生效的。例如,在 64 个特征的情况下,组合 {'colsample_bytree':0.5, 'colsample_bylevel':0.5, 'colsample_bynode':0.5} 将在每个分割时留下 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(negative instances) / sum(positive instances)。更多讨论请参见参数调优。此外,请参见 Higgs Kaggle 竞赛演示示例:R, py1, py2, py3

  • 更新器

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

      • 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]

    • 要运行的提升过程类型。

    • 选项: default, update

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

      • update: 从现有模型开始,只更新其树。在每次提升迭代中,从初始模型中取出一棵树,为该树运行指定的更新器序列,然后将修改后的树添加到新模型中。新模型将具有相同或更少的树数量,取决于执行的提升迭代次数。目前,以下内置更新器可以有意义地与此过程类型一起使用: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 时使用。

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

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

  • num_parallel_tree, [默认值=1]

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

  • 单调约束

    • 变量单调性的约束。更多信息请参见单调约束

  • 交互约束

    • 表示允许交互的交互约束。约束必须以嵌套列表的形式指定,例如 [[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]

    此参数仅用于 device=cudasubsample != 1.0hist 树方法。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]

    • 在提升迭代中跳过 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]

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

    • 范围: [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: 使用 log-link 的 gamma 回归。输出是 gamma 分布的均值。例如,这可能对建模保险索赔严重性,或任何可能呈gamma 分布的结果有用。

    • reg:tweedie: 使用 log-link 的 Tweedie 回归。例如,这可能对建模保险中的总损失,或任何可能呈Tweedie 分布的结果有用。

  • base_score

    • 所有实例的初始预测分数,全局偏差

    • 对于选定的目标,参数会在训练前自动估计。要禁用估计,请指定一个实数参数。

    • 如果提供了 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: 多类 logloss

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

        • 用于二分类时,目标应为 binary:logistic 或类似处理概率的函数。

        • 用于多类分类时,目标应为 multi:softprob 而不是 multi:softmax,因为后者不输出概率。此外,AUC 通过 1-vs-rest 计算,并根据类别的普遍程度对参考类别进行加权。

        • 用于 LTR(学习排序)任务时,通过比较文档对来计算 AUC,以统计正确排序的对。这对应于成对学习排序。此实现在处理组周围的平均 AUC 和分布式 workers 定义不明确方面存在一些问题。

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

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

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

        XGBoost 1.6 后,在分类问题中使用 aucpr 的要求和限制都与 auc 类似。对于排序任务,仅支持二元相关性标签 \(y \in [0, 1]\)。与 map (平均精度均值) 不同,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\) 可以指定为一个整数,用于在列表中截断顶部位置进行评估。

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

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

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

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

      • gamma-deviance: gamma 回归的残差偏差

      • 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 时倾向于 gamma 分布

    • 接近 1 时倾向于泊松分布。

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

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

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

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

    2.0.0 版本新增。

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

  • aft_loss_distribution: 概率密度函数,normal, logisticextreme

学习排序参数 (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]\)]

    它指定当 pair 方法为 mean 时每个文档采样的对数,或当 pair 方法为 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

    • 提升轮数

  • data

    • 训练数据路径

  • 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 是提升轮数。

  • model_dir [默认值= models/]

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

  • fmap

    • 特征映射,用于导出模型

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

    • 模型导出文件格式

  • name_dump [默认值= dump.txt]

    • 模型导出文件名

  • name_pred [默认值= pred.txt]

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

  • pred_margin [默认值=0]

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