python 分类变量xgboost_XGBoost使用

本文介绍了XGBoost的原理,强调了其在损失函数优化和算法效率上的改进。详细阐述了XGBoost的重要参数,包括学习率、最大深度、最小子叶权重等,并提供了分类任务的使用示例,包括训练、交叉验证、自定义目标函数等操作。此外,还讨论了如何处理不均衡数据集以及如何进行超参数调优。
摘要由CSDN通过智能技术生成

目录

  • 1. XGBoost原理简介

  • 2. XGBoost参数说明

  • 3. 使用示例

    • 训练XGBoost简单demo

    • 使用交叉验证

    • 进阶操作-调整样本权重

    • 进阶操作-自定义目标函数(损失函数)

    • 用前n棵树做预测

    • 绘制特征重要度

    • 与sklearn组合使用

    • 优化超参数-网格搜索

  • 完整代码地址

  • 参考

1. XGBoost原理简介

XGBoost本质上还是GBDT,但它把算法的速度和效率做到了极致,所以叫X(Extreme)GBoost。

XGBoost主要从以下方面做了优化:

  • 算法本身的优化
    • 弱学习器的选择上,除了 树模型,还支持线性模型等。
    • 在损失函数上,加入了L1L2正则化项,以防止过拟合。
    • 使用损失函数的二阶泰勒展开,在当前模型的值来近似表示残差,然后在每一步中去拟合这个残差。由于对损失函数进行一阶和二阶求导,能更快的收敛。
  • 算法运行效率的优化,对每个弱学习器,比如决策树建立的过程做并行选择。
  • 算法健壮性的优化,对特征的缺失值做了处理。

更详细的原理介绍可参考刘建平老师的博客:XGBoost算法原理小结

https://www.cnblogs.com/pinard/p/10979808.html

为什么XGBoost要用泰勒展开,优势在哪里?

XGBoost使用了一阶和二阶偏导, 二阶导数有利于梯度下降的更快更准. 使用泰勒展开取得函数做自变量的二阶导数形式, 可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数据的值就可以进行叶子分裂优化计算, 本质上也就把损失函数的选取和模型算法优化/参数选择分开了. 这种去耦合增加了XGBoost的适用性, 使得它按需选取损失函数, 可以用于分类, 也可以用于回归。

2. XGBoost参数说明

先给出XGBoost官方文档的3个重要页面:

(1)XGBoost Parameters 参数说明 https://xgboost.readthedocs.io/en/latest/parameter.html

(2)Notes on Parameter Tuning 调参指南 https://xgboost.readthedocs.io/en/latest/tutorials/param_tuning.html

(3)Awesome XGBoost 一些非常棒的使用案例、教程和示例 https://github.com/dmlc/xgboost/tree/master/demo

关于 XGBoost Parameters 参数 的一些简要说明:XGBoost参数有三类,分别是通用参数(基)模型参数(例如时Tree Bosster或者Linear Booster等)、任务参数。下面介绍部分常用的参数:

  • General Parameters 通用参数

    • booster:基模型,默认是gbtree
    • verbosity :(silent)开启静默模式,在后台跑,不输出信息, 1 (warning), 2 (info), 3 (debug)
    • nthread:线程个数
  • Parameters for Tree Booster (树)模型参数,还有其他模型的参数,如gblinear等

    • eta:学习率,范围是【0,1】,默认是0.3
    • gamma:一个阈值:minimum loss reduction,控制是否对叶子结点做进一步分割,gamma值越大,算法会越保守,就不会很激进的去做下一步分裂,以免过拟合,范围是【0,】,默认是0。可以控制过拟合
    • max_depth:最大树深,范围是【0,】,默认是6。可以控制过拟合
    • min_child_weight:最小孩子权重,范围是【0,】,默认是1。
    • subsample:控制所取训练样本占全量样本的比例,默认是1
    • colsample_bytree:建树时考虑column的占比
    • colsample_bylevel:在每层做分裂时,考虑column的占比
    • colsample_bynode:在每个节点做分裂时,考虑column的占比
    • lambda:控制正则化强度,L2正则化
    • alpha:控制正则化强度,L1正则化
    • scale_pos_weight:控制样本权重,即控制正例与负例的平衡,例如样本本身不均衡的情况。其实就是正负例的权重比值,默认是1,即正负样本权重一样
  • Learning Task Parameters 任务参数

    • objective:目标函数
    • eval_metric:评估标准(验证集),例如:“rmse”:均方根误差,"mae":平均绝对误差,“error”:二分类的错误率等等

【注意】

xgboost有2套python API:1个是 原生API,1个是 sklearn 风格的API,差别主要体现在参数命名和数据集上,例如原生API 数据集需要放到DMatrix的数据结构里。例如为了确定估计器的数目,也就是boosting迭代的次数,也可以说是残差树的数目ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值