xgboost学习-XGBoost的智慧

news2024/11/24 0:29:00

文章目录

  • 一、选择弱评估器:重要参数booster
  • 二、XGB的目标函数:重要参数objective
  • 三、求解XGB的目标函数
  • 四、参数化决策树 alpha,lambda
  • 五、寻找最佳树结构:求解 ω与T
  • 六、寻找最佳分枝:结构分数之差
  • 七、让树停止生长:重要参数gamma
    • xgboost.cv类
  • 总结

一、选择弱评估器:重要参数booster

class xgboost.XGBRegressor (kwargs,max_depth=3, learning_rate=0.1, n_estimators=100, silent=True,
objective=‘reg:linear’, booster=‘gbtree’, n_jobs=1, nthread=None, gamma=0, min_child_weight=1,
max_delta_step=0, subsample=1, colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1,
scale_pos_weight=1, base_score=0.5, random_state=0, seed=None, missing=None, importance_type=‘gain’)
在这里插入图片描述

在这里插入图片描述

二、XGB的目标函数:重要参数objective

在这里插入图片描述
看得出来,无论是从R平方 还是从MSE的角度来看,都是xgb库本身表现更优秀,这也许是由于底层的代码是由不同团队
创造的缘故。随着样本量的逐渐上升,sklearnAPI中调用的结果与xgboost中直接训练的结果会比较相似,如果希望
的话可以分别训练,然后选取泛化误差较小的库。如果可以的话,建议脱离sklearnAPI直接调用xgboost库,因为
xgboost库本身的调参要方便许多。

三、求解XGB的目标函数

在求解XGB的目标函数的过程中,我们考虑的是如何能够将目标函数转化成更简单的,与树的结构直接相关的写法,
以此来建立树的结构与模型的效果(包括泛化能力与运行速度)之间的直接联系。也因为这种联系的存在,XGB的目
标函数又被称为“结构分数”。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、参数化决策树 alpha,lambda

在这里插入图片描述
当有多棵树的时候,集成模型的回归结果就是所有树的预测分数之和,假设这个集成模型中总共有K棵决策树,则整个模型在这个样本i上给出的预测结果为:
在这里插入图片描述
在这里插入图片描述
根据我们以往的经验,我们往往认为两种正则化达到的效果是相似的,只不过细节不同。比如在逻辑回归当中,两种
正则化都会压缩θ 参数的大小,只不过L1正则化会让 θ 为0,而L2正则化不会。在XGB中也是如此。当 λ和 α越大,惩罚
越重,正则项所占的比例就越大,在尽全力最小化目标函数的最优化方向下,叶子节点数量就会被压制,模型的复杂
度就越来越低,所以对于天生过拟合的XGB来说,正则化可以一定程度上提升模型效果。
对于两种正则化如何选择的问题,从XGB的默认参数来看,我们优先选择的是L2正则化。当然,如果想尝试L1也不是
不可。两种正则项还可以交互,因此这两个参数的使用其实比较复杂。在实际应用中,正则化参数往往不是我们调参
的最优选择,如果真的希望控制模型复杂度,我们会调整γ 而不是调整这两个正则化参数,因此大家不必过于在意这
两个参数最终如何影响了我们的模型效果。对于树模型来说,还是剪枝参数地位更高更优先。大家只需要理解这两个
参数从数学层面上如何影响我们的模型就足够了。如果我们希望调整 λ和α ,我们往往会使用网格搜索来帮助我们。
在这里,为大家贴出网格搜索的代码和结果供大家分析和学习。

五、寻找最佳树结构:求解 ω与T

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

六、寻找最佳分枝:结构分数之差

贪婪算法指的是控制局部最优来达到全局最优的算法,决策树算法本身就是一种使用贪婪算法的方法。XGB作为树的
集成模型,自然也想到采用这样的方法来进行计算,所以我们认为,如果每片叶子都是最优,则整体生成的树结构就
是最优,如此就可以避免去枚举所有可能的树结构。
在这里插入图片描述
回忆一下决策树中我们是如何进行计算:我们使用基尼系数或信息熵来衡量分枝之后叶子节点的不纯度,分枝前的信
息熵与分治后的信息熵之差叫做信息增益,信息增益最大的特征上的分枝就被我们选中,当信息增益低于某个阈值
时,就让树停止生长。在XGB中,我们使用的方式是类似的:我们首先使用目标函数来衡量树的结构的优劣,然后让
树从深度0开始生长,每进行一次分枝,我们就计算目标函数减少了多少,当目标函数的降低低于我们设定的某个阈
值时,就让树停止生长。
来个具体的例子,在这张图中,我们有中间节点“是否是男性”,这个中间节点下面有两个叶子节点,分别是样本弟弟
和妹妹。我们来看看这个分枝点上,树的结构分数之差如何表示。
在这里插入图片描述
在这里插入图片描述

