XGBoost论文阅读

news2024/11/27 22:39:13

XGBoost: A Scalable Tree Boosting System

目录

XGBoost: A Scalable Tree Boosting System

1.摘要

2.方法

2.1 正则化学习目标

2.2 梯度提升树

2.3 收缩率和列采样

2.4分裂点查找算法

1.摘要

        提出了一种新的稀疏性感知算法,用于稀疏数据和加权全图草图,用于近似树学习。同时提供了一种缓存访问模式、数据压缩和分片,以构建可扩展的树增强系统。

        支持在各个场景中使用。提出一种树学习方法,支持稀疏数据,并行化和分布式训练支持支持更快的模型探索。XGBoost是Boosting算法的一种工程实现。支持核外计算、缓存感知、和稀疏感知的学习。其次,支持正则化学习。

2.方法

2.1 正则化学习目标

    加法模型

文章中给出了一个例子,对一个样本的预测值等于所有树预测值的加和

    目标函数

损失和正则项,其中正则项包括,第k个叶子节点数量的正则项,以及叶子分数的正则项,这两项都是用来控制模型复杂度

目标函数 = 损失 + 正则项

    l是衡量预测值yi与真实值yi的损失函数,是一个可微的凸函数。Ω(fk)是用于控制模型复杂度的惩罚项。用于平滑学习的权重, 防止过拟合。使用正则项倾向于使用简单的预测函数。

2.2 梯度提升树

    目标函数是第i个样本的真实值yi,预测值由前t-1棵树的输出yi(t-1)加上第t棵树的输出ft(xi),之间的误差,加上对第t棵树的正则项组成。

将目标函数对ft-1(x)进行泰勒展开,

其中,,表示l对yi(t-1)的一阶偏导数,l对yi(t-1)的二阶偏导数为,  

    疑问:

(1)将目标函数展开成一阶偏导数和二阶偏导数的形式?

(2)为什么是对yi(t-1)的偏导数?

L(y,yit-1)为常数项,可以删除,于是目标函数变成以下形式

        提前计算好每个样本的一阶导数和二阶导数,然后将每个叶子节点中每个样本的一阶导、二阶导分别相加,使用得分函数得到每个节点的分数Obj(w), 是让L=0,计算其极小值对应的分数.

        树分裂的方式是,每个特征的每个值,找到分裂后增益最大(目标函数减小最多)的值作为分裂点。

   

将样本形式的目标函数转换成叶子节点形式

    令L = 0,求L的极小值,得到w的最优解w*,并代入L求得L的最优解

    公式(6)可以用于衡量树结构的好坏,分裂后目标函数L的减少量表示为

                                        L分裂减少量 = L分裂前 – L分裂后

2.3 收缩率和列采样

如何理解收缩?

目标函数中12λj=1Twj2是指对每个叶子节点分数wj2(如果是回归,则是叶子内所有样本预测值的平均,分类则是投票)的正则项,收缩指的是使用λ这样一个正则化因子对叶子节点的分数进行正则化,使得原始的L变成带有约束项的优化。

 

    文章解释这样做的目的是削弱当前树对最终预测的影响(因为是加法模型,每个样本的预测值为所有树预测的加和),留空间给后面的树进行学习,以提升模型

    为什么不将一棵树学得很复杂? 防止过拟合!

为什么进行列采样?

第二个技术是对特征(列)进行采样。文章提到,使用列(特征)采样比使用行(样本)采样更能防止过拟合。同时,列采样技术的使用也加快了后面描述的并行算法的计算速度。但是损失了最终的精度。

2.4分裂点查找算法

2.4.1 精确贪心算法

    在分裂的时候需要枚举每个特征的每个值,找到分裂后目标函数减小的最多的特征和对应的值作为分裂点,时间复杂度高。因此对特征进行采样。

    XGBoost把类别特征也当做了连续特征。为了能高效枚举分裂点,需要根据特征的值对数据进行排序,访问数据同时累加样本的梯度,来计算树的得分。 

2.4.2 近似算法

    精确贪心算法的不足在于,(1)时间复杂度高,(2)当数据量很大时,不能完全放入内存中去。

    近似算法的做法是,根据分位数为每个特征提供一些候选的分裂点,并提前计算好这些分裂点的一阶和二阶导数。然后找到增益最大的特征及对应的值作为分裂点。

 

