xgboost 调参经验

2023-11-02

本文介绍三部分内容:
- xgboost 基本方法和默认参数
- 实战经验中调参方法
- 基于实例具体分析

1.xgboost 基本方法和默认参数

在训练过程中主要用到两个方法:xgboost.train()和xgboost.cv().

#xgboost.train()API
xgboost.train(params,dtrain,num_boost_round=10,evals=(),obj=None,feval=None,maximize=False,early_stopping_rounds=None,
evals_result=None,verbose_eval=True,learning_rates=None,xgb_model=None)
  • params 这是一个字典,里面包含着训练中的参数关键字和对应的值,形式是params = {‘booster’:’gbtree’,’eta’:0.1}
  • 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。

2.实战经验中调参方法

首先 parameters 设置如下:

params = {
            'booster':'gbtree',
            'objective':'binary:logistic',
            'eta':0.1,
            'max_depth':10,
            'subsample':1.0,
            'min_child_weight':5,
            'colsample_bytree':0.2,
            'scale_pos_weight':0.1,
            'eval_metric':'auc',
            'gamma':0.2,            
            'lambda':300
}
  • colsample_bytree 要依据特征个数来判断
  • objective 目标函数的选择要根据问题确定,如果是回归问题 ,一般是 reg:linear , reg:logistic , count:poisson 如果是分类问题,一般是binary:logistic ,rank:pairwise

参数初步定之后划分20%为验证集,准备一个watchlist 给train和validation set ,设置num_round 足够大(比如100000),以至于你能发现每一个round 的验证集预测结果,如果在某一个round后 validation set 的预测误差上升了,你就可以停止掉正在运行的程序了。

watchlist = [(dtrain,'train'),(dval,'val')]
model = xgb.train(params,dtrain,num_boost_round=100000,evals = watchlist)

然后开始逐个调参了。

  • 首先调整max_depth ,通常max_depth 这个参数与其他参数关系不大,初始值设置为10,找到一个最好的误差值,然后就可以调整参数与这个误差值进行对比。比如调整到8,如果此时最好的误差变高了,那么下次就调整到12;如果调整到12,误差值比10 的低,那么下次可以尝试调整到15.
  • 在找到了最优的max_depth之后,可以开始调整subsample,初始值设置为1,然后调整到0.8 如果误差值变高,下次就调整到0.9,如果还是变高,就保持为1.0
  • 接着开始调整min_child_weight , 方法与上面同理
  • 再接着调整colsample_bytree
  • 经过上面的调整,已经得到了一组参数,这时调整eta 到0.05,然后让程序运行来得到一个最佳的num_round,(在 误差值开始上升趋势的时候为最佳 )

参考文献

  1. https://www.kaggle.com/c/bnp-paribas-cardif-claims-management/forums/t/19083/best-practices-for-parameter-tuning-on-models
  2. https://github.com/dmlc/xgboost/tree/master/demo
  3. http://xgboost.readthedocs.io/en/latest/python/python_api.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xgboost 调参经验 的相关文章

  • linux下显示隐藏文件

    linux下显示隐藏文件有两种可能 显示所有文件 包括隐藏文件 仅显示隐藏文件 显示所有文件 包含隐藏文件 ls A 只显示隐藏文件 l 或者 ls d

