XGBoost 2.0:对基于树的方法进行了重大更新

news2024/11/16 7:47:50

XGBoost是处理不同类型表格数据的最著名的算法,LightGBM 和Catboost也是为了修改他的缺陷而发布的。9月12日XGBoost发布了新的2.0版,本文除了介绍让XGBoost的完整历史以外,还将介绍新机制和更新。

这是一篇很长的文章,因为我们首先从梯度增强决策树开始。

基于树的方法,如决策树、随机森林以及扩展后的XGBoost,在处理表格数据方面表现出色,这是因为它们的层次结构天生就善于对表格格式中常见的分层关系进行建模。它们在自动检测和整合特征之间复杂的非线性相互作用方面特别有效。另外这些算法对输入特征的规模具有健壮性,使它们能够在不需要规范化的情况下在原始数据集上表现良好。

最终要的一点是它们提供了原生处理分类变量的优势,绕过了对one-hot编码等预处理技术的需要,尽管XGBoost通常还是需要数字编码。

另外还有一点是基于树的模型可以轻松地可视化和解释,这进一步增加了吸引力,特别是在理解表格数据结构时。通过利用这些固有的优势,基于树的方法——尤其是像XGBoost这样的高级方法——非常适合处理数据科学中的各种挑战,特别是在处理表格数据时。

决策树

在更严格的数学语言中,决策树表示一个函数T:X→Y,其中X是特征空间,Y可以是连续值(在回归的情况下)或类标签(在分类的情况下)。我们可以将数据分布表示为D和真函数f:X→Y。决策树的目标是找到与f(x)非常接近的T(x),理想情况下是在概率分布D上。

损失函数

与树T相关的风险R相对于f表示为T(x)和f(x)之间的损失函数的期望值:

构建决策树的主要目标是构建一个能够很好地泛化到新的、看不见的数据的模型。在理想情况下,我们知道数据的真实分布D,可以直接计算任何候选决策树的风险或预期损失。但是在实践中真实的分布是未知的。

所以我们依赖于可用数据的子集来做出决策。这就是启发式方法的概念出现的地方。

基尼系数

基尼指数是一种杂质度量,用于量化给定节点中类别的混合程度。给定节点t的基尼指数G的公式为:

式中p_i为节点t中属于第i类样本的比例,c为类的个数。

基尼指数的范围从0到0.5,其中较低的值意味着节点更纯粹(即主要包含来自一个类别的样本)。

基尼指数还是信息增益?

基尼指数(Gini Index)和信息增益(Information Gain)都是量化区分不同阶层的特征的“有用性”的指标。从本质上讲,它们提供了一种评估功能将数据划分为类的效果的方法。通过选择杂质减少最多的特征(最低的基尼指数或最高的信息增益),就可以做出一个启发式决策,这是树生长这一步的最佳局部选择。

过拟合和修剪

决策树也会过度拟合,尤其是当它们很深的时候,会捕获数据中的噪声。有两个主要策略可以解决这个问题:

  1. 分割:随着树的增长,持续监控它在验证数据集上的性能。如果性能开始下降,这是停止生长树的信号。
  2. 后修剪:在树完全生长后,修剪不能提供太多预测能力的节点。这通常是通过删除节点并检查它是否会降低验证准确性来完成的。如果不是则修剪节点。

找不到最优风险最小化的树,是因为我们不知道真实的数据分布d。所以只能使用启发式方法,如基尼指数或信息增益,根据可用数据局部优化树,而谨慎分割和修剪等技术有助于管理模型的复杂性,避免过拟合。

随机森林

随机森林是决策树T_1, T_2, …的集合, T_n,其中每个决策树T_i:X→Y将输入特征空间X映射到输出Y,输出Y可以是连续值(回归)或类标签(分类)。

随机森林集合定义了一个新函数R:X→Y,它对所有单个树的输出进行多数投票(分类)或平均(回归),数学上表示为:

与决策树一样,随机森林也旨在近似概率分布D上的真实函数f:X→Y。D在实践中通常是未知的,因此有必要使用启发式方法来构建单个树。

