Xgboost官方文档的解读(python)

Xgboost的官方文档在这里

https://xgboost.readthedocs.io/en/latest/

我们今天直接从代码部分开始学习
见下图黑色圈内的部分
在这里插入图片描述

首先来看XGBoost参数(黑圈里的第二行)


在运行XGBoost之前,一定要设定好三类参数
一般参数:即我们使用什么基学习器模型(一般树?线性模型?)来构建boosting算法(这里没有boosting算法的同学请自己简要补一下集成学习的课。。)
booster参数:这取决于上面一般参数的选择
学习任务参数:决定模型的学习方案
还有一个指令行参数,说是与console version的xgboost有关 似乎是稍微次要一些的参数

首先来看一般参数
在这里插入图片描述

  • booster:默认为gbtree(gradient boosting tree 梯度提升树) 我们还可以换成gblinear或者dart(decision and regression tree)。其中,gbtree和dart使用树模型而gblinear使用线性模型(这是显而易见的,顾名思义)
  • silent:默认为0。好像官方极不推荐把它调成非0,强烈建议用verbosity
  • verbosity:默认为1.似乎是出现异常、非期望行为时的反馈信息严重度。0为不反馈silent,1是警告,2是info,3是debug
  • nthread:多线程的线程数,默认为可能的最大值
  • disable_default_eval_metric:默认为0,若设为>0则禁止default metric(似乎是禁用默认评价函数)
  • num_pbuffer、num_feature:xgboost 自动设置 不管了

接下来看树模型的booster参数
参数太多了 图就不截了
这些参数是

  • List item

  • eta [default=0.3, alias: learning_rate]
    eta默认0.3,取值范围是 [0,1],是更新收缩的描述,使得每一次更新权重时收缩它以防止过拟合

  • gamma [default=0, alias: min_split_loss]取值范围[0,∞]
    树节点进行一次分叉所需的最小的损失降低
    gamma越大,似乎是算法具有更强的泛化能力。

  • max_depth [default=6]树的最大深度 默认是6,增加此值会使模型更复杂、更容易过拟合。仅当tree_method设为hist时允许设为0,此时0的意思是没有深度限制 当然这也会使用更多的内存

  • min_child_weight [default=1] 默认为1 取值为[0,∞] 越大、具有更强的泛化能力。
    这里参考(更多内容参照下面这个帖子)

https://blog.csdn.net/m0_37477175/article/details/79991198
決定最小葉子節點樣本權重和。如果在一次分裂中,葉子節點上所有樣本的權重和小于min_child_weight則停止分裂,能夠有效的防止過擬合,防止學到特殊樣本。

  • max_delta_step [default=0]最大delta步 默认为0,0意味着没有限制,若设为一个正数,它将让我们的模型具有更强的泛化能力。通常不需要,但是当逻辑斯特回归中分类非常不均衡时使用这个参数设置为1-10

  • subsample [default=1] 下采样率,若设为0.5意味着算法会随机从训练集的一半进行采样先验来使得树生长,防止过拟合。下采样在每次boosting迭代时进行 范围(0,1]

  • colsample_bytree, colsample_bylevel, colsample_bynode [default=1] 这是一族下采样参数 每一个都是(0, 1]默认为1

  • 这里待补充 给个原图先
    在这里插入图片描述

  • lambda [default=1, alias: reg_lambda]

L2 正则化项权重 越大则泛化能力越强

  • alpha [default=0, alias: reg_alpha]

L1 正则化项权重 越大则泛化能力越强

  • tree_method string [default= auto]使用的树的类型
    可选的种类为: auto, exact, approx, hist, gpu_exact, gpu_hist
    auto: 用启发式算法来找最快的方法 对中小数据集使用精确贪心方法、对大数据集使用近似算法(使用时会弹出相应信息)对
    exact: Exact greedy algorithm.精确贪心算法
    approx: 用 quantile sketch and gradient histogram.的近似贪心
    hist: Fast histogram optimized approximate greedy algorithm. It uses some performance improvements such as bins caching.(好像是一种矩形图优化的近似贪心算法)
    gpu_exact: GPU版exact
    gpu_hist: GPU 版 hist .

  • sketch_eps [default=0.03]仅在approx方法中用到,range: (0, 1)
    通常不要自己设置

  • scale_pos_weight [default=1] 控制正负权重的平衡 对非均衡分类有用 一种可以考虑的值为 反例数/正例数

  • updater [default= grow_colmaker,prune]通常自动设置 取决于其它参数

