集成学习 —— 梯度提升树GBDT、XGBoost

目录

一、梯度提升树 

1、残差提升树 Boosting Decision Tree       

2、梯度提升树 Gradient Boosting Decision Tree

二、构建案例

1、 初始化弱学习器(CART树):

2、 构建第1个弱学习器

3、 构建第2个弱学习器

4、 构建第3个弱学习器

5、 构建最终弱学习器

6、 构建总结

三、XGBoost

1、Xgb的构建思想

2、公式

3、XGBoost关键优势

一、梯度提升树 

1、残差提升树 Boosting Decision Tree       

        思想:通过拟合残差的思想来进行提升,残差:真实值 - 预测值

        例如:

2、梯度提升树 Gradient Boosting Decision Tree

        梯度提升树不再拟合残差,而是利用梯度下降的近似方法,利用损失函数的负梯度作为提升树算法中的残差近似值。

        GBDT 拟合的负梯度就是残差。如果我们的 GBDT 进行的是分类问题,则损失函数变为 logloss,此时拟合的目标值就是该损失函数的负梯度值。

二、构建案例

已知:

1、 初始化弱学习器(CART树):

        当模型预测值为何值时,会使得第一个弱学习器的平方误差最小,即:求损失函数对 f(xi) 的导数,并令导数为0。

2、 构建第1个弱学习器

根据负梯度的计算方法得到下表:

以此类推,计算所有切分点情况,得到:

由此得到,当 6.5 作为切分点时,平方损失最小,此时得到第1棵决策树。

3、 构建第2个弱学习器

以此类推,计算所有切分点情况,得到:

以3.5 作为切分点时,平方损失最小,此时得到第2棵决策树

4、 构建第3个弱学习器

以此类推,计算所有切分点情况,得到:

以6.5 作为切分点时,平方损失最小,此时得到第3棵决策树

5、 构建最终弱学习器

以 x=6 样本为例:输入到最终学习器中的结果 :(存在误差,说明学习器不够)

7.31 + (-1.07) + 0.22 + 0.15 = 6.61

以此类推计算其他的预测值

6、 构建总结

  1. 初始化弱学习器(目标值的均值作为预测值)
  2. 迭代构建学习器,每一个学习器拟合上一个学习器的负梯度
  3. 直到达到指定的学习器个数
  4. 当输入未知样本时,将所有弱学习器的输出结果组合起来作为强学习器的输出

三、XGBoost

        极端梯度提升树,集成学习方法的王牌,在数据挖掘比赛中,大部分获胜者用了XGBoost。

1、Xgb的构建思想

        1、构建模型的方法是最小化训练数据的损失函数:

             训练的模型复杂度较高,易过拟合。

        2、在损失函数中加入正则化项, 提高对未知的测试数据 的泛化性能 。

2、公式

XGBoost(Extreme Gradient Boosting)是对GBDT的改进,并且在损失函数中加入了正则化项

正则化项用来降低模型的复杂度

中的 T 表示一棵树的叶子结点数量。

中的 w 表示叶子结点输出值组成的向量,向量的模; λ对该项的调节系数

        假设我们要预测一家人对电子游戏的喜好程度,考虑到年轻和年老相比,年轻更可能喜欢电子游戏,以及男性和女性相比,男性更喜欢电子游戏,故先根据年龄大小区分小孩和大人,然后再通过性别区分开是男是女,逐一给各人在电子游戏喜好程度上打分

训练出tree1和tree2,类似之前gbdt的原理,两棵树的结论累加起来便是最终的结论

树tree1的复杂度表示为

以此类推,树tree2的复杂度表示为\Omega = \gamma 2 +\frac{1}{2}\lambda (0.81+0.81)

目标函数为:(推导过程比较复杂,可以另行学习)

 

该公式也叫做打分函数 (scoring function),从损失函数、树的复杂度两个角度来衡量一棵树的优劣。当我们构建树时,可以用来选择树的划分点,具体操作如下式所示:

计算的gain值:

1、对树中的每个叶子结点尝试进行分裂

2、计算分裂前 - 分裂后的分数:

  • 如果gain > 0,则分裂之后树的损失更小,会考虑此次分裂
  • 如果gain< 0,说明分裂后的分数比分裂前的分数大,此时不建议分裂

3、当触发以下条件时停止分裂:

  • 达到最大深度 叶子结点数量低于某个阈值
  • 所有的结点在分裂不能降低损失
  • 等等...

3、XGBoost关键优势

XGBoost通过多项技术创新实现高效训练和强大泛化能力:

1、正则化​​:在目标函数中加入L1(LASSO)和L2(Ridge)正则化项,惩罚复杂的树结构(如叶子节点数量过多、权重过大),有效抑制过拟合。

2、​​并行处理​​:虽然Boosting是串行过程,但XGBoost在特征排序和分裂点选择上支持并行计算(特征间并行),大幅提升训练速度。

​3、加权分位法(Weighted Quantile Sketch)​​:用于近似寻找最佳分裂点,仅需考察部分候选点,提升大规模数据下的计算效率。

4、​​稀疏感知(Sparsity-aware)​​:能自动学习处理缺失值的最佳方向(默认分到左子树或右子树),无需预先填充,并对稀疏数据(如One-hot编码)高效处理。

​5、缓存访问优化(Cache-aware Access)​​:通过优化数据存储和访问模式(如按块访问),提高CPU缓存命中率,加速计算。

6、核外计算(Blocks for Out-of-core)​​:当数据无法全部装入内存时,可将数据分块存储在磁盘上,通过块压缩和预取(预取到内存缓冲区)技术减少IO开销,支持大规模数据训练。

        XGBoost通过集成学习思想、梯度提升框架,并结合正则化、并行计算、稀疏感知等一系列优化,实现了预测精度与训练效率的卓越平衡。其灵活性、鲁棒性和广泛适用性使其成为处理结构化数据任务的强有力工具,是许多数据科学家和机器学习实践者的首选算法之一。

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

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

相关文章

【船类】监控录像下船舶类别检测识别数据集:近7k图像,6类,yolo标注

监控录像下船舶类别检测识别数据集概述 数据集包含 6900监控录像下船舶类别图像&#xff0c;6个标注类别&#xff1a; 散货船、集装箱船、渔船、杂货船、矿砂船、客船 标注格式&#xff1a;yolo txt&#xff08;格式可转&#xff0c;可直接训练&#xff09; 标注工具&#…

用户故事设计范式(As a... I want to... So that...)

我们来详细解析一下用户故事&#xff08;User Story&#xff09;&#xff0c;包括其结构、为什么重要、如何编写好的用户故事以及一个完整的示例。1. 用户故事的基本结构&#xff1a;三段式模板最经典和通用的用户故事模板就是您提到的三段式&#xff1a;As a [角色]:目的&…

【OpenGL】LearnOpenGL学习笔记20 - 实例化 Instancing

上接&#xff1a;https://blog.csdn.net/weixin_44506615/article/details/151156446?spm1001.2014.3001.5501 完整代码&#xff1a;https://gitee.com/Duo1J/learn-open-gl | https://github.com/Duo1J/LearnOpenGL 实例化 Instancing 以往当我们在场景中要大量绘制相同模型…

MySQL主从不一致?DBA急救手册:14种高频坑点+3分钟定位+无损修复!

MySQL「主从不一致」最常见的成因、快速定位思路以及可落地的修复手段 一、为什么会不一致&#xff1f;14 类高频场景类别典型表现/触发条件快速自检命令/日志1. 从库被写入业务或 DBA 直连从库 UPDATE/INSERTSHOW VARIABLES LIKE read_only 应为 ON2. 复制过滤规则主从 binlog…

AI 网站源码:探秘 SUNO,革新音乐创作的 AI 先锋

在当今数字化浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;正深刻地重塑各个领域&#xff0c;音乐创作也不例外。SUNO 作为一款引领潮流的音乐生成工具&#xff0c;宛如一颗璀璨新星&#xff0c;在音乐创作的天空中熠熠生辉&#xff0c;为音乐爱好者和创作者们带来了前…

Linux:malloc背后的实现细节

目录前言一、先搞懂基础&#xff1a;程序的内存布局&#xff08;关键前提&#xff01;&#xff09;二、malloc的核心实现步骤&#xff08;4层架构拆解&#xff09;第1层&#xff1a;用户调用 → 标准库处理&#xff08;glibc的malloc.c&#xff09;第2层&#xff1a;堆内存池管…

什么是X11转发?

X11 转发&#xff08;X11 forwarding&#xff0c;ssh -X&#xff09;是一种 SSH 协议功能&#xff0c;它允许用户在远程服务器上运行图形化应用程序&#xff0c;并通过本地的显示设备和输入输出设备与这些程序进行交互。它被开发者广泛使用&#xff0c;用于在大规模、异构的服务…

Android Kotlin 动态注册 Broadcast 的完整封装方案

