当前位置:   article > 正文

Xgboost库的使用

Xgboost库的使用

使用Xgboost模型需使用单独的Xgboost库,该库提供了两种Python接口风格。一种是XGBoost自带的原生Python API接口,另一种是sklearn风格的API接口,两者的实现方案基本一致,仅有细微的API使用的不同(此外,部分原生的参数并未在sklearn风格的API接口中实现,因此原生参数对模型的控制更加精细),在执行效率上原生接口往往更胜一筹,但sklearn风格更容易与其它sklearn中的算法模型进行比照。

1. 两类API接口
1.1 原生Python API接口

原生Python API接口的建模逻辑如下图所示:
在这里插入图片描述
(1)将需要训练和测试的数据用DMatrix进行封装
DMatrix是xgboost内置的数据类型,其可接收pandas.DataFrame、numpy.array,spicy.sparse等数据类型进行转换,也可直接接收指定txt所在路径。

import xgboost as xgb
data_train = xgb.DMatrix(X_train, y_train)
data_test = xgb.DMatrix(X_test, y_test)
  • 1
  • 2
  • 3

导入时还可同时设定样本权重(参数weight)、缺失值填充值(参数missing)、特征名称(参数feature_names)和特征数据格式(参数feature_types)等参数。

注意:若训练数据带有features_names(如pandas.DataFrame),则模型会记录这些属性,因此测试数据也必须具有同样的features_names,否则会报错。

(2)定义xgb的参数字典params
其相当于xgboost算法中的基学习器参数。完整的params设置包括:

params = {eta, gamma, max_depth, min_child_weight, max_delta_step, subsample, colsample_bytree,
colsample_bylevel, colsample_bynode, lambda, alpha, tree_method, sketch_eps, scale_pos_weight, updater,
refresh_leaf, process_type, grow_policy, max_leaves, max_bin, predictor, num_parallel_tree}
  • 1
  • 2
  • 3

这些参数的意义将在后面详细介绍。

(3)对模型进行训练xgb.train()
其作用相当于sklearn中fit方法,train方法配置如下,其相当于xgboost算法中的框架参数。

xgb.train (params, dtrain, num_boost_round=10, evals=(), obj=None, feval=None, maximize=False,
early_stopping_rounds=None, evals_result=None, verbose_eval=True, xgb_model=None, callbacks=None,
learning_rates=None)
  • 1
  • 2
  • 3

(4)利用训练好的模型进行预测xgb.predict()
其作用相当于sklearn中predict方法。

1.2 原生Python API接口

为了便于sklearn的使用者更方便的使用xgboost算法,该库提供了一套更符合sklearn使用习惯的API接口。其建模逻辑与sklearn中的其它机器学习模型一致。
在这里插入图片描述
(1)实例化分类器实例对象est=xgb.XGBClassifier(params)或者回归器实例对象est=xgb.XGBRegressor(params),其中的模型参数params既包括基学习器的参数,也包括框架参数。

