机器学习之-XGBoost2.0 -实践

1.0 XGBoost如何评价特征的重要性

我们采用三种方法来评判XGBoost模型中特征的重要程度:

官方文档:
(1)weight - the number of times a feature is used to split the data across all trees.
(2)gain - the average gain of the feature when it is used in trees.
(3)cover - the average coverage of the feature when it is used in trees.

  • weight :该特征在所有树中被用作分割样本的特征的总次数。
  • gain :该特征在其出现过的所有树中产生的平均增益。
  • cover:该特征在其出现过的所有树中的平均覆盖范围。
    注意: 覆盖范围这里指的是一个特征用作分割点后,其影响的样本数量,即有多少样本经过该特征分割到两个子节点。

2.0 XGBooost参数调优的一般步骤

首先需要初始化一些基本变量,例如:

  1. max_depth = 5
  2. min_child_weight = 1
  3. gamma = 0
  4. subsample, colsample_bytree = 0.8
  5. scale_pos_weight = 1

2.1 确定learning rate和estimator的数量

learning rate可以先用0.1,用cv来寻找最优的estimators

2.2 max_depth和 min_child_weight

我们调整这两个参数是因为,这两个参数对输出结果的影响很大。我们首先将这两个参数设置为较大的数,然后通过迭代的方式不断修正,缩小范围。

  1. max_depth,每棵子树的最大深度,check from range(3,10,2)。
  2. min_child_weight,子节点的权重阈值,check from range(1,6,2)。

如果一个结点分裂后,它的所有子节点的权重之和都大于该阈值,该叶子节点才可以划分。

2.3 gamma

也称作最小划分损失min_split_loss,check from 0.1 to 0.5,指的是,对于一个叶子节点,当对它采取划分之后,损失函数的降低值的阈值。

  1. 如果大于该阈值,则该叶子节点值得继续划分
  2. 如果小于该阈值,则该叶子节点不值得继续划分

2.4 subsample, colsample_bytree

  1. subsample是对训练的采样比例
  2. colsample_bytree是对特征的采样比例

both check from 0.6 to 0.9

2.5 正则化参数

alpha 是L1正则化系数,try 1e-5, 1e-2, 0.1, 1, 100
lambda 是L2正则化系数

2.6 降低学习率

降低学习率的同时增加树的数量,通常最后设置学习率为0.01~0.1

3.0 XGBoost参数详解

xgboost的python版本有原生版本和为了与sklearn相适应的sklearn接口版本 原生版本更灵活,而sklearn版本能够使用sklearn的Gridsearch,二者互有优缺。

对比预测结果,原生xgb与sklearn接口的训练过程相同,结果也相同。 不同之处在于:

  • 原生采用xgb.train()训练,sklearn接口采用model.fit() 。
  • sklearn接口中的参数n_estimators在原生xgb中定义在xgb.train()的num_boost_round
  • sklearnwatchlist为[(xtrain,ytrain),(xtest,ytest)]形式,而原生则是(dtrain,‘train’),(dtest,‘test’)],在数据和标签都在DMatrix中,元组里可以定位输出时的名字。

下面的参数以原生版本为例。
在运行XGboost之前,必须设置三种类型的参数:general parameters,booster parameters和task parameters:

  1. General parameters : 该参数参数控制在提升(boosting)过程中使用哪种booster,常用的booster有树模型(tree)和线性模型(linear model)
  2. Booster parameters :这取决于使用哪种booster
  3. Task parameters : 控制学习的场景,例如在回归问题中会使用不同的参数控制排序

这是一个字典,里面包含着训练中的参数关键字和对应的值,形式如下:

3.1 常规参数

  • booster [default=gbtree]:有两种模型可以选择gbtree和gblinear。gbtree使用基于树的模型进行提升计算,gblinear使用线性模型进行提升计算。缺省值为gbtree。
  • silent [default=0]:取0时表示打印出运行时信息,取1时表示以缄默方式运行,不打印运行时信息。缺省值为0。(True、False也可以)
  • nthread :XGBoost运行时的线程数。缺省值是当前系统可以获得的最大线程数
  • num_pbuffer:无需自己手动设置。预测缓冲区的大小,通常设置为训练实例数。缓冲区用于保存上一个树生长的预测结果。
  • num_feature:特征数量,无需自己手动设置。

3.2 模型参数

