在跑XGBoost之前,我们必须设置三种类型的参数:general parameters、booster parameters和task parameters。
- General parameters关系到我们选择哪个booster来做boosting,通常是树模型和线性模型。
- Booster parameters取决于你选择的哪个booster。
- Learning Task parameters决定了学习场景,举个例子,回归任务在做排序任务时可能用不同的参数。
- Command line parameters和xgboost的CLI版本有关。
R包中的参数
在R包中,你可以用.(dot)来取代在参数中的下划线,比如,你可以用max.depth取代max_depth。在R中带下划线的参数也是有效的。
General Parameters
- booster [default=gbtree]
- 选择用哪个booster,可以使gbtree,gblinear或者dart。gbtree和dart都是基于树模型的,gblinear用的线性函数。
- silent [defaut=0]
- 0表示打印运行中的信息,1表示不显示。
- nthread [default to maximum number of threads available if not set]
- 在跑xgboost时并行使用的线程数量
- num_pbuffer [xgboost自动设置的,不用用户设置]
- 用于预测的缓存大小,通常设置为训练样本的个数。缓存是用来保存最后一步boosting预测的结果的。
- num_feature [xgboost自动设置,不需要用户设置]
- 使用在boosting中的特征的维数,设置为输入数据的特征的最大维数
Parameters for Tree Booster
- eta [default=0.3, 别名学习率]
- 为了防止股拟合每一步更新shrinkage的大小。在每一步boosting后,我们可以直接获得新的特征的权重。eta事实上就是收缩了特征的权重来让boosting的过程更加保守。
- 范围:[0,1]
- gamma [default=0,别名最小划分损失]
- 在树的叶节点上进行进一步的划分需要减小的最小的损失。gamma越大,这个算法越保守。
- 范围:[0, ∞ ]
max_depth [default=6]
- 树的最大深度,增加这个值能让模型更复杂,更可能过拟合。0表示不限制,明智的深度增长策略需要限制最大深度。
- 范围:[0, ∞ ]
min_child_weight [default=1]
- 一个孩子节点所包含的样例的权值和。在树的节点划分阶段,如果一个叶子节点样例权值之和小于min_child_weight则停止划分。在线性回归模型中,简单表示每个节点样例的数量。越大,算法越保守。
- 范围: [0,∞]
- max_delta_step [default=0]
- 这参数限制每棵树权重改变的最大步长。如果这个参数的值为0,那就意味着没有约束。如果它被赋予了某个正值,那么它会让这个算法更加保守。 通常,这个参数不需要设置。但是当各类别的样本十分不平衡时,它对逻辑回归是很有帮助的。设置为1-10可能能帮助控制更新。这个参数一般用不到,但是你可以挖掘出来它更多的用处。
- 范围: [0,∞]
- subsample [default=1]
- 训练样本二次抽样的比例。设置它为0.5表示XGBoost随机选择一半的数据来生成树,这样可以防止过拟合。
- 范围: (0,1]
- colsample_bytree [default=1]
- 构建每棵树时,对特征进行二次采样(选择部分特征来建树)
- 范围: (0,1]
- colsample_bylevel [default=1]
- 在每个叶节点进一步划分时,对特征进行二次采样
- 范围: (0,1]
- lambda [default=1, alias: reg_lambda]
- 权重的L2正则化,增加这个值可以让模型更保守。
- alpha [default=0, alias: reg_alpha]
- 权重的L1正则化,增加这个值可以让模型更保守。
- tree_method, string [default=’auto’]
- XGBoost中树的建立算法参考
- 分布式和外存版本只支持近似算法
- 选项:{‘auto’, ‘exact’,’approx’, ‘hist’, ‘gpu_exact’, ‘gpu_hist’}
- ‘auto’:用启发式方法去选择最快的一个
- 对于小到中数据集,将使用精确的贪心算法。
- 对于大数据集,会选择近似算法。
- 由于之前总是在单台机器上使用精确的贪心算法,所以当选择近似算法时,用户会得到一条消息来通知这个选择。
- ‘exact’:使用贪心算法
- ‘approx’:使用草图和直方图的近似贪心算法
- ‘hist’:快速直方图优化近似贪婪算法。它使用了一些性能改进,比如垃圾箱缓存。
- ‘gpu_exact’:使用gpu执行exact算法
- ‘gpu_exact’:使用gpu执行exact算法
- ‘auto’:用启发式方法去选择最快的一个
- XGBoost中树的建立算法参考
- sketch_eps, [default=0.03]
- 这个选项适用于近似贪心算法。
- 这大概可以理解为 O(1/sketcheps) 数量的箱子。与直接选择的箱数相比,该方法具有一定的理论保证和梗概精度。
- 通常用户不需要调整这个参数,但是使用一个较低的值唯一获得更多的精确的列举。
- 范围: (0,1)
- scale_pos_weight, [default=1]
- 控制正负样本的比例,对于不平衡的类很有用。一个典型的值:sum(negative cases) / sum(positive cases)
- updater, [default=’grow_colmaker,prune’]
- 一个逗号分隔的字符串,定义了要运行的树更新器的序列,提供了一种构造和修改树的模块化方法。这是一个高级的参数通常设置为自动的,取决于其他参数。它也可以被用户明确的定义。有下列的更新器插件:
- ‘grow_colmaker’:非分布的基于列的树结构。
- ‘discol’:采用基于列的数据分割模式的分布式树结构。
- ‘grow_histmaker’:基于基于直方图计数的全局建议的基于行的数据分割的分布式树结构。
- ‘grow_local_histmaker’: 基于局部直方图计数。
- ‘grow_skmaker’:使用近似的草图算法。
- ‘refresh’:根据当前数据刷新树的统计和/或叶值。注意,不执行任何随机的数据行子抽样。
- ‘prune’:在损失小于min_split_loss (or gamma)的情况下修剪。
- 在分布式设置中,updater序列应该调整为下列:
- ‘grow_histmaker,prune’当dsplit=’row’ (or default) and prob_buffer_row == 1 (or default);或者当数据有多个系数的页时。
- ‘grow_histmaker,refresh,prune’ when dsplit=’row’ and prob_buffer_row < 1
- ‘distcol’ when dsplit=’col’
- 一个逗号分隔的字符串,定义了要运行的树更新器的序列,提供了一种构造和修改树的模块化方法。这是一个高级的参数通常设置为自动的,取决于其他参数。它也可以被用户明确的定义。有下列的更新器插件:
- refresh_leaf, [default=1]
- 设置一个刷新updater插件的参数。当标志为真时,树叶和树节点的统计信息都更新了。当它为false时,只更新节点属性。
- process_type, [default=’default’]
- 一种可运行的boosting过程
- 选择:{‘default’,’update’}
- ‘default’:普通的boosting过程来创建新的树。
- ‘update’:从一个已经存在的模型并且仅仅更新它的树。在每一次boosting迭代,从初始模型得到的树,一个指定序列的updater插件为这些树运行,修改后的树被添加到新的模型。新的模型可能有相同或者更少的树,取决于boosting迭代的次数。目前,以下内置的updater插件可以与此过程类型有意义的使用:’refresh’, ‘prune’。有了“更新”,你就不能使用updater插件来创建新的trees。
- grow_policy, string [default=’depthwise’]
- 控制节点被添加到树的方式
- 目前仅仅支持如果tree_method被设置为’hist’。
- 选项:{‘depthwise’, ‘lossguide’}
- ‘depthwise’:在离根最近的节点处分割
- ‘lossguide’:在最大的loss改变出分割
- max_leaves, [default=0]
- 最多添加的节点数量。仅当‘grow_policy=lossguide时相关。
- max_bin, [default=256]
- 仅当
tree_metho=hist
时有用。 - 最大的离散箱数,以存储连续的特性。
- 增加这个数字可以减少计算时间成本。
- 仅当
- predictor, [default=’cpu_predictor’]
- 选择预测算法的类型。提供同样的结果但是可以选择使用CPU或者GPU。
- ‘cpu_predictor’:使用多核CPU预测算法。
- ‘gpu_predictor’:使用gpu预测。如果选用’gpu_exact’或者’gpu_hist’为树方法,那么这个就是默认选项。
- 选择预测算法的类型。提供同样的结果但是可以选择使用CPU或者GPU。
Dart Booster额外的参数
Dart Booster将dropout引入模型,这里的dropout不是直接扔掉,而是变权值。
- sample_type [default=”uniform”]
- 算法抽样的类型
- “uniform”:均匀选择树dropped。
- “weighted”:按照权重来选择树dropped。
- 算法抽样的类型
- normalize_type [default=”tree”]
- 归一化算法的类型
- “tree”:新的tree和每一个dropped trees有同样的权重
- 新的trees的权重为 1 / (k + learning_rate)
- dropped trees乘以一个系数 k / (k + learning_rate)
- “forest”:新的树和所有dropped trees的和有相同的权重
- 新的trees的权重为 1 / (1 + learning_rate)
- dropped trees乘以一个系数 1 / (1 + learning_rate)
- “tree”:新的tree和每一个dropped trees有同样的权重
- 归一化算法的类型
- rate_drop [default=0.0]
- dropout的概率(在生成的树中dropped一部分)
- 范围:[0.0, 1.0]
- one_drop [default=0]
- 当这个被设置时,至少有一个树始终会被dropped(allows Binomial-plus-one or epsilon-dropout from the original DART paper)
- skip_drop [default=0.0]
- 在boosting迭代的过程中略过dropout过程的概率
- 如果一次dropout被略过,新的树被添加进model用和gbtree一样的方式。
- 非0的skip_drop比rate_drop和one_drop有更高的优先级。
- 范围: [0.0,1.0]
- 在boosting迭代的过程中略过dropout过程的概率
线性Booster的参数
- lambda [default=0, 别名:reg_lambda]
- L2正则化的权重,增加该参数的值会让模型更保守
- alpha [default=0, 别名:reg_alpha]
- L1正则化的权重,增加这个值会让模型更保守
- lambda_bias [default=0, 别名:reg_lambda_bias]
- bias的L2正则化(没有bias的L1正则化因为它不重要)
Tweedie Regression的参数
- tweedie_variance_power [default=1.5]
- 在Tweedie分布上控制方差的参数
- var(y)~E(y)^tweedie_variance_power
- 范围:(1,2)
- 值越接近2越接近gamma分布
- 值越接近1越接近Poisson分布
- 在Tweedie分布上控制方差的参数
学习任务参数
指定学习任务和相应的学习目标。下面的目标选项如下:
- objective [default=reg:linear]
- ”reg:linear”-线性回归
- “reg:logistic”-逻辑回归
- “binary:logistic”-二分类的逻辑回归,输出概率
- “binary:logitraw”-二分类逻辑回归,在逻辑变换前输出得分
- “count:poisson”-泊松回归计数数据,泊松分布均值
- max_delta_step的默认值是0.7在泊松回归(用于维护优化)
- “multi:softmax”-设置XGBoost做多分类任务用softmax目标,你需要指定最大的类别数
- “multi:softprob”-和softmax一样,但是输出的是一个向量 ndata *nclass,可以进一步变形为ndata,nclass的矩阵。结果包含预测的每个数据属于每个类的概率值。
- “rank:pairwise”-让XGBoost做排名的任务通过最小化pairwise loss
- “reg:gamma”-用log-link的gamma回归。输出是gamma分布的均值。他是有用的,比如说e.g., for modeling insurance claims severity,或者任何输出结果为gamma分布的。
- “reg:tweedie”-用log-link的Tweedie回归。他是有用的,比如说e.g., for modeling total loss in insurance,或者任何输出结果为Tweedie分布的。
- base_score [default=0.5]
- 初始化的所有例子的越策得分,全局bias
- 对于足够多的迭代次数,改变这个值不会有太大的效果
- eval_metric [default according to objective]
- 对于验证集的评测指标,一个默认的指标是根据目标分配的(对于回归任务用rmse,对于分类任务用error,mean average precision for ranking)
- 用户可以添加多个评测指标,对于python用户,记得将这些指标存入一个参数对的list而不是map,不然后面的指标将会失效。
- 可选项如下:
- ”rmse”:平方误差
- “mae”:绝对值误差
- “logloss”:negative log-likelihood
- “error”:二分类错误率。他可以用公式#(wrong cases)/#(all cases)计算。对于预测,指标会把预测结果大于0.5的当做正类,别的当做负类。
- “error@t”:和阈值为0.5的二分类不同,可以通过t设置阈值。
- “merror”:多分类错误率,可以用公式#(wrong cases)/#(all cases)计算。
- “mlogloss”:多分类交叉熵
- “auc”:Area under the curve for ranking evaluation.
- “ndcg”:Normalized Discounted Cumulative Gain
- “map”:Mean average precision
- “ndcg@n”,”map@n”: n can be assigned as an integer to cut off the top positions in the lists for evaluation.
- “ndcg-“,”map-“,”ndcg@n-“,”map@n-“: In XGBoost, NDCG and MAP will evaluate the score of a list without any positive samples as 1. By adding “-” in the evaluation metric XGBoost will evaluate these score as 0 to be consistent under some conditions. training repeatedly
- “poisson-nloglik”:negative log-likelihood for Poisson regression
- “gamma-nloglik”:negative log-likelihood for gamma regression
- “gamma-deviance”:residual deviance for gamma regression
- “tweedie-nloglik”:negative log-likelihood for Tweedie regression (at a specified value of the tweedie_variance_power parameter)
- seed [default=0]
- 随机数种子
命令行参数
下列的参数仅仅被用在命令行版本的xgboost中
- use_buffer [default=1]
- 是否创建一个二进制缓冲从输入文本中。这样做通常会加快加载时间。
- num_round
- boosting的轮数
- data
- 训练集的路径
- test:data
- 要预测的测试集的路径
- save_period [default=0]
- 保存模型的周期,设置改参数为10表示每10次boosting就会保存一次模型,设置为0表示不保存任何模型在训练期间。
- task [default=train] 选项:train,pred,eval,dump
- train:用数据训练
- pred:预测test:data
- eval:for evaluating statistics specified by eval[name]=filename
- dump:将学习到的模型转换为文本形式(preliminary)
- model_in [default=NULL]
- 输入模型的路径,需要test、eval、dump,如果被明确地指明训练,xgboost会继续训练。
- model_out [default=NULL]
- 在训练结束后输出模型的路径,如果不知名,会输出0003.model,这里的0003是boosting的轮数。
- model_dir [default=models]
- 用保存训练期间的模型的输出文件
- fmap
- 特征图,用于转换模型
- name_dump [default=dump.txt]
- 模型转储文件的名称
- name_pred [default=pred.txt]
- 预测文件的名字,用于预测模式
- pred_margin [default=0]
- 预测margin而不是转换概率