本文来源于XGBoost官方文档,原文链接。
XGBoost参数官方文档:XGBoost Parameters (official guide)。
XGBoost的Python模块介绍官方文档:Python Package Introduction
命令行参数取决于xgboost的CLI版本
XGBoost参数设置
General Parameters
- booster
决定使用哪个booster,可以是gbtree,gblinear或者dart。 gbtree和dart使用基于树的模型,而gblinear 使用线性函数. - silent
设置为0打印运行信息;设置为1静默模式,不打印 nthread
下面的两个参数不需要设置,使用默认的就好了num_pbuffer
预测结果缓存大小,通常设置为训练实例的个数。该缓存用于保存最后boosting操作的预测结果。- num_feature
在boosting中使用特征的维度,设置为特征的最大维度
Parameters for Tree Booster
- eta
范围: [0,1] - gamma
在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。Gamma指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。这个参数的值和损失函数息息相关,所以是需要调整的。 (设置此参数应该属于预剪枝操作,应博主还未进行实际操作,想着应该是分裂后损失函数值下降小于设置值是则不进行分裂,早停,防止过拟合,希望交流指正或等博主实战后再来确认修改)
范围: [0,∞] - max_depth
范围: [0,∞] - min_child_weight
范围: [0,∞] - max_delta_step [default = 0]
我们允许每棵树的权重估计值为最大增量步长。 如果该值设置为0,则表示没有约束。 如果它设置为正值,则可以帮助使更新步骤更加保守。 通常这个参数是不需要的,但是当类非常不平衡时,它可能有助于逻辑回归。 将它设置为1-10的值可能有助于控制更新
范围:[0,∞] - subsample
范围: (0,1] - colsample_bytree
范围: (0,1] - colsample_bylevel
范围: (0,1] - lambda
权重的L2正则化项。(和Ridge regression类似)。 这个参数是用来控制XGBoost的正则化部分的。
调节目标函数中正则化项以调整模型复杂程度,提高函数泛化能力(防止过拟合),而且L2范数还可以让优化求解更稳定和快速。. - alpha
权重的L1正则化项。(和Lasso regression类似)。 可以应用在很高维度的情况下,使得算法的速度更快。 - tree_method,string [default ='auto']
XGBoost中使用的树构建算法(参见参考文献中的描述)
分布式和外部存储器版本仅支持近似算法。
选择:{'auto','exact','approx','hist','gpu_exact','gpu_hist'}
'auto':使用启发式来选择更快的。
对于中小型数据集,将使用精确的贪心算法。
对于非常大的数据集,将选择近似算法。
由于旧行为总是在单机中使用精确的贪心算法,因此当选择近似算法来通知此选择时,用户将收到消息。
'exact':精确的贪婪算法。
'approx':使用草图和直方图的近似贪心算法。
'hist':快速直方图优化的近似贪心算法。 它使用一些性能改进,如箱缓存。
'gpu_exact':精确算法的GPU实现。
'gpu_hist':GPU算法的实现。 - sketch_eps,[默认= 0.03]
这仅用于近似贪心算法。
这大致转换为O(1 / sketch_eps)箱数。 与直接选择箱数量相比,这具有草图准确性的理论保证。
通常用户不必调整它。 但考虑设置更低的数字以获得更准确的枚举。
范围:(0,1) - scale_pos_weight
在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。通常可以将其设置为负样本的数目与正样本数目的比值。 - updater,[默认='grow_colmaker,prune']
一个逗号分隔的字符串,用于定义要运行的树更新程序的序列,提供了一种模块化的方法来构建和修改树。这是一个高级参数,通常根据其他参数自动设置。但是,它也可以由用户明确设置。以下更新插件存在:
在分布式设置中,隐式更新器序列值将按如下方式进行调整: - refresh_leaf,[default = 1]
这是'refresh'更新插件的参数。 当这个标志为真时,树叶以及树节点的统计信息被更新。 如果为false,则只更新节点统计信息。 - process_type,[default ='default']
一种促进过程的运行。
选择:{'default','update'}
'default':创建新树的正常提升过程。
“update”:从现有模型开始,只更新其树。 在每次boost迭代中,都会从初始模型中获取一棵树,为该树运行指定的updater插件序列,并将修改后的树添加到新模型中。 新模型将具有相同或更少的树数,具体取决于所执行的增强迭代次数。 目前,以下内置更新插件可以有效地用于此流程类型:'refresh','prune'。 使用'update',不能使用创建新树的更新插件。 - grow_policy,string [default ='depthwise']
控制新节点添加到树的方式。
目前仅当tree_method设置为'hist'时才受支持。
选择:{'depthwise','lossguide'}
'depthwise':在离根最近的节点处分割。
'lossguide':分割损失变化最大的节点。 - max_leaves,[默认= 0]
要添加的最大节点数。 只与“损失指导”增长政策相关。 - max_bin,[default = 256]
这仅在'hist'被指定为tree_method时才被使用。
用于存储连续特征的离散组的最大数目。
增加这个数字以更高的计算时间为代价提高了分割的最优性。 - predictor,[default ='cpu_predictor']
要使用的预测算法的类型。 提供相同的结果,但允许使用GPU或CPU。
'cpu_predictor':多核CPU预测算法。
'gpu_predictor':使用GPU进行预测。 “gpu_exact”和“gpu_hist”树方法的默认值
Additional parameters for Dart Booster
1.sample_type [default =“uniform”]
uniform”:统一选择掉落的树木。
weighted”:根据权重选择掉落的树木。
2.normalize_type [default =“tree”]
tree”:新树的树木重量相同。
forest”:新树有相同重量的掉落树木(森林)。
3.rate_drop [默认= 0.0]
(在dropout以前树的一小部分下降)。4.one_drop [default = 0]
5.skip_drop [默认= 0.0]
Parameters for Linear Booster
- lambda
L2正则化惩罚系数,增加该值会使得模型更加保守。 - alpha
L2正则化惩罚系数,增加该值会使得模型更加保守。 - updater [default ='shotgun']
线性模型算法
'shotgun':基于shotgun算法的平行坐标下降算法。 使用'hogwild'并行性,因此每次运行都会产生一个不确定的解决方案。
'coord_descent':普通坐标下降算法。 多线程,但仍然产生确定性的解决方案
Parameters for Tweedie Regression
1.tweedie_variance_power [默认= 1.5]Learning Task Parameters
- objective[default = reg:linear]
binary:logistic” - 二元分类的逻辑回归,输出概率
在GPU上评估的相应目标函数的“gpu:reg:linear”,“gpu:reg:logistic”,“gpu:binary:logistic”,gpu:binary:logitraw“请注意,像GPU直方图算法一样,只能在整个培训会话使用相同数据集时使用它们
计数数据的“count:poisson” - 泊松回归,泊松分布的输出均值
survival:cox” - 右删失生存时间数据的-Cox回归(负值被认为是右删失)。请注意,风险比例量表(即在比例风险函数h(t)= h0(t)* HR)中的预测值为HR = exp(marginal_prediction)。
gamma regression with log-link。输出是伽马分布的平均值。例如,对保险索赔的严重程度建模,或对可能采用伽玛分布的任何结果进行建模可能很有用
Tweedie regression with log-link。例如,对保险中的全部损失建模或任何可能由Tweedie分发的结果进行建模可能很有用。 - base_score [默认= 0.5]
所有实例的初始预测分数,全局偏差
对于足够数量的迭代,更改此值不会产生太多影响。 - eval_metric [根据目标的默认值]
验证数据的评估指标,默认指标将根据目标(回归的rmse,分类错误,排名的平均平均精度)
用户可以为python用户添加多个评估指标,请记住将参数中的指标作为参数对而不是地图进行传递,以便后者的“eval_metric”不会覆盖以前的指标
下面列出了选择:
“rmse”:均方根误差
“mae”:意思是绝对错误
“logloss”:负对数似然
“error”:二进制分类错误率。它计算为#(错误的情况)/#(所有情况)。对于预测,评估将把预测值大于0.5的实例视为正实例,将其他实例视为负实例。
“error @ t”:通过't'提供数值可以指定一个不同于0.5的二进制分类阈值。
“merror”:多类分类错误率。它计算为#(错误的情况)/#(所有情况)。
“mlogloss”:多类记录
“auc”:排名评估曲线下的区域。
“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参数的指定值处) - seed
随机数的种子 设置它可以复现随机数据的结果,也可以用于调整参数
Command Line Parameters
use_buffer
num_round
data
test:data
save_period
task
model_in
model_out
fmap
name_dump
name_pred
pred_margin
predict margin 而不是转换概率
Python Package Introduction
本文给出了xgboost python包的基本演练。其他有用链接列表
Install XGBoost
要安装XGBoost,请执行以下操作:- 在项目的根目录中运行make
- 在python-package目录中运行
python setup.py install
为了验证您的安装,请尝试在Python中导入xgboost。
import xgboost as xgb
Data Interface
XGBoost python模块能够从以下位置加载数据:- libsvm txt格式文件
- 逗号分隔值(CSV)文件
- Numpy 2维数组
- Scipy 2维稀疏数组,和
- xgboost二进制缓冲区文件。
- 将一个libsvm文本文件或一个XGBoost二进制文件加载到DMatrix中:
dtrain = xgb.DMatrix('train.svm.txt') dtest = xgb.DMatrix('test.svm.buffer')
- 将一个CSV文件加载到DMatrix中:
# label_column specifies the index of the column containing the true label dtrain = xgb.DMatrix('train.csv?format=csv&label_column=0') dtest = xgb.DMatrix('test.csv?format=csv&label_column=0')
(请注意,XGBoost不支持分类功能;如果您的数据包含分类功能,请先将其作为一个numpy数组加载,然后执行一次性编码。)- 将一个numpy数组加载到DMatrix中:
data = np.random.rand(5, 10) # 5 entities, each contains 10 features label = np.random.randint(2, size=5) # binary target dtrain = xgb.DMatrix(data, label=label)
- 将一个scpiy.sparse数组加载到DMatrix中:
csr = scipy.sparse.csr_matrix((dat, (row, col))) dtrain = xgb.DMatrix(csr)
- 将DMatrix保存为XGBoost二进制文件将使加载速度更快:
dtrain = xgb.DMatrix('train.svm.txt') dtrain.save_binary('train.buffer')
- 缺失的值可以用DMatrix构造函数中的默认值替换:
dtrain = xgb.DMatrix(data, label=label, missing=-999.0)
- 在需要时可以设置权重:
w = np.random.rand(5, 1) dtrain = xgb.DMatrix(data, label=label, missing=-999.0, weight=w)
Setting Parameters
XGBoost可以使用成对的列表或字典来设置参数。 例如:
- Booster parameters
param = {'max_depth': 2, 'eta': 1, 'silent': 1, 'objective': 'binary:logistic'} param['nthread'] = 4 param['eval_metric'] = 'auc'
- 您还可以指定多个评估指标:
param['eval_metric'] = ['auc', 'ams@0'] # alternatively: # plst = param.items() # plst += [('eval_metric', 'ams@0')]
- 指定验证集以观察性能
evallist = [(dtest, 'eval'), (dtrain, 'train')]
Training
- 培训模型需要参数列表和数据集。
num_round = 10 bst = xgb.train(plst, dtrain, num_round, evallist)
- 训练结束后,模型可以保存。
bst.save_model('0001.model')
- 模型及其特征映射也可以转储到文本文件中。
# dump model bst.dump_model('dump.raw.txt') # dump model with feature map bst.dump_model('dump.raw.txt', 'featmap.txt')
- 保存的模型可以按如下方式加载:
bst = xgb.Booster({'nthread': 4}) # init model bst.load_model('model.bin') # load data
Early Stopping
如果您有验证集,则可以使用早停以找到最佳数量的助推回合。 早停需要至少一套在evals中。 如果有多个,它将使用最后一个。train(...,evals = evals,early_stopping_rounds = 10)
该模型将训练,直到验证分数停止改进。 验证错误需要至少每个early_stopping_rounds减少以继续培训。
如果发生早停,模型将有三个附加字段:bst.best_score,bst.best_iteration和bst.best_ntree_limit。 请注意,train()将从上次迭代中返回一个模型,而不是最好的一个。
这适用于两个指标以最小化(RMSE,对数损失等)和最大化(MAP,NDCG,AUC)。 请注意,如果您指定多个评估指标,则参数['eval_metric']中的最后一个用于早停。
Prediction
- 已经训练或加载的模型可以对数据集执行预测。
# 7 entities, each contains 10 features data = np.random.rand(7, 10) dtest = xgb.DMatrix(data) ypred = bst.predict(dtest)
- 如果在训练期间启用提前停止,则可以通过最佳迭代获得预测
bst.best_ntree_limit
:
ypred = bst.predict(dtest, ntree_limit=bst.best_ntree_limit)
Plotting
您可以使用绘图模块绘制重要性和输出树。- 要绘制重要性,请使用plot_importance。 该功能需要安装matplotlib。
xgb.plot_importance(bst)
- 要通过matplotlib绘制输出树,请使用plot_tree,指定目标树的序号。 这个函数需要graphviz和matplotlib。
xgb.plot_tree(bst, num_trees=2)
- 在使用IPython时,可以使用to_graphviz函数,该函数将目标树转换为graphviz实例。 graphviz实例会自动在IPython中呈现。
xgb.to_graphviz(bst, num_trees=2)