3.2.1 Tree Booster

  • eta [default=0.3]:为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。eta通过缩减特征的权重使提升计算过程更加保守。缺省值为0.3,取值范围为:[0,1]。
  • gamma [default=0]:分裂节点时,损失函数减小值只有大于等于gamma节点才分裂,gamma值越大,算法越保守,越不容易过拟合,但性能就不一定能保证,需要平衡,取值范围为:[0,∞]。
  • max_depth [default=6]:数的最大深度。缺省值为6,取值范围为:[1,∞]。值越大,树越大,模型越复杂,可以用来防止过拟合,典型值是3-10。
  • min_child_weight [default=1]:一个子集的所有观察值的最小权重和。如果新分裂的节点的样本权重和小于min_child_weight则停止分裂 。这个可以用来减少过拟合,但是也不能太高,会导致欠拟合。该指数越大越大算法越保守,取值范围为: [0,∞]。
  • max_delta_step [default=0]:每棵树所被允许的权重估计为最大增量。如果该值设置为0,则表示没有约束。如果将其设置为正值,则有助于使更新步骤更加保守。通常不需要这个参数,但当类极不平衡时,它可能有助于logistic回归。将其设置为1-10可能有助于控制更新,取值范围为:[0,∞]。
  • subsample [default=1]:构建每棵树对样本的采样率,用于训练模型的子样本占整个样本集合的比例。如果设置为0.5则意味着XGBoost将随机的冲整个样本集合中随机的抽取出50%的子样本建立树模型,这能够防止过拟合。取值范围为:(0,1]。
  • colsample_bytree [default=1]:列采样率,也就是特征采样率。在建立树时对特征采样的比例。缺省值为1,取值范围:(0,1]。
  • colsample_bylevel [default=1]:构建每一层时,列采样率。
  • lambda [default=1, alias: reg_lambda]:L2正则化,这个参数是用来控制XGBoost的正则化部分的。虽然大部分数据科学家很少用到这个参数,但是这个参数在减少过拟合上还是可以挖掘出更多用处的。
  • alpha [default=0, alias: reg_alpha]:L1正则化,增加该值会让模型更加收敛
  • scale_pos_weight, [default=1]:在类别高度不平衡的情况下,将参数设置大于0,可以加快收敛。

3.2.1 Linear Booster

  • lambda [default=0]:L2 正则的惩罚系数
  • alpha [default=0]:L1 正则的惩罚系数
  • lambda_bias:在偏置上的L2正则。缺省值为0(在L1上没有偏置项的正则,因为L1时偏置不重要)

3.3 训练参数

  • objective [default=reg:linear]:定义学习任务及相应的学习目标,可选的目标函数如下:

“reg:linear” –线性回归。
“reg:logistic” –逻辑回归。
“binary:logistic”–二分类的逻辑回归问题,输出为概率。
“binary:logitraw”–二分类逻辑回归,输出是逻辑为0/1的前一步的分数。
“count:poisson”–计数问题的poisson回归,输出结果为poisson分布。在poisson回归中,max_delta_step的缺省值为0.7。
“multi:softmax” –让XGBoost采用softmax目标函数处理多分类问题,同时需要设置参数num_class(类别个数)
“multi:softprob” –和softmax一样,但是输出的是ndata * nclass的向量,可以将该向量reshape成ndata行nclass列的矩阵。每个数据属于各个类别的概率。
“rank:pairwise”–让Xgboost 做排名任务,通过最小化(Learn to rank的一种方法)

  • base_score [default=0.5]:所有实例的初始预测得分,全局偏差;为了足够的迭代次数,改变这个值将不会有太大的影响。
  • eval_metric [默认值取决于objective参数的取值]:校验数据所需要的评价指标,不同的目标函数将会有缺省的评价指标(回归:rmse,分类:误差,排序:平均精度)。用户可以添加多种评价指标,对于Python用户要以list传递参数对给程序,而不是map参数,list参数不会覆盖’eval_metric’。
    对于有效数据的度量方法。对于回归问题,默认值是rmse,对于分类问题,默认值是error。典型值有:

rmse:均方根误差
mae:平均绝对误差
logloss:负对数似然函数值
error:二分类错误率(阈值为0.5)
merror:多分类错误率
mlogloss:多分类logloss损失函数
auc:曲线下面积

  • seed[ default=0 ]:随机数的种子。缺省值为0
  • dtrain:训练的数据
  • num_boost_round:这是指提升迭代的次数,也就是生成多少基模型。即树的棵树。
  • evals:这是一个列表,用于对训练过程中进行评估列表中的元素。形式是evals =
    [(dtrain,‘train’),(dval,‘val’)]或者是evals = [(dtrain,‘train’)],对于第一种情况,它使得我们可以在训练过程中观察验证集的效果
  • obj:自定义目的函数
  • feval:自定义评估函数
  • maximize:是否对评估函数进行最大化
  • early_stopping_rounds:早期停止次数
    ,假设为100,验证集的误差迭代到一定程度在100次内不能再继续降低,就停止迭代。这要求evals
    里至少有一个元素,如果有多个,按最后一个去执行。返回的是最后的迭代次数(不是最好的)。如果early_stopping_rounds存在,则模型会生成三个属性,bst.best_score,bst.best_iteration和bst.best_ntree_limit
  • evals_result:字典,存储在watchlist中的元素的评估结果。
  • verbose_eval :(可以输入布尔型或数值型),也要求evals里至少有一个元素。如果为True,则对evals中元素的评估结果会输出在结果中;如果输入数字,假设为5,则每隔5个迭代输出一次。
  • learning_rates:每一次提升的学习率的列表,
  • xgb_model:在训练之前用于加载的xgb model。

参考链接

https://luweikxy.gitbook.io/machine-learning-notes/ensemble-learning/boosting/gradientboosting/xgboost/xgboost-practice#xgboost-de-scalable-xing-ru-he-ti-xian

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值