XGB系列-XGB参数指南

XGBoost 参数


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

  1. 通用参数:是选择用来迭代提升的模型有关的参数,通常是树型或线性模型
  2. 提升参数:取决于您选择的基模型(booster)
  3. 任务参数:决定学习场景。例如,回归任务可能使用不同的参数对任务进行排序。

命令行参数:与 XGBoost 的 CLI 版本的行为有关。
R包中的参数:在 R 包中,您可以使用。(dot)来替换参数中的下划线,例如,可以使用 max.deep 来指示 max_deep。下划线参数在 R 中也是有效的。

  • 全局配置
  • 通用参数
    • 提升树参数
    • 基于树模型的额外参数:hist、 gpu_hist
    • dart提升树的附加参数(booster=dart)
    • 线性booster的参数(booster=gblinear)
  • 任务参数
    • tweedie回归的参数(Objective=reg: Twitdie)
    • Pseudo-Huber的参数(reg:pseudohubererror)
  • 命令行参数

全局配置

可以使用 py:func:‘xgboost.config_context()’(Python)或 xgb.set.config()®在全局范围内设置以下参数。

  • verbosity: 过程输出信息的打印。0(silent), 1(warning), 2(info), 3(debug)
  • use_rmm: 是否使用 RAPIDS 内存管理器(RMM)来分配 GPU 内存。此选项仅适用于在启用了 RMM 插件的情况下构建(编译) XGBoost 时。有效值为 true 和 false。

通用参数

  • booster[default=gbtree]
    • 迭代过程中,选择的基模型(booster)。可以是 gbtree、 gblinear 或 dart;gbtree 和 dart 使用基于树的模型,而 gblinear 使用线性函数。
  • verbosity[default=1]
    • 过程信息的输出等级,0(silent), 1(warning), 2(info), 3(debug)。有时候,XGBoost试图基于启发式方法更改配置,启发式方法输出信息显示为警告消息。如果有意想不到的行为,可以尝试修改verbosity的值。
  • validate_parameters[default=false]【不可在Python,R 和 CLI 接口中设置】
    • 这是一个实验性质的参数,当设置为 True 时,XGBoost 将对输入参数执行验证,以检查是否使用了某个参数。开发中的参数可能有一些误报。不建议使用
  • nthread[默认设置为最大可用线程数]
    • 用于运行 XGBoost 的并行线程的数量,如果不设置,则默认使用可用的最大线程数
  • disable_default_eval_metric[default=false]
    • 禁用默认指标的标志。设置为1或 true 禁用。
  • num_feature[由 XGBoost 自动设置,用户无需设置]
    • boosting过程中特征的维度,该值等于输入特征的最大维度

