跳到内容

将 XGBoost 模型(梯度提升决策树集成)拟合到给定的 x/y 数据。

有关 XGBoost 功能的更详细解释,请参阅教程梯度提升树介绍;有关 XGBoost 特性和用法的进一步解释,请参阅其余的XGBoost 教程

此函数旨在为 XGBoost 提供一个用户友好的接口,该接口遵循 R 的模型拟合和预测约定,但并未公开核心 XGBoost 库的所有可能功能。

有关更灵活的低级替代方案,请参阅xgb.train(),它在 XGBoost 的不同语言绑定中类似,并公开了附加功能,例如在外部内存数据上训练和学习排名目标。

如果从 1.x 系列的早期版本 XGBoost 迁移,请参阅迁移指南

默认情况下,此处大多数参数的值为 NULL,这表示 XGBoost 使用其默认值。默认值由 XGBoost 核心库自动确定,并可能随 XGBoost 库版本而变化。其中一些可能因助推器类型而异(例如,线性助推器和基于树的助推器的正则化默认值不同)。有关参数的更多详细信息,请参阅xgb.params()在线文档 — 但请注意,xgboost() 接口不支持某些参数。

用法

xgboost(
  x,
  y,
  objective = NULL,
  nrounds = 100L,
  max_depth = NULL,
  learning_rate = NULL,
  min_child_weight = NULL,
  min_split_loss = NULL,
  reg_lambda = NULL,
  weights = NULL,
  verbosity = if (is.null(eval_set)) 0L else 1L,
  monitor_training = verbosity > 0,
  eval_set = NULL,
  early_stopping_rounds = NULL,
  print_every_n = 1L,
  eval_metric = NULL,
  nthreads = parallel::detectCores(),
  seed = 0L,
  base_margin = NULL,
  monotone_constraints = NULL,
  interaction_constraints = NULL,
  reg_alpha = NULL,
  max_bin = NULL,
  max_leaves = NULL,
  booster = NULL,
  subsample = NULL,
  sampling_method = NULL,
  feature_weights = NULL,
  colsample_bytree = NULL,
  colsample_bylevel = NULL,
  colsample_bynode = NULL,
  tree_method = NULL,
  max_delta_step = NULL,
  scale_pos_weight = NULL,
  updater = NULL,
  grow_policy = NULL,
  num_parallel_tree = NULL,
  multi_strategy = NULL,
  base_score = NULL,
  seed_per_iteration = NULL,
  device = NULL,
  disable_default_eval_metric = NULL,
  use_rmm = NULL,
  max_cached_hist_node = NULL,
  extmem_single_page = NULL,
  max_cat_to_onehot = NULL,
  max_cat_threshold = NULL,
  sample_type = NULL,
  normalize_type = NULL,
  rate_drop = NULL,
  one_drop = NULL,
  skip_drop = NULL,
  feature_selector = NULL,
  top_k = NULL,
  tweedie_variance_power = NULL,
  huber_slope = NULL,
  quantile_alpha = NULL,
  aft_loss_distribution = NULL,
  ...
)

参数

x

特征/协变量。可以作为以下形式传递

  • 数值或整数 matrix

  • 一个 data.frame,其中所有列都是以下类型之一

    • 数值

    • 整数

    • 逻辑

    • 因子

    factor 类型的列将被假定为分类,而其他列类型将被假定为数值。

  • 来自 Matrix 包的稀疏矩阵,可以是 dgCMatrixdgRMatrix 类。

请注意,分类特征仅支持 data.frame 输入,并根据其类型自动确定。有关更灵活的变体(例如稀疏矩阵上的分类特征),请参阅带有 xgb.DMatrix()xgb.train()

y

响应变量。允许的值为

  • 数值或整数向量(用于回归任务)。

  • 因子或字符向量(用于二元和多类别分类任务)。

  • 逻辑(布尔)向量(用于二元分类任务)。

  • 数值或整数矩阵或带有数值/整数列的 data.frame(用于多任务回归任务)。

  • 来自 'survival' 包的 Surv 对象(用于生存任务)。

如果 objectiveNULL,将根据 y 的类别自动确定正确的任务。

如果 objective 不为 NULL,则它必须与 y 的类型匹配——例如,yfactor 类型只能用于分类目标,反之亦然。