总结起来,在精确贪心算法上提出两个优化方向,第一个是列采样,通过减少特征数,来减少外层循环的枚举次数;第二个是近似算法,通过提供特征的候选分裂点(分位数点),减少内层循环的次数。这样做的代价是损失了模型精度。

For k = 1 to m do
	GL = 0,GR = 0
	For j in sorted(I, by xjk) do
		GL = GL + gj, HL = HL + hj
		GR = G – GL,HR = H – HL
		Score = max(Score,Gain)
	END
END

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

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

相关文章

Python教程:什么是三级模式和二级映像?

美国国家标准学会(American National Standards Institute,ANSI)所属的标准计划与需求委员会(Standards Planning and Requirements Committee,SPARC)在1971年公布的研究报告中提出了ANSI-SPARC体系结构,即三级模式结构(或称为三层体系结构&a…

ArcGIS基础实验操作100例--实验53导出线、面要素的坐标值

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验53 导出线、面要素的坐标值 目录 一、实验背景 二、实验数据 三、实验步骤 &#xf…

笔记杂项(一)

都是踩过的坑,趟过的水。 ubuntu虚拟机终端字体太小的设置方法:ubuntu18.04调整终端字体大小 这个方法试试看:https://zhuanlan.zhihu.com/p/139305626 容器里面编译内核代码,进程被杀掉的原因是触发了内核OOM killer&#xff0c…

干货| app自动化测试之Andriod微信小程序的自动化测试

随着微信小程序的功能和生态日益完善,很多公司的小程序项目页面结构越来越多,业务逻辑也越来越复杂。如何做好小程序的自动化测试就成为测试同学普遍面临的一大痛点难题。微信小程序小程序内嵌于微信内部,页面包含 Native 原生元素和 Web 元素…

华为防火墙与二层交换机对接配置VLAN上网设置

拓扑图 一、防火墙设置 1、G1/0/0接口设置IP&#xff0c;G1/0/1接口切换二层口设置VLAN&#xff0c;G1/0/0 桥接了本地无线网卡来模拟公网地址 <USG6000V1>sys [USG6000V1]sys FW1 [FW1]un in en# 设置公网IP [FW1]int g1/0/0 [FW1-GigabitEthernet1/0/0]ip addr 192.1…

package.json配置解读之入门

文章目录前言一、描述配置nameversionrepositorydescriptionkeywordslicenseauthor二、文件配置filestypemainbrowsermoduleexportsworkspaces三、脚本配置scriptsconfig四、结语前言 package.json是每个前端项目都会有的json文件&#xff0c;位于项目的根目录中。很多脚手架在…

RHCE(chrony服务器)

chrony服务器 chrony服务器是一个开源自由的网络时间协议NTP的客户端和服务器的软件&#xff0c;他能让计算机保持系统时钟和时钟服务器保持同步&#xff0c;让计算机保持精确的时间&#xff0c;chrony也可以作为服务端软件为其他计算机提供时间同步服务 chrony由两部分组成&…

openAI--十拳剑助你做AI时代的弄潮儿

AI它厉害&#xff08;diao&#xff09;吗&#xff1f; 最近大家玩chatgpt还好吗&#xff1f; 有被它的恋爱情商暴击到吗&#xff1f; 有没有觉得那在leetcode上所向无敌的技巧都是浮云吗&#xff1f; 今天&#xff0c;我为大家带来十个很好的AI平台。这一篇先介绍一下&…

【远程桌面】nomachine下载安装使用教程、zerotier下载安装使用教程超详细

文章目录一、软件介绍二、NoMachine远程桌面1.Windows下载安装使用2.Linux下载安装使用3.Android下载安装使用4.ARM下载安装使用&#xff08;未实践&#xff09;三、ZeroTier内网穿透0.官网注册账户1.Windows下载安装使用2.Linux下载安装使用3.Android下载安装使用4.ARM下载安装…

Android 学习 - 不完善

SharedPreference 共享参数用法 SharedPreference 是 Android 的一个轻量级存储工具, 采用的存储结构是Key-Value的键值对方式. 共享参数的存储介质是符合XML规范的配置文件. 保存路径是: /data/data/应用包名/shared_prefs/文件名.xml 利用元数据配置快捷菜单 (1)元数据的met…

【阶段二】Python数据分析Pandas工具使用11篇:探索性数据分析:数据的检验:卡方检验与t检验

本篇的思维导图: 探索性数据分析:数据的检验 卡方检验 在实际的学习或工作中,也会碰到关于离散型变量之间的探索性分析,如两个离散变量之间是否相互独立。对于该问题的解答,就需要运用统计学中的卡方检验了。卡方检验属于非参数的检验方法,其原假设是两个离散变…

Spring——最全Spring目录

&#x1f4eb;作者简介&#xff1a;zhz小白 公众号&#xff1a;小白的Java进阶之路 专业技能&#xff1a; 1、Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理 2、熟悉Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理&#xff0c;具备⼀定的线…

2022 IoTDB Summit:IoTDB PMC侯昊男《Apache IoTDB首创时序顺乱序分离存储引擎 IoTLSM》...

12 月 3 日、4日&#xff0c;2022 Apache IoTDB 物联网生态大会在线上圆满落幕。大会上发布 Apache IoTDB 的分布式 1.0 版本&#xff0c;并分享 Apache IoTDB 实现的数据管理技术与物联网场景实践案例&#xff0c;深入探讨了 Apache IoTDB 与物联网企业如何共建活跃生态&#…

Flutter项目中添加Webview(八)使用JavaScript渠道

借助JavascriptChannel&#xff0c;您的应用可以在WebView的JavaScript上下文中注册回调处理程序&#xff0c;可以调用这些回调处理程序将值传递回应用的Dart代码。在此步骤中&#xff0c;您将注册一个使用 SMLHttpRequest的结果调用SnackBar。 将WebViewStack类更新如下所示&…

Mysql的锁(自用笔记)

笔记(https://www.bilibili.com/video/BV1Kr4y1i7ru) 什么是锁? mysql中有哪几种锁 表级锁 表级锁-表锁 write lock 写锁, 加锁客户端,可以读写操作, 其他客户端不能 读,写操作 表级锁-元数据锁 一个例子,事务中,增删改查时候,会自动加入元数据锁,不允许对表结构进行修改 …

Keras model.predict输出的概率值转换为类别

问题&#xff1a;使用Keras做分类任务&#xff0c;model.predict预测得到的值为每个类别的概率值&#xff0c;而不是类别。 源码&#xff1a; y_test_pred model.predict(x_test, batch_size256, verbose1)解决&#xff1a; import numpy as np y_test_pred model.predict(…

[ctf.show pwn] 新手杯,七夕杯

闲来无事作练习新手杯pwn1好长的代码&#xff0c;看了十几分钟&#xff0c;发现最后一个函数是后门&#xff0c;而且是不用敲的那种。void __noreturn door() {char s[32]; // [rsp0h] [rbp-50h] BYREFchar command[40]; // [rsp20h] [rbp-30h] BYREFunsigned __int64 v2; // […

【新年心安】新冠感染“阳康”套餐,“阳康”后的你,很有必要

你有没有 在阳康后还伴随 呼吸急促&#xff08;气短&#xff09;、全身乏力、咳嗽、出冷汗等 健康问题阳康健康检查套餐 潍坊正大光明老年病医院为更好的服务患者现推出阳康健康检查套餐&#xff0c;“阳康”后的你&#xff0c;体检先行很有必要&#xff01;详情如下&#xff1…

【LeetCode面试TOP100】力扣打卡第一天!

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【LeetCode面试TOP100】 ✈️✈️本篇内容:力扣Top100——第1,2题&#xff01; &#x1f680;&#x1f680;代码存放仓库gitee&#xff1a;力扣面试Top100题&…

JavaScript刷LeetCode拿offer-js版字典

1. 字典简介 与集合类似&#xff0c;字典也是一种存储唯一值的数据结构&#xff0c;但它是以键值对的形式来存储。 使用 ES6 Map 1.1 字典的常用操作 const m new Map();// 增 m.set(a, aa); m.set(b, bb);// 删 m.delete(b); m.clear();// 改 m.set(a, aaa)// 查 m.get(a…