【ML-6-4-1】xgboost参数说明

目录

  1. 常规参数
  2. Tree Booster的参数
  3. Linear Booster的参数(booster=gblinear)
  4. 学习任务参数
  5. 代码主要函数
  6. 参数调整注意事项

   

在运行XGBoost之前,我们必须设置三种类型的参数:常规参数,增强器参数和任务参数

常规参数与我们用来进行增强的助推器有关,通常是树形模型或线性模型

增压器参数取决于您选择的增压器

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

命令行参数与XGBoost的CLI版本的行为有关。

基本和官网一致,只是部分翻译了,便于以后快捷地搜索。

本文对较为重要的参数做底色标示

一、常规参数

booster[默认= gbtree]

使用哪个助推器。可以gbtree,gblinear或者dart; gbtree并dart使用基于树的模型,同时gblinear使用线性函数。

   

verbosity [默认值= 1]

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

   

validate_parameters [默认为false,Python,R和CLI界面除外]

设置为True时,XGBoost将执行输入参数的验证,以检查是否使用了参数。该功能仍处于试验阶段。预期会有一些误报。

   

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

用于运行XGBoost的并行线程数。选择它时,请记住线程争用和超线程。

   

disable_default_eval_metric [默认=``false'']

标记以禁用默认指标。设置为1或true禁用。

   

num_pbuffer [由XGBoost自动设置,无需由用户设置]

预测缓冲区的大小,通常设置为训练实例数。缓冲区用于保存上一个增强步骤的预测结果。

   

num_feature [由XGBoost自动设置,无需由用户设置]

用于增强的特征尺寸,设置为特征的最大尺寸

   

二、Tree Booster的参数

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

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

范围:[0,1]

   

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

在树的叶节点上进行进一步分区所需的最小损失减少。越大gamma,算法将越保守。

范围:[0,∞]

   

max_depth [默认= 6]

一棵树的最大深度。增加此值将使模型更复杂,并且更可能过度拟合。仅lossguided当tree_method设置为hist且表示深度没有限制时,才在增长策略中接受0 。注意,训练一棵深树时,XGBoost会大量消耗内存。

范围:[0,∞](仅lossguided当tree_method设置为时,增长策略才接受0 hist)

   

min_child_weight [默认值= 1]

子级中实例重量的最小总和(hessian)。如果树划分步骤导致叶节点的实例权重之和小于min_child_weight,则构建过程将放弃进一步的划分。在线性回归任务中,这仅对应于每个节点中需要的最少实例数。越大min_child_weight,算法将越保守。

范围:[0,∞]

   

max_delta_step [默认= 0]

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

范围:[0,∞]

   

subsample [默认值= 1]

训练实例的子样本比率。将其设置为0.5意味着XGBoost将在树木生长之前随机采样一半的训练数据。这样可以防止过度拟合。二次采样将在每个增强迭代中进行一次。

范围:(0,1]

   

sampling_method[默认= uniform]

用于对训练实例进行采样的方法。

uniform:每个训练实例的选择概率均等。通常将subsample> = 0.5设置 为良好的效果。

   