# 以XGBRegressor为例
est = xgboost.XGBRegressor (max_depth=3, learning_rate=0.1, n_estimators=100, silent=True,
objective='reg:linear', booster='gbtree', n_jobs=1, nthread=None, gamma=0, min_child_weight=1, max_delta_step=0,
subsample=1, colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1, scale_pos_weight=1,
base_score=0.5, random_state=0, seed=None, missing=None, importance_type='gain', **kwargs
  • 1
  • 2
  • 3
  • 4
  • 5

(2)模型训练est.fit()

est.fit(self, X, y, sample_weight=None, eval_set=None, eval_metric=None, early_stopping_rounds=None, 
verbose=True, xgb_model=None,sample_weight_eval_set=None)
  • 1
  • 2

(3)模型的使用est.predict()

2. 模型主要参数

xgboost中主要包含三种类型的数据:框架参数基学习器参数以及其它配置参数

sklearn API参数原生API参数参数类型参数含义说明
n_estimatorsnum_round框架参数子学习器个数boosting框架下的子学习器数量。在原生API中,该参数在train方法中定义。
learning_rateeta框架参数步长用于限制子学习器的过拟合,提高模型的泛化能力,与n_estimators配合使用
silentsilent框架参数运行信息输出控制0表示输出运行信息,1表示采取静默模式。默认值为0.
subsamplesubsample框架参数样本子采样数每个子学习器训练时采样的行采样比例(值区间为0~1),采样方式为无放回采样。
max_depthmax_depth基学习器参数树的最大深度对基学习器函数空间的正则化,一种预修剪手段。
objectiveobjective基学习器参数损失函数自定义的损失函数,通过申明合适的损失函数来处理分类、回归和排序问题。常见的方法包括线性回归‘reg:linear’、逻辑回归'reg:logistic'、二分类逻辑回归'binary:logistic',多分类'multi:softmax',平方误差`reg:squarederror`等
boosterbooster基学习器参数基学习器类型xgboost中采用的基学习器,如梯度提升树'gbtree',梯度提升线性模型'gblinear'等
gammagamma基学习器参数分裂阈值即最小损失分裂,用来控制分裂遵循的结构分数提升下限阈值。
min_child_weightmin_child_weight基学习器参数叶子节点最小权重叶子节点允许的最小权重值(即节点中所有样本的二阶导数值之和),可视为是对叶子节点的正则化,是一种后剪枝的手段。
max_delta_stepmax_delta_step基学习器参数每棵子学习器的最大权重值用于限制每棵子学习器的权重,提高模型的泛化能力。
colsample_bytreecolsample_bytree基学习器参数以树为单位进行列采样每棵树进行一次列采样
colsample_bylevelcolsample_bylevel基学习器参数以层为单位进行列采样以每棵树中的每一层为单位进行列采样
colsample_bynodecolsample_bynode基学习器参数以节点为单位进行列采样以每棵树中的每一节点为单位进行列采样。注意:colsample_bytree、colsample_bylevel和colsample_bynode分别从子树、层、节点三个层级进行列采样,这些系数是可以累计作用的。
reg_alphaalpha基学习器参数L1正则化系数对集成模型进行L1正则化(以子节点的个数为约束)的系数,默认值为0。
reg_lambdalambda基学习器参数L2正则化系数对集成模型进行L2正则化(以子节点权重w的平方和为约束)的系数,默认值为0。
nthreadn_jobs其它配置参数最大并发线程数最大并发线程数
scale_pos_weightscale_pos_weight其它配置参数类别样本权重当关注预测问题的排序或者AUC指标时,通过设置该参数提高预测结果。如果需要预测的是概率预测值,则无须设置该值,而应当设置max_delta_step参数。
base_scorebase_score其它配置参数初始预测值相当于为模型添加一个初始的bias。
random_stateseed其它配置参数随机种子控制模型的随机性。
missingmissing其它配置参数缺失值处理为缺失值进行标注。默认为None,即标注为np.nan。
importance_typeimportance_type其它配置参数特征权重计算策略其值可为'gain'、'weight', 'cover', 'total_gain' 或者 'total_cover',可通过调用booster的get_score方法获取对应的特征权重。其中'weight'表示特征被分裂的次数;'total_gain'和 'gain'分别表示各特征分裂导致的结构分数增益总值以及在各树上的平均值;而 'total_cover'和 'cover'分别表示各特征分裂涉及的样本总覆盖率及各树上的平均值。

除了上述模型,在xgboost的fit方法中,还涉及到几个重要参数:
(1)sample_weight:表示样本权重
(2)eval_set:在训练的同时进行验证的数据集
(3)eval_metric:验证集的评价指标
(4)early_stopping_rounds: 根据模型在验证集表现的早停轮数阈值。具体而言,若模型在连续early_stopping_rounds次迭代过程中,其在eval_set上的eval_metric并无提升,则模型停止迭代。

3. 模型的调参

Xgboost库的模型参数众多(尤其是原生API的更甚),其基础的调参过程类似于GBDT模型,即一般着重调节如下参数。
(1)根据问题类型和场景,选择合适的booster和objective。
(2)联合调节n_estimators和learning_rate。
(3)调节基学习器的相关控制参数。
(4)调节其它超参数。
(5)适当缩小learning_rate和增大n_estimators,提高总模型的泛化能力。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/525486
推荐阅读
相关标签
  

闽ICP备14008679号