使用给定的 x/y 数据拟合 XGBoost 模型(提升决策树集成)。
有关 XGBoost 功能的更详细说明,请参阅教程 提升树简介,有关 XGBoost 功能和用法的进一步说明,请参阅其余的 XGBoost 教程。
此函数旨在为 XGBoost 提供一个用户友好的接口,该接口遵循 R 的模型拟合和预测约定,但不暴露核心 XGBoost 库的所有可能功能。
有关更灵活的低级替代方案,请参见 xgb.train()
,该替代方案在 XGBoost 的不同语言绑定中类似,并暴露了其他功能,例如外部内存数据的训练和排序学习目标。
如果您是从 1.x 系列的先前版本迁移而来,另请参阅迁移指南。
默认情况下,这里的大多数参数都为 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
包的稀疏矩阵,可以是dgCMatrix
或dgRMatrix
类。
请注意,分类特征仅支持
data.frame
输入,并根据其类型自动确定。有关更灵活的变体(例如允许在稀疏矩阵上使用分类特征),请参见结合使用xgb.train()
和xgb.DMatrix()
。- y
响应变量。允许的值有
数值或整数向量(用于回归任务)。
因子型或字符型向量(用于二元分类和多类分类任务)。
逻辑型(布尔型)向量(用于二元分类任务)。
数值或整数 matrix 或具有数值/整数列的
data.frame
(用于多任务回归任务)。来自 'survival' 包的
Surv
对象(用于生存分析任务)。
如果
objective
为NULL
,则将根据y
的类别自动确定正确的任务。如果
objective
不为NULL
,则必须与y
的类型匹配 - 例如,y
的factor
类型只能用于分类目标,反之亦然。对于二元分类,
y
的最后一个因子水平将用作“正”类 - 也就是说,predict
输出的数值将反映属于此类的概率,而不是第一个因子水平的概率。如果y
是逻辑型向量,则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
的类型匹配 - 例如,y
的factor
类型只能用于分类目标,反之亦然。请注意,核心 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"
: 使用 Pseudo Huber 损失的回归,这是绝对损失的一种二次可微替代方法。"reg:absoluteerror"
: 使用 L1 误差的回归。使用树模型时,叶子值在树构建后刷新。如果在分布式训练中使用,叶子值计算为所有工作节点的平均值,这不保证是最优的。"reg:quantileerror"
: 分位数损失,也称为“弹珠损失”。有关其参数,请参见后续部分;有关工作示例,请参见分位数回归。"binary:logistic"
: 用于二元分类的逻辑回归,输出概率"binary:hinge"
: 用于二元分类的铰链损失(hinge loss)。这会产生 0 或 1 的预测,而不是概率。"count:poisson"
: 用于计数数据的泊松回归,输出泊松分布的均值。在泊松回归中,"max_delta_step"
默认设置为 0.7(用于保护优化过程)"survival:cox"
: 用于右侧截尾生存时间数据的 Cox 回归(负值被视为右侧截尾)。请注意,预测结果以风险比(hazard ratio)尺度返回(即,在比例风险函数
h(t) = h0(t) * HR
中,HR = exp(marginal_prediction))。"survival:aft"
: 用于截尾生存时间数据的加速失效时间模型。详情请参见加速失效时间模型的生存分析。"multi:softprob"
: 通过多项逻辑似然进行多类分类。"reg:gamma"
: 使用对数链接函数的 gamma 回归。输出是 gamma 分布的均值。例如,它可能用于建模保险索赔的严重性,或任何可能呈 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) 子节点中所需的实例权重(海森矩阵)的最小总和。如果树划分步骤导致叶节点的实例权重总和小于
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
x
和y
中每行的样本权重。如果为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_set
的评估数据上(由eval_metric
下传递的最后一个指标衡量,如果未传递eval_metric
,则由目标函数的默认指标衡量)性能没有改善,训练将在多少轮提升后停止。必须传递eval_set
才能使用此功能。如果为
NULL
,将不使用早停。- print_every_n
当传递
verbosity>0
且传递了monitor_training=TRUE
或eval_set
时,评估日志(在训练和/或评估数据上计算的指标)将根据此处传递的值每隔 n 次迭代打印一次。无论此 'n' 的值如何,第一次和最后一次迭代始终包括在内。仅在传递
verbosity>0
时有效。- eval_metric
(根据目标函数决定默认值)
验证数据的评估指标,将根据目标函数分配默认指标(回归使用 rmse,分类使用 logloss,
rank:map
使用mean 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"
: 平均 Pseudo Huber 误差。"reg:pseudohubererror"
目标的默认指标。"logloss"
: 负对数似然"error"
: 二元分类错误率。计算方式为#(错误案例)/#(所有案例)
。对于预测,评估会将预测值大于 0.5 的实例视为正例,其他视为负例。"error@t"
: 可以通过 't' 提供一个数值来指定与 0.5 不同的二元分类阈值。"merror"
: 多类分类错误率。计算方式为#(错误案例)/#(所有案例)
。"mlogloss"
: 多类对数损失。"auc"
: 受试者工作特征曲线下面积。适用于分类和排序学习任务。用于二元分类时,目标函数应为
"binary:logistic"
或类似处理概率的函数。用于多类分类时,目标函数应为
"multi:softprob"
而不是"multi:softmax"
,因为后者不输出概率。AUC 也通过 1-vs-rest 方式计算,参考类别按类别普遍性加权。用于 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"
: 平均精度均值average precision
定义为\(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\) 是相关文档的总数。最后,
mean average precision
定义为所有查询的加权平均值。"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"
: 预测标签落在区间截尾标签中的数据点比例。仅适用于区间截尾数据。详情请参见加速失效时间模型的生存分析。
- nthreads
使用的并行线程数。如果传递零,将使用所有 CPU 线程。
- seed
用于随机数生成的种子。如果传递
NULL
,将使用 R 的 PRNG 系统生成一个随机数作为种子。- base_margin
用于从现有模型开始提升的基础边距。
如果传递此参数,将从此处提供的分数开始梯度提升过程 - 例如,可以传递先前模型的原始分数,或某些按观测值偏移量,或类似值。
应为数值向量或数值 matrix(用于多类和多目标函数),其行数与
x
的行数相同,列数对应于优化目标的数量,且应采用未转换的尺度(例如,对于目标函数binary:logistic
,它应该是 log-odds,而不是概率;对于目标函数multi:softprob
,其列数应与数据中的类别数匹配)。请注意,如果它包含多于一列,则列不会按名称与相应的
y
匹配 -base_margin
应具有模型将使用的相同列顺序(例如,对于目标函数multi:softprob
,base_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)\)
- max_bin
(针对树助推器) (默认=256, 类型=int32)
仅当
tree_method
设置为"hist"
或"approx"
时使用。用于对连续特征进行分桶的最大离散桶数。
增加此数字可提高拆分的最佳性,但会增加计算时间。
- 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"
采样。
- feature_weights
用于列采样的特征权重。
可以作为长度与
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*"
参数是累积工作的。例如,对于具有 64 个特征的情况,组合{'colsample_bytree'=0.5, 'colsample_bylevel'=0.5, 'colsample_bynode'=0.5}
将在每次分裂时留下 8 个特征供选择。
可以使用
"feature_weights"
为 DMatrix 设置特征权重,以定义在使用列采样时每个特征被选择的概率。- 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 竞赛演示示例:R, py1, py2, py3。- 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 Release 安装 XGBoost 的 R 包 - 请参见说明。- disable_default_eval_metric
(默认=
FALSE
) 禁用默认指标的标志。设置为 1 或TRUE
禁用。- use_rmm
是否使用 RAPIDS Memory Manager (RMM) 来分配缓存 GPU 内存。当 XGBoost 构建(编译)时启用 RMM 插件,主内存始终分配在 RMM 池上。有效值为
TRUE
和FALSE
。详情请参见将 XGBoost 与 RAPIDS Memory Manager (RMM) 插件一起使用。- max_cached_hist_node
(针对非精确树方法) (默认 = 65536) 直方图的最大缓存节点数。可与
"hist"
和"approx"
树方法一起使用。添加版本: 2.0.0
在大多数情况下,除用于生长深树外,不应设置此参数。3.0 版本之后,此参数也影响 GPU 算法。
- extmem_single_page
(针对非精确树方法) (默认 =
FALSE
) 此参数仅用于"hist"
树方法且device="cuda"
和subsample != 1.0
。在 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) Dropout 率(dropout 过程中丢弃先前树的比例)。
范围: \([0.0, 1.0]\)
- one_drop
(针对 Dart 助推器) (默认=0) 启用此标志时,在 dropout 期间总是至少丢弃一棵树(允许原始 DART 论文中的 Binomial-plus-one 或 epsilon-dropout)。
- skip_drop
(针对 Dart 助推器) (默认=0.0) 在提升迭代期间跳过 dropout 过程的概率。
如果跳过 dropout,新树将以与
"gbtree"
相同的方式添加。请注意,非零的
skip_drop
优先级高于rate_drop
或one_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) 在
greedy
和thrifty
特征选择器中选择的靠前特征数量。值为 0 表示使用所有特征。- tweedie_variance_power
(针对 Tweedie 回归 (
"objective=reg:tweedie"
)) (默认=1.5)控制 Tweedie 分布方差的参数
var(y) ~ E(y)^tweedie_variance_power
范围: \((1,2)\)
设置为接近 2 可使其趋向 gamma 分布
设置为接近 1 可使其趋向泊松分布。
- huber_slope
(用于 Pseudo-Huber (
"reg:pseudohubererror
")) (默认 = 1.0) 用于 Pseudo-Huber 损失以定义 \(\delta\) 项的参数。- quantile_alpha
(用于分位数损失 (
"reg:quantileerror"
)) 一个标量或一个目标分位数列表(作为数值向量传递)。添加版本: 2.0.0
- aft_loss_distribution
(用于 AFT 生存损失 (
"survival:aft"
) 和 AFT 指标的负对数似然 ("aft-nloglik"
)) 概率密度函数,"normal"
,"logistic"
, 或"extreme"
。- ...
未使用。
此函数在先前 XGBoost 版本中的一些参数目前已弃用或已重命名。如果传递了弃用或重命名的参数,将抛出警告(默认情况下)并改用其当前等效项。如果使用“严格模式”选项,此警告将变为错误。
如果传递了既不是当前函数参数也不是弃用或重命名参数的额外参数,将根据“严格模式”选项抛出警告或错误。
重要:
...
将在未来版本中移除,并且所有当前的弃用警告都将变为错误。请仅使用构成函数签名一部分的参数。
返回值
一个模型对象,继承自 xgboost
和 xgb.Booster
。与 xgb.train()
生成的常规 xgb.Booster
模型类相比,此 xgboost
类将具有一个
额外的属性 metadata
,包含用于格式化预测输出的信息,例如分类问题的类名。
详情
对于将 'xgboost' 用作依赖项的包作者,强烈建议在包代码中使用 xgb.train()
而不是 xgboost()
,因为它具有更稳定的接口,并且在此过程中执行的数据转换和复制更少。
参考文献
Chen, Tianqi, and Carlos Guestrin. "Xgboost: A scalable tree boosting system." Proceedings of the 22nd acm sigkdd international conference on knowledge discovery and data mining. 2016.
示例
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
)