七、让树停止生长:重要参数gamma

在逻辑回归中,我们使用参数 tol来设定阈值,并规定如果梯度下降时损失函数减小量小于tol 下降就会停止。在XGB
中,我们规定,只要结构分数之差 Gain是大于0的,即只要目标函数还能够继续减小,我们就允许树继续进行分枝。
也就是说,我们对于目标函数减小量的要求是:
在这里插入图片描述
如此,我们可以直接通过设定γ 的大小来让XGB中的树停止生长。γ 因此被定义为,在树的叶节点上进行进一步分枝所
需的最小目标函数减少量,在决策树和随机森林中也有类似的参数(min_split_loss,min_samples_split)。 设定
越大,算法就越保守,树的叶子数量就越少,模型的复杂度就越低。

在这里插入图片描述
在这里插入图片描述
没有规律。

xgboost.cv类

xgboost.cv (params, dtrain, num_boost_round=10, nfold=3, stratified=False, folds=None, metrics=(), obj=None,
feval=None, maximize=False, early_stopping_rounds=None, fpreproc=None, as_pandas=True, verbose_eval=None,
show_stdv=True, seed=0, callbacks=None, shuffle=True)
在这里插入图片描述
为了使用xgboost.cv,我们必须要熟悉xgboost自带的模型评估指标。xgboost在建库的时候本着大而全的目标,和
sklearn类似,包括了大约20个模型评估指标,然而用于回归和分类的其实只有几个,大部分是用于一些更加高级的
功能比如ranking。来看用于回归和分类的评估指标都有哪些:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

来看看如果我们调整 ,会发生怎样的变化:
在这里插入图片描述
试一个分类的例子:
在这里插入图片描述

总结

有了xgboost.cv这个工具,我们的参数调整就容易多了。这个工具可以让我们直接看到参数如何影响了模型的泛化能
力。接下来,我们将重点讲解如何使用xgboost.cv这个类进行参数调整。到这里,所有关于XGBoost目标函数的原理
就讲解完毕了,这个目标函数及这个目标函数所衍生出来的各种数学过程是XGB原理的重中之重,大部分XGB中基于
原理的参数都集中在这个模块之中,到这里大家应该已经基本掌握。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis(10)事务和锁机制

Redis事务定义 Redis 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 Redis 事务的主要作用就是串联多个命令防止别的命令插队。 Multi、Exec、discard Redis 事务中…

【数据挖掘实战】——应用系统负载分析与容量预测(ARIMA模型)

项目地址:Datamining_project: 数据挖掘实战项目代码 目录 一、背景和挖掘目标 1、问题背景 2、传统方法的不足 2、原始数据 3、挖掘目标 二、分析方法与过程 1、初步分析 2、总体流程 第一步:数据抽取 第二步:探索分析 第三步&a…