与随机森林相关的相对于f的风险R_RF是R(x)和f(x)之间损失函数的期望值。考虑到R是T的集合,风险通常低于与单个树相关的风险,这有助于泛化:

过拟合和Bagging

与单一决策树相比,随机森林不太容易过度拟合,这要归功于Bagging和特征随机化,这在树之间创造了多样性。风险在多棵树上平均,使模型对数据中的噪声更有弹性。

随机森林中的Bagging实现了多个目标:它通过在不同的树上平均预测来减少过拟合,每棵树都在不同的自举样本上训练,从而使模型对数据中的噪声和波动更具弹性。这也减少了方差可以得到更稳定和准确的预测。树的集合可以捕获数据的不同方面,提高了模型对未见数据的泛化。并且还可以提供更高的健壮性,因为来自其他树的正确预测通常会抵消来自单个树的错误。该技术可以增强不平衡数据集中少数类的表示,使集成更适合此类挑战。

随机森林它在单个树级别采用启发式方法,但通过集成学习减轻了一些限制,从而在拟合和泛化之间提供了平衡。Bagging和特征随机化等技术进一步降低了风险,提高了模型的健壮性。

梯度增强决策树

梯度增强决策树(GBDT)也是一种集成方法,它通过迭代地增加决策树来构建一个强预测模型,每棵新树旨在纠正现有集成的错误。在数学上,GBDT也表示一个函数T:X→Y,但它不是找到一个单一的T(X),而是形成一个弱学习器t_1(X), t_2(X),…的序列,它们共同工作以近似真实函数f(X)。与随机森林(Random Forest)通过Bagging独立构建树不同,GBDT在序列中构建树,使用梯度下降最小化预测值和真实值之间的差异,通常通过损失函数表示。

在GBDT中,在构建每棵树并进行预测之后,计算预测值与实际值之间的残差(或误差)。这些残差本质上是梯度的一种形式——表明损失函数是如何随其参数变化的。然后一个新的树适合这些残差,而不是原始的结果变量,有效地采取“步骤”,利用梯度信息最小化损失函数。这个过程是重复的,迭代地改进模型。

“梯度”一词意味着使用梯度下降优化来指导树的顺序构建,旨在不断最小化损失函数,从而使模型更具预测性。

为什么它比决策树和随机森林更好?

  1. 减少过拟合:与随机森林一样,GBDT也避免过拟合,但它是通过构建浅树(弱学习器)和优化损失函数来实现的,而不是通过平均或投票。

  2. 高效率:GBDT专注于难以分类的实例,更多地适应数据集的问题区域。这可以使它在分类性能方面比随机森林更有效,因为随机森林对所有实例都一视同仁。

  3. 优化损失函数:与启发式方法(如基尼指数或信息增益)不同,GBDT中的损失函数在训练期间进行了优化,允许更精确地拟合数据。

  4. 更好的性能:当选择正确的超参数时,GBDT通常优于随机森林,特别是在需要非常精确的模型并且计算成本不是主要关注点的情况下。

  5. 灵活性:GBDT既可以用于分类任务,也可以用于回归任务,而且它更容易优化,因为您可以直接最小化损失函数。

梯度增强决策树解决的问题

单个树的高偏差:GBDT通过迭代修正单个树的误差,可以获得比单个树更高的性能。

模型复杂性:随机森林旨在减少模型方差,而GBDT在偏差和方差之间提供了一个很好的平衡,通常可以获得更好的整体性能。

梯度增强决策树比决策树和随机森林具有性能、适应性和优化方面的优势。当需要较高的预测准确性并愿意花费计算资源来微调模型时,它们特别有用。

XGBoost

在关于基于树的集成方法的讨论中,焦点经常落在标准的优点上:对异常值的健壮性、易于解释等等。但是XGBoost还有其他特性,使其与众不同,并在许多场景中具有优势。

计算效率

通常,围绕XGBoost的讨论都集中在它的预测能力上。不常被强调的是它的计算效率,特别是在并行和分布式计算方面。该算法利用特征和数据点来并行化树结构,使其能够处理更大的数据集,并且比传统实现运行得更快。

缺失数据的处理