gradient_based:每个训练实例的选择概率与规则化的梯度绝对值成正比 (更具体地说,

【ML-6-4-1】xgboost参数说明

subsample可以设置为低至0.1,而不会损失模型精度。请注意,只有tree_method将设置为时,才支持此采样方法gpu_hist。其他树方法仅支持uniform采样。

   

colsample_bytree,colsample_bylevel,colsample_bynode[默认= 1]

这是用于列二次采样的一组参数。

所有colsample_by*参数的范围为(0,1],默认值为1,并指定要进行二次采样的列的分数。

colsample_bytree是构造每棵树时列的子样本比率。对每一个构造的树进行一次二次采样。

colsample_bylevel是每个级别的列的子采样率。对于树中达到的每个新深度级别,二次采样都会发生一次。从为当前树选择的一组列中对列进行子采​​样。

colsample_bynode是每个节点(拆分)的列的子样本比率。每次评估新的分割时,都会进行一次二次采样。列是从为当前级别选择的一组列中进行子采样的。

colsample_by*参数累积工作。例如,具有64个功能的组合将在每个拆分中留下8个功能供您选择。{'colsample_bytree':0.5, 'colsample_bylevel':0.5, 'colsample_bynode':0.5}

在Python界面上,可以设置feature_weightsfor DMatrix来定义使用列采样时选择每个功能的概率。fitsklearn界面中的方法有一个类似的参数。

   

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

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

   

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

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

   

tree_method字符串[default = auto]

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

XGBoost支持 approx,hist并gpu_hist用于分布式培训。外部存储器实验支持可用于approx和gpu_hist。

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

auto:使用启发式选择最快的方法。

  • 对于小型数据集,exact将使用精确贪婪()。
  • 对于较大的数据集,approx将选择近似算法()。它建议尝试hist,并gpu_hist用大量的数据可能更高的性能。(gpu_hist)支持。external memory
  • 由于旧行为总是在单个计算机上使用完全贪婪,因此,当选择近似算法来通知该选择时,用户将收到一条消息。

exact:精确的贪婪算法。枚举所有拆分的候选人。

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

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

gpu_hist:GPUhist算法的实现。

   

sketch_eps [默认值= 0.03]

仅用于tree_method=approx。

这大致转化为箱数。与直接选择垃圾箱数量相比,这具有草图准确性的理论保证。O(1 / sketch_eps)

通常,用户不必对此进行调整。但是,请考虑设置较低的数字,以更精确地枚举拆分的候选人。

范围:(0,1)

   

scale_pos_weight [默认值= 1]

控制正负权重的平衡,对于不平衡的班级很有用。需要考虑的典型值:。有关更多讨论,请参见参数调整。另外,请参见Higgs Kaggle竞赛演示,例如:R,py1,py2,py3。sum(negative instances) / sum(positive instances)

updater[默认= grow_colmaker,prune]

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

   

updater[默认= grow_colmaker,prune]

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

  • grow_colmaker:基于树的非分布式列结构。
  • grow_histmaker:基于直方图计数的全局提议,基于行的数据拆分的分布式树结构。
  • grow_local_histmaker:基于本地直方图计数。
  • grow_quantile_histmaker:使用量化直方图来生长树。
  • grow_gpu_hist:使用GPU种植树。
  • sync:同步所有分布式节点中的树。
  • refresh:根据当前数据刷新树的统计信息和/或叶值。注意,不对数据行进行随机子采样。
  • prune:修剪损失<min_split_loss(或gamma)的分割。

在分布式设置中,grow_histmaker,prune默认情况下会将隐式更新程序序列值调整为,您可以将其设置tree_method为hist使用grow_histmaker。

   

refresh_leaf [默认值= 1]

这是refresh更新程序的参数。当此标志为1时,将更新树叶和树节点的统计信息。当它为0时,仅更新节点统计信息。

   

process_type[默认= default]

一种运行的加速过程。

选择:default,update

  • default:创建新树的正常增强过程。
  • update:从现有模型开始,仅更新其树。在每次增强迭代中,都会从初始模型中提取一棵树,为该树运行指定的更新程序序列,然后将修改后的树添加到新模型中。新模型将具有相同或更少数量的树,具体取决于执行的增强迭代次数。当前,以下内置更新程序可与此进程类型有意义地使用:refresh,prune。使用时process_type=update,不能使用创建新树的更新程序。

   

grow_policy[默认= depthwise]

控制将新节点添加到树的方式。

当前仅在tree_method设置为时受支持hist

选择:depthwise,lossguide

  • depthwise:在最靠近根的节点处拆分。
  • lossguide:在损耗变化最大的节点处拆分。

   

max_leaves [默认= 0]

要添加的最大节点数。仅在grow_policy=lossguide设置时相关。

   

max_bin,[默认值= 256]

仅在tree_method设置为时使用hist

用于存储连续特征的最大不连续回收箱数。

增加此数目可提高拆分的最佳性,但需要更长的计算时间。

   

predictor,[default =`ʻʻauto``]

要使用的预测器算法的类型。提供相同的结果,但允许使用GPU或CPU。

  • auto:基于启发式配置预测变量。
  • cpu_predictor:多核CPU预测算法。
  • gpu_predictor:使用GPU进行预测。在tree_methodis时使用gpu_hist。当predictor设置为默认值时auto,gpu_histtree方法能够提供基于GPU的预测,而无需将训练数据复制到GPU内存中。如果gpu_predictor明确指定,则将所有数据复制到GPU中,仅建议用于执行预测任务。

   

num_parallel_tree,[default = 1]

-每次迭代期间构造的并行树的数量。此选项用于支持增强型随机森林。

   

monotone_constraints

可变单调性的约束。

   

interaction_constraints

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

   

三、Linear Booster的参数(booster=gblinear)

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

L2正则化权重项。增加此值将使模型更加保守。归一化为训练示例数。

   

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

权重的L1正则化项。增加此值将使模型更加保守。归一化为训练示例数。

   

updater[默认= shotgun]

选择适合线性模型的算法

  • shotgun:基于shot弹枪算法的平行坐标下降算法。使用" hogwild"并行性,因此每次运行都会产生不确定的解决方案。
  • coord_descent:普通坐标下降算法。同样是多线程的,但仍然可以产生确定性的解决方案。

   

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表示使用所有功能。

   

四、学习任务参数

objective [默认= reg:squarederror]

reg:squarederror:损失平方回归。

reg:squaredlogerror:对数损失平方回归

【ML-6-4-1】xgboost参数说明

所有输入标签都必须大于-1。另外,请参阅指标rmsle以了解此目标可能存在的问题。

reg:logistic:逻辑回归

reg:pseudohubererror:使用伪Huber损失进行回归,这是绝对损失的两倍可微选择。

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

binary:logitraw:用于二进制分类的逻辑回归,逻辑转换之前的输出得分

binary:hinge:二进制分类的铰链损失。这使预测为0或1,而不是产生概率。

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

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

survival:cox:针对正确的生存时间数据进行Cox回归(负值被视为正确的生存时间)。请注意,预测是按危险比等级返回的(即,比例危险函数中的HR = exp(marginal_prediction))。h(t) = h0(t) * HR

survival:aft:用于检查生存时间数据的加速故障时间模型。有关详细信息,请参见具有加速故障时间的生存分析。

aft_loss_distribution:survival:aft目标和aft-nloglik度量使用的概率密度函数。

multi:softmax:设置XGBoost以使用softmax目标进行多类分类,还需要设置num_class(类数)

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

rank:pairwise:使用LambdaMART进行成对排名,从而使成对损失最小化

rank:ndcg:使用LambdaMART进行列表式排名,使标准化折让累积收益(NDCG)最大化

rank:map:使用LambdaMART进行列表平均排名,使平均平均精度(MAP)最大化

reg:gamma:使用对数链接进行伽马回归。输出是伽马分布的平均值。例如,对于建模保险索赔的严重性或对可能是伽马分布的任何结果,它可能很有用。

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

   

base_score [默认值= 0.5]

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

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

   

eval_metric [根据目标默认]

验证数据的评估指标,将根据目标分配默认指标(用于回归的均方根值,用于分类的对数损失,用于排名的平均平均精度

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

下面列出了这些选择:

  • rmse:均方根误差
  • rmsle:均方根对数误差

    【ML-6-4-1】xgboost参数说明

    reg:squaredlogerror目标的默认指标。此指标可减少数据集中异常值所产生的错误。但是由于log采用功能,rmsle可能nan在预测值小于-1时输出。有关reg:squaredlogerror其他要求,请参见。

  • mae:平均绝对误差
  • mape:平均绝对百分比误差
  • mphe:平均伪Huber错误。reg:pseudohubererror目标的默认指标。
  • logloss:负对数似然
  • error:二进制分类错误率。计算公式为。对于预测,评估会将预测值大于0.5的实例视为肯定实例,而将其他实例视为否定实例。#(wrong cases)/#(all cases)
  • error@t:可以通过提供't'的数值来指定不同于0.5的二进制分类阈值。
  • merror:多类分类错误率。计算公式为。#(wrong cases)/#(all cases)
  • mlogloss:多类logloss。
  • auc:曲线下面积
  • aucpr:PR曲线下的面积
  • 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回归的负对数似然(在tweedie_variance_power参数的指定值处)
  • aft-nloglik:加速故障时间模型的负对数可能性。有关详细信息,请参见具有加速故障时间的生存分析。
  • interval-regression-accuracy:其预测标签位于间隔检查的标签中的数据点的分数。仅适用于间隔检查的数据。有关详细信息,请参见具有加速故障时间的生存分析。

       

五、命令行参数

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

num_round

提升轮数

   

data

训练数据的路径

   

test:data

测试数据进行预测的路径

   

save_period [默认= 0]

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

   

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

  • train:使用数据进行训练
  • pred:预测测试:数据
  • eval:用于评估指定的统计信息 eval[name]=filename
  • dump:用于将学习到的模型转储为文本格式

   

model_in [默认值= NULL]

路径输入模型,需要的test,eval,dump任务。如果在训练中指定了XGBoost,它将从输入模型继续训练。

   

model_out [默认值= NULL]

训练完成后输出模型的路径。如果未指定,则XGBoost将输出名称为0003.model ,其中0003

   

model_dir[默认= models/]

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

   

fmap

特征图,用于转储模型

   

dump_format[default = text]选项:text,json

模型转储文件的格式

   

name_dump[默认= dump.txt]

模型转储文件的名称

   

name_pred[默认= pred.txt]

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

   

pred_margin [默认= 0]

预测margin 而不是转换概率

   

   

六、代码主要函数:

载入数据:load_digits()

数据拆分:train_test_split()

建立模型:XGBClassifier()

模型训练:fit()

模型预测:predict()

性能度量:accuracy_score()

特征重要性:plot_importance()

   

   

七、参数调整注意事项

控制过度拟合:

当您观察到较高的训练准确度但较低的测试准确度时,很可能遇到了过拟合问题。

通常,您可以通过两种方法控制XGBoost中的过拟合:

第一种方法是直接控制模型的复杂性。

这包括max_depth,min_child_weight和gamma。

   

第二种方法是增加随机性,以使训练对噪声具有鲁棒性。

这包括subsample和colsample_bytree。

您还可以减小学习率 eta,同时增加num_round。

   

更快的训练表现

有一个名为的参数tree_method,请将其设置为hist或gpu_hist以加快计算速度。

   

处理不平衡的数据集

对于广告点击日志等常见情况,数据集极不平衡。这可能会影响XGBoost模型的训练,有两种方法可以对其进行改进。

如果您只关心预测的整体效果指标(AUC)

  • 通过 scale_pos_weight调整正例和负例的比例
  • 使用AUC进行评估

如果您关心预测正确的可能性

  • 在这种情况下,您无法重新平衡数据集
  • 将参数设置max_delta_step为有限数(例如1)以帮助收敛

   

更多信息,强烈推荐:

https://xgboost.readthedocs.io/en/latest/python/python_api.html#module-xgboost.training

上一篇:牛牛与交换排序


下一篇:vue指令之v-if和v-show