XGBoost参数设置中文版及PXGBoost的Python模块解释

匿名 (未验证) 提交于 2019-12-02 22:56:40
本文来源于XGBoost官方文档原文链接
XGBoost参数官方文档:XGBoost Parameters (official guide)
XGBoost的Python模块介绍官方文档:Python Package Introduction





命令行参数取决于xgboost的CLI版本

XGBoost参数设置

General Parameters

  1. booster
    决定使用哪个booster,可以是gbtree,gblinear或者dart。 gbtree和dart使用基于树的模型,而gblinear 使用线性函数.
  2. silent
    设置为0打印运行信息;设置为1静默模式,不打印
  3. nthread

    下面的两个参数不需要设置,使用默认的就好了

  4. num_pbuffer
    预测结果缓存大小,通常设置为训练实例的个数。该缓存用于保存最后boosting操作的预测结果。

  5. num_feature
    在boosting中使用特征的维度,设置为特征的最大维度

Parameters for Tree Booster

  1. eta

    范围: [0,1]
  2. gamma
    在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。Gamma指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。这个参数的值和损失函数息息相关,所以是需要调整的。 (设置此参数应该属于预剪枝操作,应博主还未进行实际操作,想着应该是分裂后损失函数值下降小于设置值是则不进行分裂,早停,防止过拟合,希望交流指正或等博主实战后再来确认修改)
    范围: [0,∞]
  3. max_depth

    范围: [0,∞]
  4. min_child_weight

    范围: [0,∞]
  5. max_delta_step [default = 0]
    我们允许每棵树的权重估计值为最大增量步长。 如果该值设置为0,则表示没有约束。 如果它设置为正值,则可以帮助使更新步骤更加保守。 通常这个参数是不需要的,但是当类非常不平衡时,它可能有助于逻辑回归。 将它设置为1-10的值可能有助于控制更新
    范围:[0,∞]
  6. subsample

    范围: (0,1]
  7. colsample_bytree

    范围: (0,1]
  8. colsample_bylevel

    范围: (0,1]
  9. lambda
    权重的L2正则化项。(和Ridge regression类似)。 这个参数是用来控制XGBoost的正则化部分的。
    调节目标函数中正则化项以调整模型复杂程度,提高函数泛化能力(防止过拟合),而且L2范数还可以让优化求解更稳定和快速。.
  10. alpha
    权重的L1正则化项。(和Lasso regression类似)。 可以应用在很高维度的情况下,使得算法的速度更快。
  11. tree_method,string [default ='auto']
    XGBoost中使用的树构建算法(参见参考文献中的描述)
    分布式和外部存储器版本仅支持近似算法。
    选择:{'auto','exact','approx','hist','gpu_exact','gpu_hist'}
    'auto':使用启发式来选择更快的。
    对于中小型数据集,将使用精确的贪心算法。
    对于非常大的数据集,将选择近似算法。
    由于旧行为总是在单机中使用精确的贪心算法,因此当选择近似算法来通知此选择时,用户将收到消息。
    'exact':精确的贪婪算法。
    'approx':使用草图和直方图的近似贪心算法。
    'hist':快速直方图优化的近似贪心算法。 它使用一些性能改进,如箱缓存。
    'gpu_exact':精确算法的GPU实现。
    'gpu_hist':GPU算法的实现。
  12. sketch_eps,[默认= 0.03]
    这仅用于近似贪心算法。
    这大致转换为O(1 / sketch_eps)箱数。 与直接选择箱数量相比,这具有草图准确性的理论保证。
    通常用户不必调整它。 但考虑设置更低的数字以获得更准确的枚举。
    范围:(0,1)
  13. scale_pos_weight
    在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。通常可以将其设置为负样本的数目与正样本数目的比值。
  14. updater,[默认='grow_colmaker,prune']
    一个逗号分隔的字符串,用于定义要运行的树更新程序的序列,提供了一种模块化的方法来构建和修改树。这是一个高级参数,通常根据其他参数自动设置。但是,它也可以由用户明确设置。以下更新插件存在:








    在分布式设置中,隐式更新器序列值将按如下方式进行调整:


  15. refresh_leaf,[default = 1]
    这是'refresh'更新插件的参数。 当这个标志为真时,树叶以及树节点的统计信息被更新。 如果为false,则只更新节点统计信息。
  16. process_type,[default ='default']
    一种促进过程的运行。
    选择:{'default','update'}
    'default':创建新树的正常提升过程。
    update”:从现有模型开始,只更新其树。 在每次boost迭代中,都会从初始模型中获取一棵树,为该树运行指定的updater插件序列,并将修改后的树添加到新模型中。 新模型将具有相同或更少的树数,具体取决于所执行的增强迭代次数。 目前,以下内置更新插件可以有效地用于此流程类型:'refresh','prune'。 使用'update',不能使用创建新树的更新插件。
  17. grow_policy,string [default ='depthwise']
    控制新节点添加到树的方式。
    目前仅当tree_method设置为'hist'时才受支持。
    选择:{'depthwise','lossguide'}
    'depthwise':在离根最近的节点处分割。
    'lossguide':分割损失变化最大的节点。
  18. max_leaves,[默认= 0]
    要添加的最大节点数。 只与“损失指导”增长政策相关。
  19. max_bin,[default = 256]
    这仅在'hist'被指定为tree_method时才被使用。
    用于存储连续特征的离散组的最大数目。
    增加这个数字以更高的计算时间为代价提高了分割的最优性。
  20. 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

  1. lambda
    L2正则化惩罚系数,增加该值会使得模型更加保守。
  2. alpha
    L2正则化惩罚系数,增加该值会使得模型更加保守。
  3. updater [default ='shotgun']
    线性模型算法
    'shotgun':基于shotgun算法的平行坐标下降算法。 使用'hogwild'并行性,因此每次运行都会产生一个不确定的解决方案。
    'coord_descent':普通坐标下降算法。 多线程,但仍然产生确定性的解决方案

Parameters for Tweedie Regression

1.tweedie_variance_power [默认= 1.5]





Learning Task Parameters

  1. 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分发的结果进行建模可能很有用。
  2. base_score [默认= 0.5]
    所有实例的初始预测分数,全局偏差
    对于足够数量的迭代,更改此值不会产生太多影响。
  3. 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参数的指定值处)
  4. 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二进制缓冲区文件。
数据存储在DMatrix对象中。
  • 将一个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)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!