XGBoost采用了一种独特的方法来处理缺失值。与其他通常需要单独预处理步骤的模型不同,XGBoost可以在内部处理丢失的数据。在训练过程中,算法为缺失值找到最佳的imputation值(或在树结构中移动的方向),然后将其存储以供将来预测。这意味着XGBoost处理丢失数据的方法是自适应的,可以因节点而异,从而提供对这些值的更细致的处理。

正则化

虽然增强算法天生就容易过度拟合,特别是对于有噪声的数据,但XGBoost在训练过程中直接将L1 (Lasso)和L2 (Ridge)正则化合并到目标函数中。这种方法提供了一种额外的机制来约束单个树的复杂性,而不是简单地限制它们的深度,从而提高泛化。

稀疏性

XGBoost设计用于高效地处理稀疏数据,而不仅仅是密集矩阵。在使用词袋或TF-IDF表示的自然语言处理等领域,特征矩阵的稀疏性可能是一个重大的计算挑战。XGBoost利用压缩的内存高效数据结构,其算法被设计为有效地遍历稀疏矩阵。

硬件的优化

虽然很少被讨论,但硬件优化是XGBoost的一个亮点。它对CPU上的内存效率和计算速度进行了优化,并支持GPU上的训练模型,进一步加快了训练过程。

特征重要性和模型可解释性

大多数集成方法提供特征重要性度量,包括随机森林和标准梯度增强。但是XGBoost提供了一套更全面的特性重要性度量,包括增益、频率和覆盖范围,从而允许对模型进行更详细的解释。当需要了解哪些特征是重要的,以及它们如何对预测做出贡献时,这一点非常重要。

早停策略

另一个未被讨论的特性是提前停止。谨慎分割和修剪等技术用于防止过拟合,而XGBoost提供了一种更自动化的方法。一旦模型的性能在验证数据集上停止改进,训练过程就可以停止,从而节省了计算资源和时间。

处理分类变量

虽然基于树的算法可以很好地处理分类变量,但是XGBoost采用了一种独特的方法。不需要独热编码或顺序编码,可以让分类变量保持原样。XGBoost对分类变量的处理比简单的二进制分割更细致,可以捕获复杂的关系,而无需额外的预处理。

XGBoost的独特功能使其不仅是预测精度方面的最先进的机器学习算法,而且是高效和可定制的算法。它能够处理现实世界的数据复杂性,如缺失值、稀疏性和多重共线性,同时计算效率高,并提供详细的可解释性,使其成为各种数据科学任务的宝贵工具。

XGBoost 2.0有什么新功能?

上面是我们介绍的一些背景知识,下面开始我们将介绍XGBoost 2.0提供了几个有趣的更新,可能会影响机器学习社区和研究。

具有矢量叶输出的多目标树

前面我们谈到了XGBoost中的决策树是如何使用二阶泰勒展开来近似目标函数的。在2.0中向具有矢量叶输出的多目标树转变。这使得模型能够捕捉目标之间的相关性,这一特征对于多任务学习尤其有用。它与XGBoost对正则化的强调一致,以防止过拟合,现在允许正则化跨目标工作。

设备参数

XGBoost可以使用不同硬件。在2.0版本中,XGBoost简化了设备参数设置。“device”参数取代了多个与设备相关的参数,如gpu_id, gpu_hist等,这使CPU和GPU之间的切换更容易。

Hist作为默认树方法

XGBoost允许不同类型的树构建算法。2.0版本将’ hist '设置为默认的树方法,这可能会提高性能的一致性。这可以看作是XGBoost将基于直方图的方法的效率提高了一倍。

基于gpu的近似树方法

XGBoost的新版本还提供了使用GPU的“近似”树方法的初始支持。这可以看作是进一步利用硬件加速的尝试,这与XGBoost对计算效率的关注是一致的。

内存和缓存优化

2.0通过提供一个新参数(max_cached_hist_node)来控制直方图的CPU缓存大小,并通过用内存映射替换文件IO逻辑来改进外部内存支持,从而延续了这一趋势。

Learning-to-Rank增强

