XGBoost学习笔记

本文介绍了XGBoost模型的学习过程,包括Python库安装、参数说明及优化。重点讨论了如何通过调整参数如eta、gamma、max_depth、min_child_weight等防止过拟合,并讲解了如何处理数据集的不平衡问题,如使用DMatrix的权重设置和scale_pos_weight参数。
摘要由CSDN通过智能技术生成

XGBoost是Kaggle上非常火的一种模型,很多项目用它拿到了第一。

python库安装

python的pip上还没有1,mac上略有麻烦,参见Installing XGBoost on Mac OSX

Mac上,CC, CXX的version应该是7

export CC = gcc-7
export CXX = g++-7

参数的说明

对于xgboost,有很多参数可以设置,这些参数的详细说明在这里,有几个重要的如下:

  • 一般参数,设置选择哪个booster算法
    • booster: 可以选择gbtree,dart和gblinear。gbtree, dart使用基于树的模型进行提升计算,gblinear使用线性模型进行提升计算。缺省值为gbtree
    • silent: 取0时表示打印出运行时信息,取1时表示以缄默方式运行,不打印运行时信息。缺省值为0
    • nthread: XGBoost运行时的线程数。缺省值是当前系统可以获得的最大线程数
    • num_pbuffer: 预测缓冲区大小,通常设置为训练实例的数目。缓冲用于保存最后一步提升的预测结果,无需人为设置。
    • num_feature: Boosting过程中用到的特征维数,设置为特征个数。XGBoost会自动设置,无需人为设置。
  • 使用的booster算法的参数

    • gbtree参数设置

      • eta(学习率): 为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。 eta通过缩减特征的权重使提升计算过程更加保守。缺省值为0.3。取值范围为:[0,1] 在 Scikit-Learn中,这个参数名是learning_rate
      • gamma(最小扩展损失): 决定树的节点是否扩展为区域的最小损失。如多一个节点split的时候,对于loss function带来的降低量大于gamma时,则进行split。值越大,算法越保守。==需要调参==。缺省值是0,取值范围是[0,∞]
      • max_depth:树的深度,越大模型越复杂,也越可能过拟合。0表示没限制,默认值是6。==需要调参==,一般在3到10之间。
      • min_child_weight: 子节点中最小的样本权重和。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束。在现行回归模型中,这个参数是指建立每个模型所需要的最小样本数。值越大,算法越保守conservative,但太大会导致模型欠拟合,==需要调参==。默认值是1,取值范围为:[0,∞]
      • max_delta_step: 我们允许每个树的权重被估计的最大值。如果它的值被设置为0,意味着没有约束;如果它被设置为一个正值,它能够使得更新的步骤更加保守。通常无需设置该参数,但是如果在逻辑回归中极其不平衡时它可能会有帮助。把它范围设置为1-10之间也许能控制更新。默认值是0,取值范围为:[0,∞]
      • subsample: 用于训练模型的子样本占整个样本集合的比例。如果设置为0.5则意味着XGBoost将随机的从整个样本集合中随机的抽取出50%的子样本建立树模型,这能够防止过拟合,但取值太小可能欠拟合。一般在[0.5, 1]之间比较合适,允许的取值范围为:(0,1]
      • colsample_bytree: 在建立树时对特征采样的比例。缺省值为1,取值范围为:(0,1]
      • colsample_bylevel: 在建立树时,split时,对于每一层的特征采样比例。缺省值为1,取值范围为:(0,1]
      • alpha: L1 正则的惩罚系数,值越大越不容易过拟合,缺省值为0,增加这个值会让算法更保守。在 Scikit-Learn中,这个参数名是reg_alpha
      • lambda: L2 正则的惩罚系数,值越大越不容易过拟合,缺省值为1,增加这个值会让算法更保守。在 Scikit-Learn中,这个参数名是reg_lambda
      • scale_pos_weight: 当分类很不平衡的时候,把它设置为正值,可以加快收敛。默认值是1。

      还有很多,感觉不是特别重要,就没写上来

  • 学习任务的参数

    • objective: 定义学习目标,可选的目标函数如下:

      • “reg:linear” —— 线性回归。
      • “reg:logistic”—— 逻辑回归。
      • “binary:logistic”—— 二分类的逻辑回归问题,输出为概率。
      • “binary:logitraw”—— 二分类的逻辑回归问题,输出的结果为逻辑变换前的分值。
      • “count:poisson”—— 计数问题的poisson泊松回归,输出结果为poisson分布。在poisson回归中,max_delta_step的缺省值为0.7。(used to safeguard optimization)
      • “multi:softmax” –让XGBoost采用softmax目标函数处理多分类问题,同时需要设置参数num_class(类别个数),返回的是预测的分类
      • “multi:softprob” –和softmax一样,但是输出的是ndata * nclass的向量,可以将该向量reshape成ndata行nclass列的矩阵。每行数据表示样本所属于每个类别的概率。
      • “rank:pairwise” –设置XGBoost使用最小化pairwise损失做排名。
      • “reg:gamma”
      • “reg:tweedie”
    • base_score: 所有实例的初始化预测分数,全局的偏差值; 只要经历足够多的迭代次数,这个值对最终结果将不会有太大的影响。初始化为0.5

    • eval_metric: 校验数据所需要的评价指标,不同的目标函数将会有缺省的评价指标(rmse for regression, and error for classification, mean average precision for ranking),用户可以添加多种评价指标,对于Python用户要以list传递参数对给程序,而不是dict,否则后面的参数会覆盖之前。参数选择有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值