在 Kotlin 中封装动态注册的 Broadcast 可以让你更优雅地管理广播的注册和注销&#xff0c;避免内存泄漏。下面是一个完整的封装方案&#xff1a; 基础封装类 import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import …

VGG改进(8):融合Self-Attention的CNN架构

1. 自注意力机制简介自注意力机制是Transformer架构的核心组件&#xff0c;它能够计算输入序列中每个元素与其他所有元素的相关性。与CNN的局部感受野不同&#xff0c;自注意力机制允许模型直接建立远距离依赖关系&#xff0c;从而捕获全局上下文信息。在计算机视觉中&#xff…

ES6 面试题及详细答案 80题 (33-40)-- Symbol与集合数据结构

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

PG-210-HI 山洪预警系统呼叫端:筑牢山区应急预警 “安全防线”

在山洪灾害多发的山区&#xff0c;及时、准确的预警信息传递是保障群众生命财产安全的关键。由 PG-210-HI 型号构成的山洪预警系统呼叫端主机&#xff0c;凭借其全面的功能、先进的特性与可靠的性能&#xff0c;成为连接管理员与群众的重要应急枢纽&#xff0c;为山区构建起一道…

研学旅游产品设计实训室:赋能产品落地,培养实用人才

1. 研学旅游产品设计实训室的定位与功能 研学旅游产品设计实训室是专门为学生提供研学课程与产品开发、模拟设计、项目推演、成果展示等实践活动的教学空间。该实训室应支持以下功能&#xff1a; 研学主题设计与目标制定&#xff1b; 课程内容与学习方法的选择与整合&#xf…

4215kg轻型载货汽车变速器设计cad+设计说明书

第一章 前言 3 1.1 变速器的发展环绕现状 3 1.2 本次设计目的和意义 4 第二章 传动机构布置方案分析及设计 5 2.1 传动机构结构分析与类型选择 5 2.2变速器主传动方案的选择 5 2.3 倒档传动方案 6 2..4 变速器零、部件结构方案设计 6 2.4.1 齿轮形式 …

9月10日

TCP客户端代码#include<myhead.h> #define SER_IP "192.168.108.179" //服务器&#xff49;&#xff50;地址 #define SER_PORT 8888 //服务器端口号 #define CLI_IP "192.168.108.239" //客户端&#xff49;&#xff50;地址 …

案例开发 - 日程管理 - 第七期

项目改造&#xff0c;进入 demo-schedule 项目中&#xff0c;下载 pinia 依赖在 main.js 中开启 piniaimport { createApp } from vue import App from ./App.vue import router from ./router/router.js import {createPinia} from pinialet pinia createPinia() const app …

infinityfree 网页连接内网穿透 localtunnel会换 还是用frp成功了

模型库首页 魔搭社区 fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet. 我尝试用本机ipv6&#xff0c;失败了 配置文件 - ChmlFrp 香港2才能用 只支持https CNAME解析 | 怊猫科技 | 文档 How to create …

批量更新数据:Mybatis update foreach 和 update case when 写法及比较

在平常的开发工作中&#xff0c;我们经常需要批量更新数据&#xff0c;业务需要每次批量更新几千条数据&#xff0c;采用 update foreach 写法的时候&#xff0c;接口响应 10s 左右&#xff0c;优化后&#xff0c;采用 update ... case when 写法&#xff0c;接口响应 2s 左右。…

Java基础篇04:数组、二维数组

1 数组 数组是一个数据容器&#xff0c;可用来存储一批同类型的数据。 1.1 数组的定义方式 静态初始化 数据类型[][] 数组名 {元素1&#xff0c;元素2&#xff0c;元素3}; string[][] name {"wfs","jsc","qf"} 动态初始化 数据类型[][] 数组名…

unity开发类似个人网站空间

可以用 Unity 开发 “个人网站空间” 类工具&#xff0c;但需要结合其技术特性和适用场景来判断是否合适。以下从技术可行性、优势、局限性、适用场景四个方面具体分析&#xff1a;一、技术可行性Unity 本质是游戏引擎&#xff0c;但具备开发 “桌面应用” 和 “交互内容” 的能…

SDK游戏盾如何实现动态加密

SDK游戏盾的动态加密体系通过​​密钥动态管理、多层加密架构、协议混淆、AI自适应调整及设备绑定​​等多重机制协同作用&#xff0c;实现对游戏数据全生命周期的动态保护&#xff0c;有效抵御中间人攻击、协议破解、重放攻击等威胁。以下从核心技术与实现逻辑展开详细说明&am…