考虑到XGBoost在各种排名任务中的强大性能,2.0版本引入了许多特性来改进学习排名,例如用于配对构建的新参数和方法,支持自定义增益函数等等。

新的分位数回归支持

结合分位数回归XGBoost可以很好的适应对不同问题域和损失函数。它还为预测中的不确定性估计增加了一个有用的工具。

总结

很久没有处理表格数据了,所以一直也没有对XGBoost有更多的关注,但是最近才发现发更新了2.0版本,所以感觉还是很好的。

XGBoost 2.0版本是一个全面的更新,它继续建立在现有的可伸缩性、效率和灵活性优势的基础上,同时引入了可以为新的应用程序和研究机会铺平道路的功能。

有兴趣的看看官方更新

https://avoid.overfit.cn/post/64350d0c3f774c0f98ad3d32348a08b5

作者:Vishal Rajput

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

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

相关文章

转守为攻,亚马逊云换帅背后的战略转向

点击关注 文|刘雨琦 一则人事任命,揭开了亚马逊云在大中华区反击战的序幕。 10月9日,亚马逊云科技全球销售、市场和服务高级副总裁 Matt Garman 宣布了大中华区领导人变更任命,储瑞松将接替张文翊担任该职位,继续带领…

2023年网络安全岗位有哪些?金九银十别错过秋招!

网络安全有哪些岗位? 1. 安全服务工程师 7-10k 网络安全工程师、安全项目经理:主要负责甲方设备安全调试工作。需精通服务器、网络技术以及安全设备原理与配置。 2. 安全运维工程师 7-10k 安全运维工程师,主要对己方安全防御体系的运维和应急…

如何在 Spring Boot 中提高应用程序的安全性

如何在 Spring Boot 中提高应用程序的安全性 Spring Boot是一种流行的Java开发框架,用于构建Web应用程序和微服务。在构建应用程序时,安全性是至关重要的因素。不论您的应用程序是面向公众用户还是企业内部使用,都需要采取适当的措施来确保数…

(java)(python)以代理IP的方式进行请求数据

文章目录 前言(java)(python)以代理IP的方式进行请求数据1. python2. java 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在白嫖的话…

洛谷100题DAY7

31.P1636 Einstein学画画 此题为欧拉通路&#xff0c;必须要满足奇点的个数为0或2个 奇点&#xff1a;度数&#xff08;入度出度&#xff09;为奇数的点 如果奇点为2个或者0个就可以直接一笔化成 eg. 我们发现奇数点个数每增加2个就多一笔 #include<bits/stdc.h> us…

数据结构和算法(11):红黑树

概述 伸展树实现简便、无需修改节点结构、分摊复杂度低&#xff0c;但可惜最坏情况下的单次操作需要O(n)时间。 AVL树尽管可以保证最坏情况下的单次操作速度&#xff0c;但需在节点中嵌入平衡因子等标识&#xff1b;更重要的是&#xff0c;删除操作之后的重平衡可能需做多达O(…

【DRAM存储器十三】DDR介绍-功能框图和模式寄存器解析

&#x1f449;个人主页&#xff1a;highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 参考资料&#xff1a;《镁光DDR数据手册》 目录 DDR SDRAM芯片引脚 DDR SDRAM芯片框…

校园跑腿小程序还受欢迎不?

校园跑腿小程序是如今大学生群体中越来越受欢迎的一种服务模式。它为大学生提供了一个便捷的平台&#xff0c;使他们能够在校园内完成各类生活事务&#xff0c;如购买食品、快递取送、打印复印等。这种形式的服务在过去几年里在全球范围内迅速发展&#xff0c;并取得了巨大的成…

大学专业分类及介绍 专业有哪些

大学的专业非常多样化&#xff0c;涵盖了哲学、经济学、法学、教育学、文学、历史学、理学、工学、农学、医学、管理学、艺术学等12个学科门类。每个学科门类下又设有多个具体专业。 哲学类下设专业有4个&#xff0c;包括哲学、逻辑学、宗教学、伦理学。 经济学类下设专业有17…

外汇天眼:CONSOB下令封禁5个非法金融服务网站 总数达945个!