随机推荐

  • react + typescript解决TS2339:Property ‘..‘ does not exist on type ‘Readonly<{}>‘错误

    说来比较惭愧 已经两个多月没有更新博客了 由于手头上的项目快进入收尾阶段了 一直没有时间与欲望更新博客 前几天boss又下发了一个新的项目 采用taro react reflux typescript taroUI做一个微信小程序 说多了都
  • MS Chart 控件学习(二) 数据绑定

    Chart的数据绑定非常灵活支持多种形式的数据绑定 现在主要介绍几种常见的 一 关于数据源 可以在图表的设计界面 在属性设置窗口中的Series属性下的Points中添加需要的数据 可以在图表的设计界面中 在属性中绑定一个数据源 可以在后台
  • Spring框架基础学习

    Spring是什么 Spring是分层的Java SE EE应用 full stack轻量级开源框架 以IoC Inverse Of Control 反转控制 和AOP Aspect Oriented Programming 面向切面编程
  • Spring Boot框架基础概览

    基本概述 Spring Boot是所有基于Spring开发的项目的起点 Spring Boot的设计是为了让你尽可能快的跑起来Spring应用程序并且尽可能减少你的配置文件 它采用了 习惯优于配置 的理念 就像Maven整合了所有的JAR包
  • Ubuntu下的进程管理和启动项管理工具

    sudo apt get install bum
  • tkinter创建真正的嵌套子窗口

    tkinter创建真正的嵌套子窗口 引言 获取窗口句柄 方法一 方法二 创造嵌入窗口 嵌套在组件中 一些问题 一个简单的例子 2022 7 22问题解决 结语 引言 在我之前的这篇纯tkinter创建嵌套子窗口的文章中 只提及了3种方法 原
  • 选择排序 简单选择排序 直接选择排序的区别

    选择排序 图示过程如下 区分 直接选择排序每次遇到n 1 gt n 的时候就要发生交换 简单选择排序则只是记录下较大那个元素的位置 这样一轮过后这个记录变身本轮所要选取的最大值 而每轮需要确定的位置已由外层循环确定 只需将最大元素位置记录所
  • face alignment (人脸对齐)

    face alignment 是计算机视觉的一个热点研究问题 人脸对齐作为人脸识别系统中的一个重要组成部分 人脸对齐的性能在人脸识别系统起着举足轻重的作用 人脸对齐的目的是定位出人脸面部关键点的位置 这些关键点通常是人脸中具有语义的器官 比
  • 【人工智能】推荐系统算法

    推荐系统算法详解 一 推荐系统详解 1 基于人口统计学的推荐算法 基于人口统计学的推荐机制 Demographic based Recommendation 是一种最易于实现的推荐方法 它只是简单的根据系统用户的基本信息发现用户的相关程度
  • 第一次用上 Android Studio 2.3 过程及错误解决

    因为要开发Android5 0的缘故 抛弃了eclipse转到了Android Studio 第一次使用就是遇到了许多问题 终于是解决问题了 特意写一篇博文给各位要准备从eclipse转到Android Studio 由于之前使用eclip
  • Archiving With Multiple Destinations Fails With ORA-16040

    fact Oracle Server Enterprise Edition 9 0 fact Oracle Server Enterprise Edition 8 1 symptom Archiving fails symptom ORA
  • 【开源】团队版 ChatGPT Web 应用,多用户,免登录

    Muchat 团队版 ChatGPT Web 应用 多用户 免登录 适合公司 组织或小团体内部使用 有人乍一看目录觉得只是发布了个 exe 但实际代码在各个子仓库中 本仓库只是一个入口 特性 无需登录 输入卡密即可使用 支持匿名试用 可设置
  • Unity中烘焙光照,同mesh同uv的模型烘焙光照时共用一张光照贴图

    我们再开发中 经常会遇到需要烘焙场景光照的情况 但是尴尬的是 一个场景中你好几个物体用的都是一个贴图 但是不同mesh 或者是相同mesh 你都会如下图 多出一张光照贴图 正常unity开发的解决办法是合并mesh 来降低光照贴图数量 但是
  • vnc 连接不上,出现Warning: zhouziqi:1 is taken because of /tmp/.X11-unix/X1

    楼主不知道怎么回事 突然就边不上VNC了 我就打算重新启动服务 发现服务启不来 我用 journalctl xe命令出现下面的东西 Apr 24 21 30 24 zhouziqi runuser 23390 pam unix runuse
  • ScriptManager的用法

    脚本管理控件 ScriptManger 是ASP NET AJAX中非常重要的控件 通过使用ScriptManger能够进行整个页面的局部更新的管理 ScriptManger用来处理页面上局部更新 同时生成相关的代理脚本以便能够通过Java
  • 怎么画因果图?因果图绘图步骤详解

    因果图设计法 因果图法是一种利用图解法分析输人的各种组合情况的测试方法 它考虑了输入条件的各种组合及输入条件之间的相互制约关系 并考虑输出情况 例如 某一软件要求输人地址 具体到市区 如 北京 昌平区 天津 南开区 其中第2个输人受到第1个
  • C++tuple快速而随意的数据结构

    初始化 lt 学号 姓名 年龄 gt tuple
  • 转:通过注册表查看操作系统默认编码的方法

    在 转 使用DOS命令chcp查看windows操作系统的默认编码以及编码和语言的对应关系 介绍了一种通过chcp查看windows操作系统默认编码的方法 同时还有一种通过注册表查看默认编码的方法 虽然是以没有dos命令简单 但也可以使用
  • mbedtls交换服务器证书,mbedtls

    mbedtls系列文章 Demo工程源码 https github com Mculover666 mbedtls study demo 本工程基于STM32L41RCT6开发板 包含了本系列文章中所编写的所有Demo 持续更新 文章目录
  • xgboost 调参经验

    本文介绍三部分内容 xgboost 基本方法和默认参数 实战经验中调参方法 基于实例具体分析 1 xgboost 基本方法和默认参数 在训练过程中主要用到两个方法 xgboost train 和xgboost cv xgboost trai