对于二元分类,y 的最后一个因子级别将用作“正”类别——也就是说,predict 的数字将反映属于此类别而不是第一个因子级别的概率。如果 y 是一个 logical 向量,则 TRUE 将设置为最后一个级别。

objective

要根据提供的数据最小化的优化目标,以字符串/字符形式(例如 reg:absoluteerror)按名称传递。有关允许值的更详细信息,请参阅学习任务参数页面和 xgb.params() 文档。

如果为 NULL(默认值),将根据以下逻辑从 y 自动确定

  • 如果 y 是具有 2 个级别的因子,将使用 binary:logistic

  • 如果 y 是具有 2 个以上级别的因子,将使用 multi:softprob(类别数量将自动确定,不应在 params 下传递)。

  • 如果 y 是来自 survival 包的 Surv 对象,将使用 survival:aft(请注意,仅支持左/右/区间删失类型)。

  • 否则,将使用 reg:squarederror

如果 objective 不为 NULL,则它必须与 y 的类型匹配——例如,yfactor 类型只能用于分类目标,反之亦然。

请注意,核心 XGBoost 库支持并非所有可能的 objective 值都允许在此处使用——例如,不允许使用其他目标的变体但具有不同默认预测类型(例如 multi:softmax vs. multi:softprob)的目标,目前也不允许排名目标,也不允许自定义目标。

支持的值为

  • "reg:squarederror":使用平方损失的回归。

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

  • "reg:pseudohubererror":使用伪 Huber 损失的回归,它是绝对损失的两次可微替代。

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

  • "reg:quantileerror":分位数损失,也称为“pinball 损失”。请参阅后面的部分了解其参数,并参阅分位数回归了解工作示例。

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

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

  • "count:poisson":计数数据的泊松回归,输出泊松分布的均值。泊松回归中默认将 "max_delta_step" 设置为 0.7(用于保护优化)

  • "survival:cox":右删失生存时间数据的 Cox 回归(负值被视为右删失)。

    请注意,预测以风险比尺度返回(即,在比例风险函数 h(t) = h0(t) * HR 中,HR = exp(边缘预测))。

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

  • "multi:softprob":通过多项逻辑似然进行多类别分类。

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

  • "reg:tweedie":具有对数链接的 Tweedie 回归。它可能有用,例如,用于模拟保险中的总损失,或用于任何可能是Tweedie 分布的结果。