提升参数

  • eta[default=0.3, 别称: learning_rate]
    • 学习率
    • 范围: [0,1]
  • gamma [default=0, alias: min_split_loss]
    • 在树的叶子节点上进行进一步分区所需的最小损失减少。伽马值越大,算法就越保守。
    • 范围: [0,∞]
  • max_depth[default=6]
    • 树的最大深度。增加这个值将使模型更加复杂,并且有可能过拟合。0表示没有深度限制。在训练深度树时,XGBoost 会大量消耗内存。一般需要设置为非零值。
    • 范围: [0,∞]
  • min_child_weight[default=1]
    • 叶子节点所需要的最小值。如果进一步分裂后的树的叶子节点值小于 min_child_weight,则停止分裂。在线性回归任务中,这个值是每个节点所需的最小数量。min_child_weight越大则算法越保守。
    • 范围: [0,∞]
  • max_delta_step[default=0]
    • 允许每个叶输出的最大 delta 步长。如果该值设置为0,则表示没有约束。如果将其设置为正值,则有助于使更新步骤更加保守。通常不需要这个参数,但是当类极度不平衡时,对于逻辑回归任务是有帮助的。设置为值1-10可能有助于控制更新。
    • 范围: [0,∞]
  • subsample[default=1]
    • 样本采样比例。设置为0.5意味着 XGBoost 将在树木生长之前随机抽样一半的训练数据,这样可以防止过拟合。行采样(样本采样)在每次boosting迭代中发生一次。
    • 范围: (0,1)
  • sampling_method[default=uniform]
    • 用于样本采样的方法,默认是均匀分布采样
    • uniform: 每个训练实例被选中的概率相等。通常设置子样本 >=0.5 以获得良好的结果。
    • gradient_based: 基于梯度: 每个训练实例的选择概率与梯度的正则化绝对值成正比。注意,只有当 tree_method 设置为 gpu_hist 时才支持这种采样方法; 其他树方法只支持均匀采样(uniform)。
  • colsample_bytree, colsample_bylevel, colsample_bynode [default=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_weight,以定义在使用列抽样时每个特性被选中的概率。在 sklearn 接口中有一个类似的fit方法参数。
  • lambda [default=1, 别称: reg_lambda]
    • L2正则项对权重的影响。增加这个值会使模型更加保守。
  • alpha[default=0, 别称: reg_alpha]
    • L1正则项对权重的影响。增加这个值会使模型更加保守。
  • tree_method string [default=auto]
    • XGBoost 中使用的树构造算法。参见参考文献中的说明和: doc:‘treemmethod’。
    • XGBoost 为分布式训练提供了 approx、hist 和 gpu_hist 支持。实验表明,对于approx和gpu_list方法需要额外的内存。
    • 可选值: auto, exact, approx, hist, gpu_hist
      • auto: 使用启发式选择最快的方法
        • 对于小数据集,将使用精确贪婪(精确)。
        • 对于较大的数据集,将选择近似算法(约)。建议尝试 hist 和 gpu_hist 以获得更高的大数据集性能。(gpu_hist)支持外部内存。
          Because old behavior is always use exact greedy in single machine, user will get a message when approximate algorithm is chosen to notify this choice.
        • 旧版本的api,是单机执行精准贪婪,设置为近似算法的时候会有提示信息输出。
      • exact: 精确的贪婪算法。枚举所有分割的候选者。
      • approx: 利用分位数草图和梯度直方图近似贪婪算法。
      • hist: 更快的直方图优化近似贪婪算法。
      • gpu_hist: hist 算法的 GPU 实现。
  • sketch_eps [default=0.03]
    • 仅用于 updater=growth_local_hismaker。
    • 与直接选择箱数相比,通过该方法具有理论保证和更高精度。
    • 通常用户不必调整此。但是考虑设置一个较低的数字,以便更准确地枚举分割的候选者。
    • 范围: (0,1)
  • scale_pos_weight [default=1]
    • 控制正负样本的比例,对不平衡的类别是有用。典型的取值逻辑是: sum (负实例)/sum (正实例)
  • updater
    • 定义要运行的树更新流程,提供构造和修改树的模块化方法。这是一个高级参数,通常根据其他一些参数自动设置。但是,它也可以由用户显式设置。现有以下更新:
      • grow_colmaker: 基于列的树的非分布式构造。
      • grow_histmaker: 基于直方图计数全局方案的基于行数据分割的分布式树结构。
      • grow_local_histmaker: 基于局部直方图计数。
      • grow_quantile_histmaker: 用量化直方图生长树。
      • grow_gpu_hist: 使用 GPU 生长树。
      • sync: 同步所有分布式节点中的树。
      • refresh: 根据当前数据刷新树的统计信息和叶子值。请注意,不执行数据行的随机子抽样。
      • prune: 修剪 loss < min_split_loss (或 γ)和深度大于 max_deep 的节点。
  • refresh_leaf [default=1]
    • 这是刷新更新程序的一个参数。当此标志为1时,树叶以及树节点的统计信息将更新。如果为0,则只更新节点统计信息。
  • process_type [default=default]
    • booting过程控制参数,通常不必设置
    • 可选: default, update
      • default: 正常的创建一个新树过程。
      • update: 从现有模型开始,只更新其树。在每次增强迭代中,从初始模型获取一棵树,为该树运行指定的更新器序列,并向新模型添加修改后的树。根据所执行的增强迭代的数量,新模型将具有相同或更小的树数量。目前,这种流程类型可以有意义地使用以下内置更新程序:。使用 process_type=update 时,不能使用创建新树的更新程序。
  • grow_policy [default=depthwise]
    • 控制向树中添加新节点的方式。
    • 目前只有当 tree_method 被设置为 hist、 approx 或 gpu_hist 时才受支持。
    • 可选: depthwise, lossguide
      • depthwise: 在离根最近的节点上拆分。
      • lossguide: 在损耗变化最大的节点上分裂。
  • max_leaves[default=0]
    • 要添加的最大节点数。精确树方法不使用。
  • max_bin[default=256]
    • 只有在 tree_method 设置为 hist、 approx 或 gpu_hist 时才使用。
    • 对于连续特征的最大分桶数,增加这一数字可以提高分拆的最优性,但代价是提高计算时间。
  • predictor[default=auto]
    • 要使用的预测器算法的类型。提供相同的结果,但允许使用 GPU 或 CPU
      auto: 基于启发式配置预测器。
      cpu_predictor: 多核 CPU 预测算法。
      gpu_predictor: 使用 GPU 进行预测。当 tree_method 为 gpu_hist 时使用。当预测器设置为默认值 auto 时,GPU_hist 树方法能够提供基于 GPU 的预测,而无需将训练数据复制到 GPU 内存中。如果显式指定了 gpu_predictor,则将所有数据复制到 GPU 中,仅推荐用于执行预测任务。
  • num_parallel_tree[default=1]
    • 在每次迭代期间构造的并行树的数量。此选项用于支持增强随机林。
  • monotone_constraints
    • 高级参数,可变单调性的约束。
  • interaction_constraints
    • 表示允许的交互的交互约束。约束必须以嵌套列表的形式指定,例如[[0,1] ,[2,3,4]] ,其中每个内部列表是一组允许相互交互的特性索引。

基于树模型的附加参数hist, gpu_hist 还有approx

  • single_precision_histogram, [default=false]
    • 使用单精度代替双精度构建直方图。
  • max_cat_to_onehot
    • 这个参数需要1.6版本以上,且属于开发中参数
    • 一个阈值,用于决定 XGBoost 是否应该对分类数据使用基于拆分的一次性编码。当类别的数量小于阈值时,则选择一onehot编码,否则类别将被划分为子节点。只与回归和二分类有关。此外,不支持精确树方法

DartBooster的额外参数(booster=dart)

如果基模型是 dart类型,则预测函数predict()将执行dropouts操作,即只对一些树进行评估。如果数据不是训练数据,这将产生不正确的结果。要在测试集上获得正确的结果,请将迭代范围设置为非零值,例如。

preds=bst.predict(dtest, iteration_range=(0, num_round))
  • sample_type [default=uniform]
    • 采样算法类型
      • uniform: 均匀采样(等概率采样)
      • weighted: 按权重比例采样
  • normalize_type [default=tree]
    • 归一化算法类型
      • tree: 新的树木具有相同的权重的每一个dropout的树木
        • 新树权重为1/(k + 学习率)。
        • dropou’t的树按 k/(k + 学习率)的因子进行缩放。
      • forest: 新的树是已有数的权重总和
        • 新树权重为1/(1 + 学习率)。
        • dropout的树按1/(1 + 学习率)的因子进行缩放。
  • rate_drop [default=0.0]
    • 退出率(退出期间退出的树木的一小部分)。
    • 范围: [0.0,1.0]
  • one_drop [default=0]
    • 当这个标志被启用时,至少有一棵树总是在drop过程中被删除(允许二项式加一或从原始 DART 文件中被删除)。
  • skip_drop [default=0.0]
    • 在boosting期间跳过dropout过程的似然
      • 如果跳过一个dropout过程,那么将以与 gbtree 相同的方式添加新树。
      • 注意,非零的 skop_drop 比 rate_drop 或 one_drop 具有更高的优先级。
    • 范围: [0.0,1.0]

线性提升参数(booster=gblinear)

  • lambda [default=0, alias:reg_lambda]
    • L2加权正则项。增加这个值会使模型更加保守。
  • alpha [default=0, alias: reg_alpha]
    • L1关于权重的正则项。增加这个值会使模型更加保守。
  • updater [default=shotgun]
    • 线性模型拟合算法的选择
      • shotgun: 基于shotgun算法的平行坐标下降法算法。使用"hogwild"并行性,因此在每次运行时产生一个不确定的解决方案。
      • coord_descent: 普通的坐标下降法算法,也是多线程的,但仍然产生一个确定的解决方案。
  • feature_selector [default=cyclic]
    • 特征选择与排序方法
      • cyclic: 通过一次循环遍历一个特征来进行确定性选择。
      • shuffle: 类似于循环,但是在每次更新之前使用随机的特性 shuffle。
      • random: 一个随机的(有替换的)特征选择器。
      • greedy: 选择最大梯度大小的坐标。它具有 O(num_Feature^2)复杂性。它是完全确定的。它允许通过设置 top_k 参数,将选择限制为单变量权重变化幅度最大的每个组的 top_k 特性。这样做可以将复杂性降低到 O(num_Feature * top_k)。
      • thrifty: 近乎贪婪的特性选择器。在循环更新之前,重新排序特性的单变量权重变化的下降幅度。这个操作是多线程的,是二次贪婪选择的线性复杂度近似。它允许通过设置 top_k 参数,将选择限制为单变量权重变化幅度最大的每个组的 top_k 特性。
  • top_k [default=0]
    • 在greedy和thrifty的特性选择器中要选择的头部特性的数量。0表示使用所有特性。

Learning Task Parameters 学习任务参数

指定学习任务及相应的学习目标,可选的参数如下:

  • objective [default=reg:squarederror]
    • reg:squarederror: 回归与平方损失。
    • reg:squaredlogerror: 使用平方对数损失 frac{1}{2}[ log (pred + 1)-log (label + 1)] ^ 2的回归。所有输入标签都必须大于 -1。
    • reg:logistic: 逻辑回归
    • reg:pseudohubererror: Pseudo Huber 损失的回归,绝对损失的二次可微替代。
    • binary:logistic: 二分类任务,输出概率
    • binary:logitraw: 二分类,输出logistic转换前的分数
    • binary:hinge: hinge loss 的二分类,输出0或1,而不是概率
    • count:poisson: 泊松回归,输出平均泊松分佈
      • max_delta_step 在泊松回归中默认设置为0.7(用于保护优化)
    • survival:cox: Cox 回归
    • survival:aft: 删减生存时间数据的加速失效时间模型。
    • aft_loss_distribution: 生存使用的概率密度函数: aft 目标和 aft-nloglik 度量。
    • multi:softmax: 使用 softmax 目标设置 XgBoost 多元分类,还需要设置 num_class (类的数量)
    • multi:softprob: - 与 softmax 相同,但输出一个 ndata * nclass 向量,该向量可以进一步重构为 ndata * nclass 矩阵。结果包含了属于每个类的每个数据点的预测概率。
    • rank:pairwise: - 使用 LambdaMART 的学习排序算法
    • rank:ndcg: 使用 LambdaMART 的学习排序,目标是累积增益(NDCG)最大化
    • rank:map: 使用 LambdaMART 学习排序,目标是平均精度(MAP)最大化
    • reg:gamma: 伽马回归。产出是伽玛分布的平均值。它可能是有用的,例如,用于建模保险索赔的严重性,或者用于任何可能是伽马分布的结果。
    • reg:tweedie: 带 log-link 的 Tweedie 回归。它可能是有用的,例如,建模总损失的保险,或任何结果,可能是 Tweedie 分布。
  • base_score [default=0.5]
    • 所有实例的初始预测得分,全局偏置
    • 对于足够多的迭代,更改此值不会产生太大影响。
  • eval_metric
    • 验证数据的评估指标,将根据目标(回归的 rmse,分类的损失,排名的平均精度)分配缺省指标
    • 用户可以添加多个评估指标。Python 用户: 请记住将度量作为参数对列表而不是 map 传递,这样后一个 eval_metrics 就不会覆盖前一个参数对
    • 这些选择如下:
      • rmse: 均方误差
      • rmsle: 均方误差根,是对均方误差开根号,reg:squaredlogerror 的默认度量指标。此度量减少了数据集中异常值产生的错误。但由于使用了 log 函数,当预测值小于 -1时,rmsle 可能会输出 nan。
      • mae: 平均绝对误差
      • mape: 平均绝对百分比误差
      • mphe: 平均伪 Huber 损失。 reg:pseudohubererror的默认度量函数。
      • logloss: 对数损失
      • error: 二分类错误率,二进制分类错误率。计算方法为 # (错误情况)/# (所有情况)。对于预测,评价将预测值大于0.5的实例视为正实例,将其他实例视为负实例。
      • error@t: 可以通过提供一个通过’t’的数值来指定一个不同于0.5的二进制分类阈值。
      • merror: 多分类错误率,计算方法为 # (错误个案)/# (所有个案)。
      • mlogloss: 多分类的logloss.
      • auc: ROC曲线下方面积,可以用于分类和排序任务
        • 如果是二分类任务,目标函数应该是: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。对于排序任务,只支持[0,1]中的二进制相关标签 y。不同于map,aucpr 使用连续插值计算精度召回曲线下的插值面积。
      • ndcg: 归一化的累计增益
      • map:平均精度
      • ndcg@n, map@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 回归的负对数似然
      • aft-nloglik: 加速失败时间模型的负对数似然
      • interval-regression-accuracy: 预测标签落在区间删失标签中的数据点的分数。只适用于区间删失数据
  • seed [default=0]
    • 随机数种子,用于重复实验,在 R 包中忽略这个参数,改为使用 set.eed()。
  • seed_per_iteration [default=false]
    • 种子 PRNG 通过迭代器数确定性。

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

  • tweedie_variance_power [default=1.5]
    • 控制 Tweedie 分布 var (y) ~ E (y) ^ weedie_variance_power 方差的参数
    • 范围: (1,2)
    • 调到接近2的伽玛分布
    • 调到接近1的位置转向泊松分佈。

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

  • huber_slope : 一个用来表示Pseudo-Huber 损失的参数,用来定义 delta 项。[ default=1.0]

命令行参数

以下参数仅在 XGBoost 的控制台版本中使用

  • num_round
    • boosting的轮次
  • data
    • 训练数据的路径
  • test:data
    • 测试数据的路径
  • save_period [default=0]
    • 保存模型的周期。设置 save_period=10意味着每10轮 XGBoost 将保存模型。将其设置为0意味着在训练期间不保存任何模型。
  • task [default=train] options: ]
    • 可选值: train, pred, eval, dump
    • train: 使用训练数据进行模型的训练
    • pred: 使用测试数据进行预测
    • eval: 通过制定 eval[name]=filename 进行验证
    • dump: 将模型保存为文本格式
  • model_in [default=NULL]
    • 输入模型的路径,用于测试、计算和转储任务。如果在训练中指定了它,XGBoost 将继续从输入模型进行训练。
  • model_out [default=NULL]
    • 训练结束后输出模型的路径。如果未指定,XGBoost 将输出名称为0003的文件。其中0003是迭代的轮次。
  • model_dir [default=models/]
    • 训练期间保存的模型的输出目录
  • fmap
    • 特征映射,用于保存模型
  • dump_format [default=text]
    • options: text, json
    • 模型转储文件的格式
  • name_dump [default=dump.txt]
    • 模型转储文件的名称
  • name_pred [default=pred.txt]
    • 在 pred 模式中使用的预测文件的名称
  • pred_margin [default=0]
    • 预测边际而不是转换概率

猜你喜欢

转载自blog.csdn.net/wwlsm_zql/article/details/126192959
xgb
今日推荐