当前位置: 首页 > news >正文

【机器学习】XGBoost

1.什么是XGBoost

        XGBoost(eXtreme Gradient Boosting)极度梯度提升树,属于集成学习中的boosting框架算法。对于提升树,简单说就是一个模型表现不好,继续按照原来模型表现不好的那部分训练第二个模型,依次类推。本质思想与GBDT一致,构建多个基学习器使用加法模型,学习前面基学习器的结果与真实值的偏差,通过多个学习器的学习,不断降低模型值和实际值的差。

         最终模型的预测结果是由所有基学习器预测结果的加和。 

2.XGBoost的目标函数

        XGBoost整体思想就是直接把损失函数和正则项加起来合成一个整体的损失函数,对这个损失函数求二阶导,得到最终的obj,通过obj计算得到一个分数,这个分数越小越好,最终通过obj计算得到的分数确定了树的结构和整个强学习器的分数。所以XGBoost不是通过拟合残差实现的,而是计算obj函数直接得到的树结构。 

        目标函数由两部分组成,第一部分是模型误差,即样本真实值和预测值之间的差值,第二部分是模型的结构误差,即正则项,通过使用超参数乘以结点个数和节点值限制模型的复杂度。 

        正则项公式如下: 

        参数说明: 

       

        优化目标:

         由于是加法模型,所以可以将正则项进行改写,整体的正则项就等于前面t-1棵树的正则项加上当前回归树的正则项。

         而在计算时,前面t-1棵树正则项中的T和w是已经确定的,整体优化目标可以近似表示:

         正则项的确定只与要优化的当前的这颗回归树的叶子结点的w值和叶子结点的个数T有关。

        由于树模型是阶跃的,是不连续的,不适合用梯度下降法,所以需要将目标函数改写,按照样本的顺序做遍历更改为按照叶子结点的顺序做遍历。例如叶子结点有w1、w2....wn。经过回归后落到w1叶子结点下的样本集合K1中包含有不同的预测值,w1的损失值就是w1(叶子结点的值)的值与K1中不同预测值的损失加和,以此类推。

         已经将损失函数转化为与叶子结点的值w有关的多项式,因为损失函数根据不同的任务定义,所以无法提前预知损失函数的形式。接下来的任务是将抽象的损失函数分解为包含w的多项式,通过泰勒二阶展开将w进行提取。

3.公式推导

        使用泰勒二阶对目标函数展开。

         泰勒二阶展开后的损失函数。

         通过分步+贪婪的到树的结构。确定树的结构就是来确定树的叶子结点的值w

4. XGBoost的优缺点

4-1 优点

(1)精度更高:GBDT 只用到一阶泰勒展开,而 XGBoost 对损失函数进行了二阶泰勒展开。XGBoost 引入二阶导一方面是为了增加精度,另一方面也是为了能够自定义损失函数,二阶泰勒展开可以近似大量损失函数;

(2)灵活性更强:GBDT 以 CART 作为基分类器,XGBoost 不仅支持 CART 还支持线性分类器,使用线性分类器的 XGBoost 相当于带 L1 和 L2 正则化项的逻辑回归(分类问题)或者线性回归(回归问题)。此外,XGBoost 工具支持自定义损失函数,只需函数支持一阶和二阶求导;

(3)正则化:XGBoost 在目标函数中加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、叶子节点权重的 L2 范式。正则项降低了模型的方差,使学习出来的模型更加简单,有助于防止过拟合,这也是XGBoost优于传统GBDT的一个特性。

(4)防止过拟合:

        1.Shrinkage(缩减):相当于学习速率。XGBoost 在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,使每棵树的影响不会过大,让后面有更大的学习空间。主要用于传统GBDT的实现也有学习速率;

        2.Column Subsampling(列采样),类似于随机森林选区部分特征值进行建树,其中又分为两个方式:方式一按层随机采样,在对同一层结点分裂前,随机选取部分特征值进行遍历,计算信息增益;方式二在建一棵树前随机采样部分特征值,然后这棵树的所有结点分裂都遍历这些特征值,计算信息增益。这也是XGBoost异于传统GBDT的一个特性;

(5)缺失值处理:XGBoost和LightGBM是支持缺失值的,并且XGBoost和LightGBM对缺失值的处理方法相同。xgboost为缺失值设定了默认的分裂方向,对于存在某一维特征缺失的样本XGBoost会先将其划入左子树计算增益,再划入右子树计算训练增益,对比放在左右子树增益的大小决定放在哪个子树。