负责监管意大利金融市场的监管机构意大利公司和交易委员会The Commissione Nazionale per le Societ e la Borsa &#xff08;CONSOB&#xff09;10月6日发布禁令&#xff0c;命令意大利互联网服务提供商&#xff08;ISP&#xff09;关闭5个在意大利境内提供非法金融服务的网站…

【Codeforces】Educational Codeforces Round 156 [Rated for Div. 2]

hh第一次记录cf。 复盘 ab题目比较清晰&#xff0c;只开了这两题&#xff0c;后面看了下cd&#xff0c;即使开了翻译也看不懂题目是什么意思&#xff0c;最后放弃睡觉了。。 a是一道思维题&#xff0c;翻了下别人写的发现大家写的各不相同hh b是一道数学题&#xff0c;过程有点…

改element的单选框的样式,改成方形有勾的样式

element-ui单选框按钮的样式改成对钩_el-radio 变对钩样式-CSDN博客 改变选中后字体的颜色 // 改变选中后字体的颜色 ::v-deep .el-radio__input.is-checked .el-radio__label {color:#28d4c1!important; }

2.1 线程是什么

技术上来说&#xff0c;线程是操作系统能够操作运行的一组独立的指令运算流程&#xff1b;更具体地来说&#xff0c;它的意义如下。 对于开发者&#xff0c;独立于主程序运行的一个“程序”可以称为一个线程。更进一步来说&#xff0c;如果一个应用包含多个“程序”&#xff0c…

计算顺序表中值在100到500之间的元素个数

要求顺序表中值在100到500之间的元素的个数&#xff0c;你可以使用C语言编写一个循环来遍历顺序表中的元素&#xff0c;并在循环中检查每个元素是否在指定的范围内。 #include <stdio.h>#define MAX_SIZE 100 // 假设顺序表的最大容量为100int main() {int arr[MAX_SIZE]…

车载开发所学内容,有哪些?程序员的转岗位需求

一、高速发展的行业前景 随着全球智能汽车市场的飞速发展&#xff0c;车载开发行业的前景可谓一片光明。各国政府对于自动驾驶和智能交通系统的政策支持&#xff0c;为行业带来了前所未有的机遇。此外&#xff0c;人工智能、大数据、云计算等前沿技术的不断突破&#xff0c;为…

C#,数值计算——数据建模Fitlin的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// General linear fit /// </summary> public class Fitlin { private int ndat { get; set; } private int ma { get; set; } private do…

项目管理必备的22个公式

大家好&#xff0c;我是老原。 趁着国庆时间比较空闲&#xff0c;给你们整理了一些项目管理必备的计算公式&#xff0c;一共22个。 每一个公式都给你们标注了适用情况和使用方法&#xff0c;为了方便你们理解&#xff0c;也加了一些例子&#xff0c;保准你看了就会。 觉得不…

增强基于Cortex-M3的MCU以处理480 Mbps高速USB

通用串行总线&#xff08;USB&#xff09;完全取代了PC上的UART&#xff0c;PS2和IEEE-1284并行接口&#xff0c;现在已在嵌入式开发应用程序中得到广泛认可。嵌入式开发系统使用的大多数I / O设备&#xff08;键盘&#xff0c;扫描仪&#xff0c;鼠标&#xff09;都是基于USB的…

MySQL数据库基本操作-DQL-聚合查询

简介 使用聚合函数查询是纵向查询&#xff0c;它是对一列的值进行计算&#xff0c;然后返回一个单一的值&#xff1b;另外聚合函数会忽略空值。 字段说明&#xff1a; product 是一个表pname 是商品名price 是 价格category_id 是分类 -- 1 查询商品的总条数 select count(…

Ubuntu20.04系统安装cuda11.3

在官网下载cuda进行安装&#xff1a; 官网链接&#xff1a;CUDA Toolkit Archive | NVIDIA Developer 再官网版本中选择需要的版本&#xff0c;本身需要cuda11.3 cuda版本选择后&#xff0c;选择系统信息后复制命令进行下载&#xff08;我是ubuntu20.04,aarch64 架构&#xf…