在这里插入图片描述

  • refresh_leaf

[default=1]刷新叶 若为1 树的叶和结点状态更新 当为0 仅后者更新

  • process_type [default= default]可选为default 和 update

default: 创建新树的普通boosting过程
update: 从一个存在的模型开始,仅更新树. 若为update, 不可引入更新插件

  • grow_policy [default= depthwise]控制一路新结点并加到树上仅支持tree_method = hist
    Controls a way new nodes are added to the tree.
    可选: depthwise, lossguide
    depthwise: 分裂离root最近的结点
    lossguide: 分裂最高loss change的结点

  • max_leaves [default=0]可加的最大结点数 仅在grow_policy=lossguide设置

  • max_bin, [default=256]仅在 tree_method=hist时设置 最大的分离bin来盛放连续特征 增加会优化分叉、消耗更多时间

  • predictor, [default=cpu_predictor]可选gpu_predictor: 仅在 tree_method is gpu_exact or gpu_hist是可用

  • num_parallel_tree, [default=1] - 每次迭代时的并行树的数目,这个参数是为了支持随机森林算法的。Number of parallel trees constructed

Additional parameters for Dart Booster
决策回归树中额外参数 因为没用这个 没有太看 附图
在这里插入图片描述

线性模型中的参数 先上图
在这里插入图片描述
这里很多都是和上面类似的,有一个top_k值得关注 默认是0 这里是选择的前k个特征(使用greedy或thrifty)为0则使用所有特征

GPU支持及算法

按照官方文档说明,需要首先安装好Xgboost

pip3 install xgboost

在这里插入图片描述
这里有两点note,一个是在说这个xgboost的whl支持GPU算法(gpu_exact, gpu_hist)
需要用英伟达显卡
多卡仅Linux系统支持
whl仅提供给64位LINUX和windows系统

接下来回到原来的GPU SUPPORT界面,看第一部分内容
1.CUDA Accelerated Tree Construction Algorithms
在参数中,tree_method表示使用的算法类别(即上面那个括号里的exact和hist)
在这里插入图片描述
其中,gpu_exact是标准XGBOOST算法,对树分叉执行精准搜索
比gpu_hist慢、占用更多内存
而,gpu_hist是xgboost直方图算法?(这里我是直翻,可能不太对)
记住它比gpu_exact使用更少的内存且有更快的速度就行了,但是如果你的GPU是比帕斯卡架构更老的GPU(10系之前的,如980TI),那就会运行得很慢

两个算法各自支持的参数如下:
在这里插入图片描述
可以使用gpu的方法的同时使用cpu_predictor以节省显存(不过以现在的GPU性能 好像不会这么干)
下面是GPU支持的目标函数
在这里插入图片描述
下面是GPU支持的描述函数
在这里插入图片描述

CPU VS GPU的性能对比在这里插入图片描述

接下来研究python上实现xgboost

https://github.com/dmlc/xgboost/tree/master/demo/guide-python是一个例程
https://xgboost.readthedocs.io/en/latest/python/python_api.html是python的API说明

xgboost可以加载下面这些数据类型
LibSVM text format file
Comma-separated values (CSV) file
NumPy 2D array
SciPy 2D sparse array
Pandas data frame, and
XGBoost binary buffer file.

注:

  • 1.不支持离散类别型特征,请用onehot处理后再输入
  • 2.关于pandas数据集有表头的情况,见下面的csv读取格式

在这里插入图片描述
在这里插入图片描述

设置参数

很容易 用list和dict即可
在这里插入图片描述

训练

先建立模型(使用上面的参数)
训练后可以存储模型 也可以加载训练好的模型
可以将模型和特征映射存进文本文件
在这里插入图片描述

early停止和预测

在这里插入图片描述

画图

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值