4-2 缺点

(1)计算量大:虽然利用预排序和近似算法可以降低寻找最佳分裂点的计算量,但在节点分裂过程中仍需要遍历数据集;

   (2)内存消耗大:预排序过程的空间复杂度过高,不仅需要存储特征值,还需要存储特征对应样本的梯度统计值的索引,相当于消耗了两倍的内存。

5.  XGBoost与GBDT的联系和区别有哪些?

(1)GBDT是机器学习算法,XGBoost是该算法的工程实现。

(2)正则项:在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。

(3)导数信息:GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。

(4)基分类器:传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。

(5)子采样:传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样。

(6)缺失值处理:传统GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。

(7)并行化:传统GBDT没有进行并行化设计,注意不是tree维度的并行,而是特征维度的并行。XGBoost预先将每个特征按特征值排好序,存储为块结构,分裂结点时可以采用多线程并行查找每个特征的最佳分割点,极大提升训练速度。

Reference:

(1)15.【近似算法】加权分位法_哔哩哔哩_bilibili

(2)XGBoost算法介绍_月落乌啼silence的博客-CSDN博客_xgboost

(3)深入理解XGBoost - 知乎

相关文章:

【机器学习】XGBoost

1.什么是XGBoost XGBoost(eXtreme Gradient Boosting)极度梯度提升树,属于集成学习中的boosting框架算法。对于提升树,简单说就是一个模型表现不好,继续按照原来模型表现不好的那部分训练第二个模型,依次类推。本质思想与GBDT一致…...

如何复制禁止复制的内容

今天找到一段代码,但是复制时页面提示“这个是VIP会员才有的权限”。我该怎么复制呢。 现在的平台大都是用钱说话,以便响应知识付费的主张。对错我就不说了,我认为既然我有权利看到代码,当然也有权把他复制下来。这并不涉及侵权。…...

多通道图片的卷积过程