【华为OD机试模拟题】用 C++ 实现 - 内存池(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明内存池题目输入输出示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:…

C++【string类用法详细介绍string类模拟实现解析】

文章目录string 类用法介绍及模拟实现一、string介绍二、string类常用接口1. string类对象的常见构造接口2.string类对象的常见容量接口3.string类对象的常见修改接口4. string类对象的常见访问及遍历接口5.string其他接口1.不常用查找接口2.字符替换3.字符串拼接4.字符串排序5…

纯x86汇编实现的多线程操作系统实践 - 第三章 BSP的守护执行

本章我们将详细讲解BSP剩下的执行代码,它们被安排在bp_32.asm文件中。bp_32.asm主要完成以下功能:系统中断初始化加载字符图形数据到内存区域将AP的启动代码和32位保护模式下的代码分别加载到内存中显示主界面以及系统启动信息向所有AP群发启动命令进入守…

linux 解压.gz文件 报错 gzip:stdin:not in gzip format(已解决)

目录 1、问题: 2、分析原因 3、解决办法 1、问题: 在解压一个以【.gz】(注意不是.tar.gz)结尾的压缩包时,遇到报错 【gzip:stdin:不是gzip格式】 翻译一下问题:【gzip:st…

纯x86汇编实现的多线程操作系统实践 - 第一章 系统整体结构说明

现代CPU都是多核系统,拥有多个执行内核(即计算引擎),可并发执行不同的代码。在CPU众多的执行内核中,有一个为主执行内核(BSP),在CPU上电后,该主执行内核会率先启动&#…

lighthouse-自定义Gatherer与Audits

这篇文章是Lighthouse的后续,之前介绍了 lighthouse的介绍和基本使用方法 Lighthouse组合Puppeteer检测页面 这两篇文章,在这两篇文章中介绍了lighthouse的整体架构和基本运行的逻辑,lighthouse默认也采集了足够丰富的数据供我们去分析页面的…

都在用 AI 生成美少女,而我却。。。

最近 AI 画画特别的火,你能从网上看到非常多好看的图片,于是我就开始了我的安装之旅,我看到的图是这样的。这样的。还有这样的。然后我就开始了我的 AI 安装生成计划。安装环境首先我们需要安装 Python 环境,因为这个需要显卡&…

NCRE计算机等级考试Python真题(二)

第二套试题1、关于算法的描述,以下选项中错误的是A.算法具有可行性、确定性、有穷性的基本特征B.算法的复杂度主要包括时间复杂度和数据复杂度C.算法的基本要素包括数据对象的运算和操作及算法的控制结构D.算法是指解题方案的准确而完整的描述正确答案: …

Java基础之日志

2.日志 2.1概述【理解】 概述 程序中的日志可以用来记录程序在运行的时候点点滴滴。并可以进行永久存储。 日志与输出语句的区别 输出语句日志技术取消日志需要修改代码,灵活性比较差不需要修改代码,灵活性比较好输出位置只能是控制台可以将日志信息写…

用于C++的对象关系映射库—YB.ORM

1 介绍YB.ORM YB.ORM 旨在简化与关系数据库交互的 C 应用程序的开发。 对象关系映射器(ORM) 通过将数据库表映射到类并将表行映射到应用程序中的对象来工作,这种方法可能不是对每个数据库应用程序都是最佳的,但它被证明在需要复杂逻辑和事务处理的应用程…

不怕被AirTag跟踪?苹果Find My技术越来越普及

苹果的 AirTag 自推出以来,如何有效遏制用户用其进行非法跟踪,是摆在苹果面前的一大难题。一家为执法部门制造无线扫描设备的公司近日通过 KickStarter 平台,众筹了一款消费级产品,可帮助用户检测周围是否存在追踪的 AirTag 等设备…

Spring中的FactoryBean 和 BeanFactory、BeanPostProcessor 和BeanFactoryPostProcessor解析

文章目录FactoryBean 和 BeanFactory后置处理器BeanPostProcessor 和 BeanFactoryPostProcessorBeanPostProcessorBeanFactoryPostProcessorFactoryBean 和 BeanFactory BeanFactory接⼝是容器的顶级接⼝,定义了容器的⼀些基础⾏为,负责⽣产和管理Bean的…

python元编程详解

什么是元编程 软件开发中很重要的一条原则就是“不要重复自己的工作(Don’t repeat youself)”,也就是说当我们需要复制粘贴代码时候,通常都需要寻找一个更加优雅的解决方案,在python中,这类问题常常会归类…

C++015-C++函数

文章目录C015-C函数函数目标char[]和stringchar[]char*string字符常量与字符串常量字符串的输入题目描述 字符串输出题目描述在线练习:总结C015-C函数 在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/ 函数 目标 函数是指一段可以直接被…

SVG实例详解系列(一)(svg概述、位图和矢量图区别(图解)、SVG应用实例)

SVG实例详解系列(一) (svg概述、位图和矢量图区别(图解)、SVG应用实例) 目录 一、什么是SVG? (1)、位图和矢量图概念(图解) (2)、SVG的小例子…

Flutter入门进阶之旅 -开源Flutter项目

开源Flutter项目 该项目为纯flutter端项目,采用aar方式寄生在原生APP中,作为APP中的一个独立模块 在业务逻辑上做到与原生APP完全隔离,Flutter端开发者,可完全不用关注原生端的业务模块 两端开发彼此业务隔离,缩小了对…

数字IC手撕代码--小米科技(除法器设计)

前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析、代码及波形,所有代码均经过本人验证。目录如下:1.数字IC手撕代码-分频器(任意偶数分频)2.数字IC手撕…

wondows10系统python2.7兼容安装python3.10

假设已安装好python2.7和pyhon3.10。 python命令只需要应用程序改名即可,需要修改的有python.exe和pythonw.exe pip命令麻烦点,需要用改名后的程序名 重新安装,命令如下: python3 -m pip install --upgrade pip --force-reinst…