以下值不被 xgboost 支持,但被 xgb.train() 支持(有关详细信息,请参阅 xgb.params()

  • "reg:logistic"

  • "binary:logitraw"

  • "multi:softmax"

  • "rank:ndcg"

  • "rank:map"

  • "rank:pairwise"

nrounds

提升迭代/轮数。

请注意,此处默认的提升轮数不会自动调整,不同的问题将有截然不同的最佳提升轮数。

max_depth

(对于树助推器)(默认值=6,类型=int32)树的最大深度。增加此值将使模型更复杂,更容易过拟合。0 表示深度无限制。请注意,当训练深层树时,XGBoost 会大量消耗内存。"exact" 树方法需要非零值。

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

learning_rate

(别名:eta)更新中使用的步长收缩,以防止过拟合。在每个提升步骤之后,我们可以直接获得新特征的权重,而 learning_rate 会收缩特征权重,使提升过程更加保守。

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

  • 默认值:基于树的助推器为 0.3,线性助推器为 0.5。

min_child_weight

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

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

min_split_loss

(对于树助推器)(默认值=0,别名:gamma)在树的叶节点上进行进一步分区所需的最小损失减少。min_split_loss 越大,算法就越保守。请注意,即使没有进行任何分割的树也可能包含一个具有非零分数的单个终端节点。

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

reg_lambda

(别名:lambda

  • 对于基于树的助推器

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

    • 默认值:1

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

  • 对于线性助推器

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

    • 默认值:0

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

weights

xy 中每行的样本权重。如果为 NULL(默认值),则每行将具有相同的权重。

如果不为 NULL,则应以长度与 x 的行数匹配的数值向量形式传递。

verbosity

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

monitor_training

是否监控输入数据上的目标优化进度。请注意,相同的 'x' 和 'y' 数据用于模型拟合和评估。

eval_set

用作评估数据集的数据子集。可以作为以下形式传递

  • 指示要指定为评估数据的观测值的行索引向量(从 1 开始计数)。

  • 介于零和一之间的数字,表示输入数据中用作评估数据的随机分数。请注意,选择将均匀随机进行,而不考虑参数 weights

如果传入,此数据子集将从训练过程中排除,并且在每次提升迭代后,将在此数据集上计算 eval_metric 下提供的评估指标(传入 verbosity>0 以在训练期间打印这些指标)。如果未传入 eval_metric,则将根据 objective 选择默认指标。

如果传入分数,在分类问题中,评估集将以这样的方式选择,即每个类别的至少一个观测值将保留在训练数据中。

对于更复杂的评估变体(例如自定义指标、多个评估集等),可能需要使用 xgb.train()

early_stopping_rounds

在性能没有改善(由 eval_metric 下传递的最后一个指标,或如果未传递 eval_metric 则由目标的默认指标)在 eval_set 的评估数据上测量之后,训练将停止的提升轮数。必须传入 eval_set 才能使用此功能。

如果为NULL,则不使用提前停止。

print_every_n

当传入 verbosity>0monitor_training=TRUEeval_set 时,评估日志(在训练和/或评估数据上计算的指标)将根据此处传递的值每 n 次迭代打印一次。无论此 'n' 的值如何,第一个和最后一个迭代始终包含在内。

仅当传入 verbosity>0 时才有效。

eval_metric

(默认值根据目标而定)

  • 验证数据的评估指标,将根据目标分配默认指标(回归为 rmse,分类为 logloss,rank:mapmean average precision 等)

  • 用户可以添加多个评估指标。

  • 选项如下:

    • "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"(平均精度)不同,"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":伽马回归的负对数似然

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

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

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

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

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

nthreads

使用的并行线程数。如果传入零,将使用所有 CPU 线程。

seed

用于随机数生成的种子。如果传入 NULL,将使用 R 的 PRNG 系统抽取一个随机数作为种子。

基本边距

从现有模型进行提升所使用的基本边距。

如果传入此参数,将从此处提供的分数开始梯度提升过程——例如,可以传入先前模型的原始分数、每个观测值的偏移量或类似数据。

它应该是一个数值向量或数值矩阵(用于多类别和多目标目标),其行数与 x 的行数相同,列数与优化目标的数量相对应,并且应该在未转换的尺度上(例如,对于目标 binary:logistic,它应该具有对数赔率,而不是概率;对于目标 multi:softprob,列数应与数据中的类别数量匹配)。

请注意,如果它包含多于一列,则列将不会按名称与相应的 y 匹配——base_margin 应具有模型将使用的相同列顺序(例如,对于目标 multi:softprobbase_margin 的列将按其位置与 levels(y) 匹配,无论 colnames(base_margin) 返回什么)。

如果为 NULL,将从零开始,但请注意,对于大多数目标,当未传递 base_margin 时,通常会添加一个截距(可通过参数 base_score 控制)。

monotone_constraints

特征的单调性约束(可选)。

可以作为命名列表(当 x 具有列名时)或向量传递。如果作为向量传递且 x 具有列名,将尝试按名称匹配元素。

给定特征的值为 +1 会使模型预测/分数受限于该特征的单调递增函数(即,随着特征值的增加,模型预测不能减少),而值为 -1 会使其成为单调递减函数。值为零表示不施加约束。

如果命名,monotone_constraints 的输入可以是 x 列的子集,在这种情况下,monotone_constraints 中未引用的列将被假定为值为零(对这些特征的模型不施加约束)。

有关更详细的解释,请参阅教程单调性约束

interaction_constraints

表示允许交互的交互约束。约束必须以引用数据中列的向量列表形式指定,例如 list(c(1, 2), c(3, 4, 5))(这些数字是列索引,从 1 开始计数——即,第一个子列表引用第一列和第二列)或 list(c("Sepal.Length", "Sepal.Width"), c("Petal.Length", "Petal.Width"))(按名称引用列),其中每个向量是一组允许相互交互的特征的索引。

有关更多信息,请参阅教程特征交互约束

reg_alpha

(别名:reg_alpha

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

  • 对于线性助推器,它被归一化为训练样本数。

  • 默认值:0

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

最大 bin 数

(对于树助推器)(默认值=256,类型=int32)

  • 仅当 tree_method 设置为 "hist""approx" 时使用。

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

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

max_leaves

(对于树助推器)(默认值=0,类型=int32)要添加的最大节点数。不被 "exact" 树方法使用。

booster

(默认值= "gbtree")使用哪个助推器。可以是 "gbtree""gblinear""dart""gbtree""dart" 使用基于树的模型,而 "gblinear" 使用线性函数。

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" 采样。

特征权重

用于列采样的特征权重。

可以作为长度与 x 的列匹配的向量传递,或作为命名列表(仅当 x 具有列名时)传递,名称与 'x' 的列匹配。如果它是命名向量,将尝试按名称将条目与 x 的列名匹配。

如果为 NULL(默认值),则所有列将具有相同的权重。

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 个特征可供选择。

可以为 DMatrix 设置 "feature_weights",以在使用列采样时定义每个特征被选择的概率。

tree_method

(对于树助推器)(默认值= "auto")XGBoost 中使用的树构建算法。请参阅参考论文树方法中的描述。

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

  • "auto":与 "hist" 树方法相同。

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

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

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

max_delta_step

(对于树助推器)(默认值=0)我们允许每个叶子输出的最大 delta 步长。如果该值设置为 0,则表示没有约束。如果设置为正值,则有助于使更新步骤更保守。通常不需要此参数,但在类极度不平衡的逻辑回归中可能有用。将其设置为 1-10 范围内的值可能有助于控制更新。

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

scale_pos_weight

(对于树助推器)(默认值=1)控制正负权重之间的平衡,对不平衡类别非常有用。一个典型的考虑值:sum(负实例) / sum(正实例)。有关更多讨论,请参阅参数调整。另请参阅 Higgs Kaggle 竞赛演示以获取示例:Rpy1py2py3

updater

(对于线性助推器)(默认值= "shotgun")拟合线性模型的算法选择

  • "shotgun":基于 shotgun 算法的并行坐标下降算法。使用 'hogwild' 并行性,因此每次运行时都会产生非确定性解。

  • "coord_descent":普通坐标下降算法。也支持多线程,但仍产生确定性解。当 device 参数设置为 "cuda""gpu" 时,将使用 GPU 变体。

grow_policy

(对于树助推器)(默认值= "depthwise"

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

  • 目前仅当 tree_method 设置为 "hist""approx" 时支持。

  • 选择:"depthwise""lossguide"

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

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

num_parallel_tree

(对于树助推器)(默认值=1)每次迭代中构建的并行树的数量。此选项用于支持提升随机森林。

multi_strategy

(对于树助推器)(默认值 = "one_output_per_tree")用于训练多目标模型的策略,包括多目标回归和多类别分类。有关更多信息,请参阅多输出

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

  • "multi_output_tree":使用多目标树。

添加版本:2.0.0

注意:此参数正在开发中。

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

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

  • 如果提供了 base_margin,则不会添加 base_score

  • 对于足够的迭代次数,更改此值不会产生太大影响。

seed_per_iteration

(默认值= FALSE)通过迭代器编号确定性地为 PRNG 设置种子。

device

(默认值= "cpu")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"

添加版本:2.0.0

注意:如果 XGBoost 是从 CRAN 安装的,它将不会启用 GPU 支持,因此只有 "cpu" 可用。要获得 GPU 支持,必须从源代码或 GitHub 发布版安装 XGBoost 的 R 包——请参阅说明

disable_default_eval_metric

(默认值= FALSE)禁用默认指标的标志。设置为 1 或 TRUE 以禁用。

use_rmm

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

max_cached_hist_node

(对于非精确树方法)(默认值 = 65536)直方图的最大缓存节点数。这可以与 "hist""approx" 树方法一起使用。

添加版本:2.0.0

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

extmem_single_page

(对于非精确树方法)(默认值 = FALSE)此参数仅用于 device="cuda"subsample != 1.0"hist" 树方法。在 3.0 之前,页面总是连接在一起的。

添加版本:3.0.0

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

max_cat_to_onehot

(对于非精确树方法)决定 XGBoost 是否对分类数据使用独热编码分割的阈值。当类别数量小于阈值时,选择独热编码,否则类别将被划分到子节点中。

添加版本:1.6.0

max_cat_threshold

(对于非精确树方法)每次分割考虑的最大类别数。仅由基于分区的分割使用,以防止过拟合。

添加版本:1.7.0

sample_type

(对于 Dart 助推器)(默认值= "uniform")采样算法的类型。

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

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

normalize_type

(对于 Dart 助推器)(默认值= "tree")归一化算法的类型。

  • "tree":新树与每个被丢弃的树具有相同的权重。

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

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

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

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

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

rate_drop

(对于 Dart 助推器)(默认值=0.0)丢弃率(在丢弃过程中丢弃前几棵树的比例)。

范围:\([0.0, 1.0]\)

one_drop

(对于 Dart 助推器)(默认值=0)当启用此标志时,在丢弃过程中至少会丢弃一棵树(允许原始 DART 论文中的 Binomial-plus-one 或 epsilon-dropout)。

skip_drop

(对于 Dart 助推器)(默认值=0.0)在提升迭代期间跳过丢弃过程的概率。

  • 如果跳过丢弃,则以与 "gbtree" 相同的方式添加新树。

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

范围:\([0.0, 1.0]\)

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 表示使用所有特征。

tweedie_variance_power

(对于 Tweedie 回归("objective=reg:tweedie"))(默认值=1.5)

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

  • 范围:\((1,2)\)

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

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

huber_slope

(用于伪 Huber("reg:pseudohubererror"))(默认值 = 1.0)用于伪 Huber 损失以定义 \(\delta\) 项的参数。

quantile_alpha

(用于分位数损失("reg:quantileerror"))一个标量或目标分位数列表(作为数值向量传递)。

添加版本:2.0.0

aft_loss_distribution

(用于 AFT 生存损失("survival:aft")和 AFT 度量的负对数似然("aft-nloglik"))概率密度函数,"normal""logistic""extreme"

...

未使用。

在以前的 XGBoost 版本中,此函数的一些参数已被弃用或重命名。如果传递已弃用或重命名的参数,将(默认)抛出警告并改用其当前等效项。如果使用 '严格模式'选项,此警告将变为错误。

如果传递了既不是当前函数参数也不是已弃用或重命名参数的附加参数,则根据“严格模式”选项,将抛出警告或错误。

重要: ... 将在未来版本中删除,所有当前的弃用警告将变为错误。请仅使用构成函数签名的参数。

一个模型对象,继承自 xgboostxgb.Booster。与 xgb.train() 生成的常规 xgb.Booster 模型类相比,此 xgboost 类将具有

一个额外的属性 metadata,其中包含用于格式化预测输出的信息,例如分类问题的类名。

详细信息

对于使用 'xgboost' 作为依赖项的包作者,强烈建议在包代码中使用 xgb.train() 而不是 xgboost(),因为它具有更稳定的接口,并且在此过程中执行的数据转换和复制更少。

参考文献

  • 陈天奇和 Carlos Guestrin。“Xgboost:一个可扩展的树提升系统。” 第 22 届 ACM SIGKDD 知识发现和数据挖掘国际会议论文集。2016。

  • https://docs.xgboost.com.cn/en/stable/

示例

data(mtcars)

# Fit a small regression model on the mtcars data
model_regression <- xgboost(mtcars[, -1], mtcars$mpg, nthreads = 1, nrounds = 3)
predict(model_regression, mtcars, validate_features = TRUE)

# Task objective is determined automatically according to the type of 'y'
data(iris)
model_classif <- xgboost(iris[, -5], iris$Species, nthreads = 1, nrounds = 5)
predict(model_classif, iris[1:10,])
predict(model_classif, iris[1:10,], type = "class")

# Can nevertheless choose a non-default objective if needed
model_poisson <- xgboost(
  mtcars[, -1], mtcars$mpg,
  objective = "count:poisson",
  nthreads = 1,
  nrounds = 3
)

# Can calculate evaluation metrics during boosting rounds
data(ToothGrowth)
xgboost(
  ToothGrowth[, c("len", "dose")],
  ToothGrowth$supp,
  eval_metric = c("auc", "logloss"),
  eval_set = 0.2,
  monitor_training = TRUE,
  verbosity = 1,
  nthreads = 1,
  nrounds = 3
)