2.2 参数
2.2.1. 通用参数
booster
: 指定了使用那一种booster
。可选的值为:'gbtree'
: 表示采用xgboost
(默认值)'gblinear'
: 表示采用线性模型。'gblinear'
使用带l1,l2
正则化的线性回归模型作为基学习器。因为boost
算法是一个线性叠加的过程,而线性回归模型也是一个线性叠加的过程。因此叠加的最终结果就是一个整体的线性模型,xgboost
最后会获得这个线性模型的系数。'dart'
: 表示采用dart booster
silent
: 如果为 0(默认值),则表示打印运行时的信息;如果为 1, 则表示silent mode
( 不打印这些信息)nthread
: 指定了运行时的并行线程的数量。如果未设定该参数,则默认值为可用的最大线程数。num_pbuffer
: 指定了prediction buffer
的大小。通常设定为训练样本的数量。该参数由xgboost
自动设定,无需用户指定。该
buffer
用于保存上一轮boostring step
的预测结果。num_feature
: 样本的特征数量。通常设定为特征的最大维数。该参数由xgboost
自动设定,无需用户指定。
2.2.2 tree booster 参数
针对tree booster
的参数(适用于booster=gbtree,dart
) :
eta
: 也称作学习率。默认为 0.3 。范围为[0,1]
gamma
: 也称作最小划分损失min_split_loss
。 它刻画的是:对于一个叶子节点,当对它采取划分之后,损失函数的降低值的阈值。- 如果大于该阈值,则该叶子节点值得继续划分
- 如果小于该阈值,则该叶子节点不值得继续划分
该值越大,则算法越保守(尽可能的少划分)。默认值为 0
max_depth
: 每棵子树的最大深度。其取值范围为 , 0 表示没有限制,默认值为6。该值越大,则子树越复杂;值越小,则子树越简单。
min_child_weight
: 子节点的权重阈值。它刻画的是:对于一个叶子节点,当对它采取划分之后,它的所有子节点的权重之和的阈值。- 如果它的所有子节点的权重之和大于该阈值,则该叶子节点值得继续划分
- 如果它的所有子节点的权重之和小于该阈值,则该叶子节点不值得继续划分
所谓的权重:
- 对于线性模型(
booster=gblinear
),权重就是:叶子节点包含的样本数量。 因此该参数就是每个节点包含的最少样本数量。 - 对于树模型(
booster=gbtree,dart
),权重就是:叶子节点包含样本的所有二阶偏导数之和。
该值越大,则算法越保守(尽可能的少划分)。默认值为 1
max_delta_step
: 每棵树的权重估计时的最大delta step
。取值范围为 ,0 表示没有限制,默认值为 0 。通常该参数不需要设置,但是在逻辑回归中,如果类别比例非常不平衡时,该参数可能有帮助。
subsample
: 对训练样本的采样比例。取值范围为(0,1]
,默认值为 1 。如果为
0.5
, 表示随机使用一半的训练样本来训练子树。它有助于缓解过拟合。colsample_bytree
: 构建子树时,对特征的采样比例。取值范围为(0,1]
, 默认值为 1。如果为
0.5
, 表示随机使用一半的特征来训练子树。它有助于缓解过拟合。colsample_bylevel
: 寻找划分点时,对特征的采样比例。取值范围为(0,1]
, 默认值为 1。如果为
0.5
, 表示随机使用一半的特征来寻找最佳划分点。它有助于缓解过拟合。lambda
:L2
正则化系数(基于weights
的正则化),默认为 1。 该值越大则模型越简单alpha
:L1
正则化系数(基于weights
的正则化),默认为 0。 该值越大则模型越简单tree_method
: 指定了构建树的算法,可以为下列的值:(默认为'auto'
)'auto'
: 使用启发式算法来选择一个更快的tree_method
:- 对于小的和中等的训练集,使用
exact greedy
算法分裂节点 - 对于非常大的训练集,使用近似算法分裂节点
- 旧版本在单机上总是使用
exact greedy
分裂节点
- 对于小的和中等的训练集,使用
'exact'
: 使用exact greedy
算法分裂节点'approx'
: 使用近似算法分裂节点'hist'
: 使用histogram
优化的近似算法分裂节点(比如使用了bin cacheing
优化)'gpu_exact'
: 基于GPU
的exact greedy
算法分裂节点'gpu_hist'
: 基于GPU
的histogram
算法分裂节点
注意:分布式,以及外存版本的算法只支持
'approx','hist','gpu_hist'
等近似算法sketch_eps
: 指定了分桶的步长。其取值范围为(0,1)
, 默认值为 0.03 。它仅仅用于
tree_medhod='approx'
。它会产生大约 个分桶。它并不会显示的分桶,而是会每隔
sketch_pes
个单位(一个单位表示最大值减去最小值的区间)统计一次。用户通常不需要调整该参数。
scale_pos_weight
: 用于调整正负样本的权重,常用于类别不平衡的分类问题。默认为 1。一个典型的参数值为:
负样本数量/正样本数量
updater
: 它是一个逗号分隔的字符串,指定了一组需要运行的tree updaters
,用于构建和修正决策树。默认为'grow_colmaker,prune'
。该参数通常是自动设定的,无需用户指定。但是用户也可以显式的指定。
refresh_leaf
: 它是一个updater plugin
。 如果为true
,则树节点的统计数据和树的叶节点数据都被更新;否则只有树节点的统计数据被更新。默认为 1process_type
: 指定要执行的处理过程(如:创建子树、更新子树)。该参数通常是自动设定的,无需用户指定。grow_policy
: 用于指定子树的生长策略。仅仅支持tree_method='hist'
。 有两种策略:'depthwise'
: 优先拆分那些靠近根部的子节点。默认为'depthwise'
'lossguide'
: 优先拆分导致损失函数降低最快的子节点
max_leaves
: 最多的叶子节点。如果为0,则没有限制。默认值为 0 。该参数仅仅和
grow_policy='lossguide'
关系较大。max_bin
: 指定了最大的分桶数量。默认值为 256 。该参数仅仅当
tree_method='hist','gpu_hist'
时有效。predictor
: 指定预测器的算法,默认为'cpu_predictor'
。可以为:'cpu_predictor'
: 使用CPU
来预测'gpu_predictor'
: 使用GPU
来预测。对于tree_method='gpu_exact,gpu_hist'
,'gpu_redictor'
是默认值。
2.2.3 dart booster 参数
sample_type
: 它指定了丢弃时的策略:'uniform'
: 随机丢弃子树(默认值)'weighted'
: 根据权重的比例来丢弃子树
normaliz_type
:它指定了归一化策略:'tree'
: 新的子树将被缩放为: ; 被丢弃的子树被缩放为 。其中 为学习率, 为被丢弃的子树的数量'forest'
:新的子树将被缩放为: ; 被丢弃的子树被缩放为 。其中 为学习率
rate_drop
:dropout rate
,指定了当前要丢弃的子树占当前所有子树的比例。范围为[0.0,1.0]
, 默认为0.0
。one_drop
: 如果该参数为true
,则在dropout
期间,至少有一个子树总是被丢弃。默认为 0 。skip_drop
: 它指定了不执行dropout
的概率,其范围是[0.0,1.0]
, 默认为 0.0 。如果跳过了
dropout
,则新的子树直接加入到模型中(和xgboost
相同的方式)
2.2.4 linear booster 参数
lambda
:L2
正则化系数(基于weights
的正则化),默认为 0。 该值越大则模型越简单alpha
:L1
正则化系数(基于weights
的正则化),默认为 0。 该值越大则模型越简单lambda_bias
:L2
正则化系数( 基于bias
的正则化),默认为 0.没有基于
bias
的L1
正则化,因为它不重要。
2.4.5 tweedie regression 参数:
weedie_variance_power
: 指定了tweedie
分布的方差。取值范围为(1,2)
,默认为 1.5 。越接近1,则越接近泊松分布;越接近2,则越接近
gamma
分布。
2.4.6 学习任务参数
objective
:指定任务类型,默认为'reg:linear'
。'reg:linear'
: 线性回归模型。它的模型输出是连续值'reg:logistic'
: 逻辑回归模型。它的模型输出是连续值,位于区间[0,1]
。'binary:logistic'
: 二分类的逻辑回归模型,它的模型输出是连续值,位于区间[0,1]
,表示取正负类别的概率。它和
'reg:logistic'
几乎完全相同,除了有一点不同:'reg:logistic'
的默认evaluation metric
是rmse
。'binary:logistic'
的默认evaluation metric
是error
'binary:logitraw'
: 二分类的逻辑回归模型,输出为分数值(在logistic
转换之前的值)'count:poisson'
: 对count data
的poisson regression
, 输出为泊松分布的均值。'multi:softmax'
: 基于softmax
的多分类模型。此时你需要设定num_class
参数来指定类别数量。'multi:softprob'
: 基于softmax
的多分类模型,但是它的输出是一个矩阵:ndata*nclass
,给出了每个样本属于每个类别的概率。'rank:pairwise'
: 排序模型(优化目标为最小化pairwise loss
)'reg:gamma'
:gamma regression
, 输出为伽马分布的均值。'reg:tweedie'
:'tweedie regression'
。
base_score
: 所有样本的初始预测分,它用于设定一个初始的、全局的bias
。 默认为 0.5 。- 当迭代的数量足够大时,该参数没有什么影响
eval_metric
: 用于验证集的评估指标。其默认值和objective
参数高度相关。回归问题的默认值是
rmse
; 分类问题的默认值是error
; 排序问题的默认值是mean average precision
。你可以指定多个
evaluation metrics
。如果有多个验证集,以及多个评估指标.则: 使用最后一个验证集的最后一个评估指标来做早停。但是还是会计算出所有的验证集的所有评估指标。
'rmse'
: 均方误差。'mae'
: 绝对值平均误差'logloss'
: 负的对数似然函数'error'
: 二分类的错误率。它计算的是:预测错误的样本数/所有样本数
所谓的预测是:正类概率大于0.5的样本预测为正类;否则为负类(即阈值为 0.5 )
'error@t'
: 二分类的错误率。但是它的阈值不再是 0.5, 而是由字符串t
给出(它是一个数值转换的字符串)'merror'
: 多类分类的错误率。它计算的是:预测错误的样本数/所有样本数
'mlogloss'
: 多类分类的负对数似然函数'auc'
:AUC
得分'ndcg'
:Normalized Discounted Cumulative Gain
得分'map'
:Mean average precision
得分'ndcg@n','map@n'
:n
为一个整数,用于切分验证集的top
样本来求值。'ndcg-','map-','ndcg@n-','map@n-'
: 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 repeatedlypoisson-nloglik
: 对于泊松回归,使用负的对数似然gamma-nloglik
: 对于伽马回归,使用负的对数似然gamma-deviance
: 对于伽马回归,使用残差的方差tweedie-nloglik
: 对于tweedie
回归,使用负的对数似然
seed
: 随机数种子,默认为 0 。