【机器学习】XGBoost

news2024/11/24 0:28:27

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 - 知乎

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

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

相关文章

Docker----------day3(tomcat、mysql8、redis6.2.6常用软件安装)

常规安装大体步骤 1.安装tomcat 1.查找tomcat docker search tomcat2.拉取tomcat docker pull tomcat3.docker images查看是否有拉取到的tomcat 4.使用tomcat镜像创建容器实例(也叫运行镜像) docker run -it -p 8080:8080 tomcat5.新版tomcat把webapps.dist目录换成webapp…

【STM32笔记】__WFI();进入不了休眠的可能原因(系统定时器SysTick一直产生中断)

【STM32笔记】__WFI();进入不了休眠的可能原因(系统定时器SysTick一直产生中断) 【STM32笔记】低功耗模式配置及避坑汇总 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置&am…

UVa 690 Pipeline Scheduling 流水线调度 二进制表示状态 DFS 剪枝

题目链接:Pipeline Scheduling 题目描述: 给定一张5n(1≤n≤20)5\times n(1\le n\le20)5n(1≤n≤20)的资源需求表,第iii行第jjj列的值为’X’表示进程在jjj时刻需要使用使用资源iii,如果为’.则表示不需要使用。你的任务是安排十个…

多元化增长引擎业务占比超四成,联想开启混动模式?

一句话概括联想集团的业绩:预料之内的整体下滑,超出预期的第二曲线。 上周五(2月17日),联想集团发布了2022到2023财年第三季度业绩。根据财报,联想集团实现营收152.67亿美元,同比下降24%&#…

你评论,我赠书~【哈士奇赠书 - 14期】-〖人人都离不开的算法-图解算法应用〗参与评论,即可有机获得

大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬 &#x1f4e…

html常用font-family设置字体样式

<table border"1" cellpadding"0" cellspacing"0" ><tr><td><h3 style"font-family: 黑体;">黑体&#xff1a;SimHei</h3></td><td><h3 style"font-family: 华文黑体;">华…

优思学院:六西格玛中的水平对比方法是什么?

水平对比&#xff0c;就是比较不同事物之间的差异。 这个概念在六西格玛管理中也很重要&#xff0c;也就是我们经常说的标杆管理&#xff0c;经常被用来寻找行业中最好的做法&#xff0c;以帮助组织改进自身的绩效。 在六西格玛管理中&#xff0c;水平对比有三种常见的应用方式…

java面试题-JUC基础类介绍

1.JUC框架包含几个部分?五个部分&#xff1a;Lock框架和Tools类(把图中这两个放到一起理解)Collections: 并发集合Atomic: 原子类Executors: 线程池2.Lock框架和Tools哪些核心的类?Lock接口&#xff1a;用于提供比synchronized更加灵活和高级的线程同步控制&#xff0c;支持公…

<Linux>vscode搭建Linux远程开发工具

一、下载vscode&#x1f603;可以去vscode的官网下载&#xff0c;不过是外网下载速度较慢提速可以参考&#xff1a;(81条消息) 解决VsCode下载慢问题_vscode下载太慢_wang13679201813的博客-CSDN博客官网&#xff1a;Visual Studio Code - Code Editing. Redefined这里推荐的是…

【自然语言处理】【大模型】GLM-130B:一个开源双语预训练语言模型

GLM-130B&#xff1a;一个开源双语预训练语言模型《GLM-130B: An open bilingual pre-trained model》论文&#xff1a;https://arxiv.org/pdf/2210.02414.pdf 相关博客 【自然语言处理】【大模型】GLM-130B&#xff1a;一个开源双语预训练语言模型 【自然语言处理】【大模型】…

拼多多出评软件工具榜单助手使用教程

软件使用教程下载软件前&#xff0c;关闭电脑的防火墙&#xff0c;退出所有杀毒软件&#xff0c;防止刷单软件被误删桌面建立一个文件夹&#xff0c;下载下来的安装包放进去&#xff0c;解压到当前文件夹&#xff0c;使用过程中别打开防火墙、杀毒软件。打开软件后&#xff0c;…

移动WEB开发五、响应式布局

零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#xff1a;https:…

SAP FICO 理解业务范围的概念

业务范围 以前转载过几篇关于业务范围的文章&#xff1a; SAP Business Area 业务范围_SAP剑客的博客-CSDN博客_sap 业务范围 SAP FI 系列 002&#xff1a;业务范围派生_stone0823的博客-CSDN博客_sap 业务范围 http://blog.sina.com.cn/s/blog_3f2c03e30102w9yz.html 仍是…

虹科新品 | 最高80W!用于大基板紫外曝光系统的高功率UVLED光源

光刻曝光是指利用紫外光源将胶片或其他透明物体上的图像信息转移到涂有光敏材料&#xff08;光刻胶&#xff09;表面以得到高精度和极细微图案的一种制作工艺&#xff0c;主要用于半导体生产、高精密集成电路、PCB板制造、MEMS等行业。光刻技术是半导体工业和集成电路是最为核心…

十一、项目实战一

项目实战一 需求 以 前后端不分离的方式实现学生的增删改查操作 学生列表功能 接口设计 url:/students/ 请求方法&#xff1a;get 参数&#xff1a; 格式&#xff1a;查询参数 参数名类型是否必传说明pageint否页码&#xff0c;默认为1sizeinit否每页数据条数默认为10n…

浅谈安科瑞电力智能运维在高速铁路电力系统的应用分析

摘 要&#xff1a;高速铁路电力智能运维管理系统采用终端感知层、系统网络层、系统平台层的三层网络架构模式&#xff0c;通过集成网关&#xff0c;共享通信传输设备&#xff0c;利用铁路专用运维传输网络通道将各类监测数据上传至运维管理平台数据进行实时分析&#xff0c;建…

k8s二进制部署

目录 一、K8S常见的部署方式 1.1 K8S常见的部署方式 1.2 k8s部署 二进制与高可用的区别 二、Kubernetes二进制部署 2.1 Kubernetes二进制部署准备 ① 服务器准备 ② 签发证书环境准备 2.2 操作系统初始化配置 2.3 部署 etcd 集群 ① 在 master01 节点上操作 ② work…

使用Fabric.js实现贝塞尔曲线波浪特效

一、前言 本文是在此基础上收到启发然后进行的变化&#xff0c;当然&#xff0c;观看与否不会影响接下来的阅读体验。 二、实现思路 其实整个波浪动画其实可以看成&#xff1a;在相对坐标系静止的视角下&#xff0c;一个正弦函数在直角坐标系上匀速平移时我们所观察到的效果…

如何防止订单重复提交

如何防止订单重复提交前言什么是重复下单为什么会重复下单&#xff1f;如何处理重复下单&#xff1f;利用数据库实现幂等利用Redis防重前言 最近在做电商项目&#xff0c;整理一下解决方案并帮助自己巩固知识点&#xff0c;此方案是结合了目前的业务环境&#xff0c;若有更好的…

Linux进程概念讲解

1、进程的基本概念在给进程下定义之前&#xff0c;我们先了解一下进程&#xff1a;我们在编写完代码并运行起来时&#xff0c;在我们的磁盘中会形成一个可执行文件&#xff0c;当我们双击这个可执行文件时&#xff08;程序时&#xff09;&#xff0c;这个程序会加载到内存中&am…