多通道(channels)图片的卷积 如果输入图片是三维的(三个channel),例如(8,8,3),那么每一个filter的维度就是(3,3,3&#x…...

uniapp canvas 无法获取 webgl context 的问题解决

uniapp canvas 无法获取 webgl context 的问题解决 一、问题描述 在 uniapp 中做一个查看监控视频的页面,用到的是 JSMpeg 这个库,原理就是前后台通过 websocket 不断推送新画面内容到前端,前端通过这个 JSMpeg 渲染到前端页面中指定的 can…...

Spring底层原理(二)

Spring底层原理(二) BeanFactory的实现 //创建BeanFactory对象 DefaultListableBeanFactory factory new DefaultListableBeanFactory(); //注册Bean定义对象 AbstractBeanDefinition beanDefinition BeanDefinitionBuilder.genericBeanDefinition(SpringConfig.class).set…...

springboot188基于spring boot的校园商铺管理系统

项目名称:springboot188基于spring boot的校园商铺管理系统 点击这里进入源码目录 声明: 适用范围: 本文档适用于广泛的学术和教育用途,包括但不限于个人学习、毕业设计和课程设计。免责声明: 特此声明,本…...

【计网 DNS】计算机网络 DNS协议详解:中科大郑烇老师笔记 (六)

目录 0 引言1 DNS概述1.1 定义1.2 DNS域名结构1.2 域名解析步骤 🙋‍♂️ 作者:海码007📜 专栏:计算机四大基础专栏📜 其他章节:网络快速入门系列、计网概述、计网应用层详解、计网Web和HTTP、计网FTP、计网…...

vue 生命周期钩子函数 mounted()实例

在挂载后操作dom获取焦点。 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"w…...

数据分享 I 地级市人口和土地使用面积基本情况

数据地址&#xff1a; 地级市人口和土地使用面积基本情况https://www.xcitybox.com/datamarketview/#/Productpage?id394 基本信息. 数据名称: 地级市人口和土地使用面积基本情况 数据格式: ShpExcel 数据时间: 2021年 数据几何类型: 面 数据坐标系: WGS84坐标系 数据…...

被邀请为期刊审稿时,如何做一个合格的审稿人?官方版本教程来喽

审稿是学术研究中非常重要的环节&#xff0c;它可以确保研究的科学性和严谨性。审稿人的任务是检查文章是否符合学术规范&#xff0c;是否具有创新性&#xff0c;是否具有科学价值&#xff0c;以及是否符合期刊的定位和风格。因此&#xff0c;审稿人需要具有扎实的学术背景和丰…...

数据飞轮拆解车企数据驱动三板斧:数据分析、市场画像、A/B 实验

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近日&#xff0c;火山引擎数智平台&#xff08;VeDI&#xff09;2023 数据飞轮汽车行业研讨会在上海举办&#xff0c;活动聚焦汽车行业数字化转型痛点&#xff0c;从…...

基于PyQt5和OpenCV库的简单的文档对齐扫描应用程序

计算机视觉-作业1 作业要求简介说明 安装运行功能使用待完善代码相关 作业要求 拍一张A4纸文稿的图片&#xff0c;利用角点检测、边缘检测等&#xff0c;再通过投影变换完成对文档的对齐扫描 简介 使用python语言&#xff0c;基于PyQt5和OpenCV库的简单的文档对齐扫描应用程…...

【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割2(基础数据流篇)

构建pytorch训练模型读取的数据,是有模版可以参考的,是有套路的,这点相信使用过的人都知道。我也会给出一个套路的模版,方便学习和查询。 同时,也可以先去参考学习之前的一篇较为简单的3D分类任务的数据构建方法,链接在这里:【3D图像分类】基于Pytorch的3D立体图像分类…...

HDR图像处理软件 Photomatix Pro mac中文版新增功能

Photomatix Pro mac是一款专业的HDR合成软件&#xff0c;可以将不同曝光的多张照片合成为一张照片&#xff0c;而保留更多的细节。并且合成时可以帮助去除照片中的鬼影。Photomatix Pro提供两种类型的过程来增加动态范围&#xff0c;一个过程称为HDR色调映射&#xff0c;另一个…...

【Kotlin精简】第5章 简析DSL

1 DSL是什么&#xff1f; Kotlin 是一门对 DSL 友好的语言&#xff0c;它的许多语法特性有助于 DSL 的打造&#xff0c;提升特定场景下代码的可读性和安全性。本文将带你了解 Kotlin DSL 的一般实现步骤&#xff0c;以及如何通过 DslMarker &#xff0c; Context Receivers 等…...

2021年06月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python编程&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 下列程序运行的结果是&#xff1f; s hello print(sworld)A: sworld B: helloworld C: hello D: world 答案&#xff1a…...

MySQL执行计划分析

执行计划中的常见的列的解释&#xff1a; type system/const &#xff1a;用户主键索引或者唯一索引查询时&#xff0c;只能匹配 1 条数据。一般可以对 sql 查询语句优化成一个常量&#xff0c;那么 type 一般就是 system 或者 const&#xff0c;system 是 const 的一个特例&…...

【数据结构与算法】Snowflake雪花算法Java实现

Snowflake产生的ID由 64 bit 的二进制数字组成&#xff0c;被分成了4个部分&#xff0c;每一部分存储的数据都有特定的含义&#xff1a; 第 0 位&#xff1a; 符号位&#xff08;标识正负&#xff09;&#xff0c;始终为 0&#xff1b;第 1~41 位 &#xff1a;一共 41 位&…...

重要功能更新:妙手正式接入SHEIN供货模式(OBM)店铺,赋能卖家把握出海新机遇!

继接入SHEIN平台模式店铺之后&#xff0c;妙手ERP积极响应卖家需求&#xff0c;正式接入SHEIN供货模式&#xff08;OBM&#xff09;店铺&#xff0c;并支持产品采集、批量刊登、产品管理等功能&#xff0c;帮助跨境卖家快速上品、高效运营&#xff0c;把握出海新机遇。 SHEIN供…...

和鲸ModelWhale与中科可控X系列异构加速服务器完成适配认证,搭载海光芯片,构筑AI算力底座

AIGC 时代&#xff0c;算力作为新型生产力&#xff0c;是国家和企业构建竞争优势的关键。而随着传统计算方式无法满足新时代激增的算力需求&#xff0c;计算场景的多元化和计算应用的复杂化推动了 CPUGPU 异构平台的加速组建。在此全球激烈角逐的大趋势下&#xff0c;我国信创产…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...