XGBoost算法讲解和公式推导

news2024/11/24 2:03:20

本文节选自《机器学习入门基础(微课版)》

10.5 XGBoost 算法

XGBoost 是 2014 年 2 月由华盛顿大学的博士生陈天奇发明的基于梯度提升算法(GBDT)的机器学习算法,其算法不但具有优良的学习效果,而且训练速度高效,在数据竞赛中大放异彩。

XGBoost 是大规模并行 Boosting Tree 的工具,它是性能和速度俱佳的开源 Boosting Tree 工具包,比常见的工具包快很多倍。XGBoost 和 GBDT 两者都是 Boosting 方法,除了工程实现、解决问题上的一些差异外,最大的不同就是目标函数的定义。

10.5.1 算法思想

XGBoost 算法原理主要是以下几个方面:

1.防止过拟合

机器学习算法的泛化误差可以分为偏差(Bias)和方差(Variance)两部分。偏差指的是算法的期望预测与真实预测之间的偏差程度,反应了模型本身的拟合能力;方差度量了同等大小的训练集的变动导致学习性能的变化,刻画了数据扰动所导致的影响。

如图 10-9 所示,随着机器学习的模型复杂度增加,偏差越来越小,但方差却越来越大,而当模型越简单时,模型的方差很小,偏差却往往越大,也就是说,高方差导致过拟合,而高偏差导致欠拟合。

b5e08fb49bbab2a532d82fae530f1970.png

图10-9 机器学习方差和偏差

XGBoost 有效解决了过拟合问题,对叶节点的权重进行了惩罚,防止过拟合,惩罚相当于添加了 正则项,即目标函数为:训练损失加上正则项。

2.采用二阶泰勒展开加快收敛

GBDT 的损失函数用了一阶收敛,用到了梯度下降,XGBoost 的方法是用牛顿法进行二阶收敛,即将损失函数做二阶泰勒展开,使用前两阶作为改进的残差。梯度下降法是用了目标函数的一阶偏导数,而牛顿法就是用用了目标函数的二阶偏导数,二阶偏导数考虑了梯度的变化趋势,所以牛顿法会更容易收敛。图 10-10 显示了牛顿法(左)和梯度下降法(右)的迭代路径,可以发现,左边的路径更符合最优下降路径。使用二阶收敛,这也是 XGBoost 加快收敛的原因。

2b95ee1c9e4a18c75b2b462723762daf.png

图10-10 牛顿法(左)和梯度下降法(右)

3.树构造的分裂条件采用导数统计量

在寻找最佳分割点时,XGBoost 也实现了一种完全搜索式的精确的贪心算法(Exact Greedy Algorithm)。这种搜索算法会遍历一个特征上所有可能的分裂点,分别计算其损失减小量,然后选择最优的分裂点。根据结构分数的增益情况计算出来选择哪个特征的哪个分割点,某个特征的重要性,就是它在所有树中出现的次数之和。即增益(Gain)计算完了之后会选择一个增益最高的特征来分裂,然后这个特征的重要性加 1。

4.支持并行计算,可以采用多线程优化技术

XGBoost 的并行,并不是说每棵树可以并行训练,XGBoost 本质上仍然采用 boosting 思想,每棵树训练前需要等前面的树训练完成才能开始训练。

XGBoost 的并行,指的是特征维度的并行:在训练之前,每个特征按特征值对样本进行预排序,并存储为 Block 结构,在后面查找特征分割点时可以重复使用,而且特征已经被存储为一个个 block 结构,那么在寻找每个特征的最佳分割点时,可以利用多线程对每个 block 并行计算。

10.5.2 XGBoost 算法推导

XGBoost 中最主要的基学习器为 CART(分类与回归树),这里定义 是叶子的权重,  是将每个节点分配给叶子的函数, 是树的数量,并定义 为一个常数。假设前 步迭代优化得到的模型为 ,在第 步中,待求参数为 ,则第 步的目标函数为:

公式(10.14)第一部分 是预测值 和目标真实值 之间的训练误差,第二部分 是每棵树的复杂度之和。

根据泰勒展开公式,使用了二阶泰勒展开:

把 看成 则, 就可以看成 ,则:

在上面公式中:

为 的一阶偏导数:

为 的二阶偏导数:

则公式(10.14)可以转化为:

在这里,我们首先改进一棵树的定义   如下:

在 XGBoost 中,我们将复杂度定义为:

γ

则目标函数可以定义为:

很明显, 是一个常数,可以用 替代,对于目标函数 无影响,则目标函数可以转换为:

γ

其中定义 是分配给第    个叶子的数据点的索引的集合。因为在同一叶子上,所有数据点的分数相同,所以在第二行中,我们更改了总和的索引。因此公式等价于:

γγ

即:

γ

我们可以通过定义 , 来进一步压缩表达式,则:

γ

对 求偏导,如果有一个给定的树的结构 ,那么在上式达到最小的情况下(即导数为 0),得到:

则:

γ

并且得到相对应的最优目标函数值:

以图 10-11 为例:

5afc943fdb63a5b2c77d0b53c96a88d8.png

图10-11 决策树案例

根据已知的数据,得到相应的参数如图 10-12:

eb2f9a3567a4775db662e696d6517158.png

图10-12 决策树参数

图 10-12 的数据,,根据公式(10.30),则:

分数越小,代表这个树的结构越好。

在寻找最佳分割点时,使用一种完全搜索式的精确贪心算法(Exact Greedy Algorithm)。这种搜索算法会遍历一个特征上所有可能的分裂点,分别计算其损失减小量,然后选择最优的分裂点。精确贪心算法的流程见算法 10.1。

算法 10.1 精确贪心算法

f677d9cf83d6c36668152c51680ea6d6.png

算法思路:由于树的结构是未知的,而且也不可能去遍历所有的树结构。因此,XGBoost 采用贪婪算法来分裂节点,从根节点开始,遍历所有属性,遍历属性的可能取值,计算复杂度是:决策树叶子节点数减去 1。根据定义 ,记分到左、右子树的样本集为 、,,则分裂该节点导致的损失减少值为:

即:

其中: 为分割后左子树的分数, 为分割后右子树的分数, 为未分割的树的分数, 为新叶子的正则化项,即加入新叶子节点引入的复杂度代价,我们希望找到一个属性以及其对应的大小,使得  取值最大。

10.5.3 XGBoost 算法总结

XGBoost 是算法竞赛中最热门的算法之一,它将 GBDT 的优化走向了一个极致:

(1) XGBoost 生成 CART 树考虑了树的复杂度,GDBT 未考虑,GDBT 在树的剪枝步骤中考虑了树的复杂度。

(2) XGBoost 是拟合上一轮损失函数的二阶导展开,GDBT 是拟合上一轮损失函数的一阶导展开,因此,XGBoost 的准确性更高,且满足相同的训练效果,需要的迭代次数更少。

(3) XGBoost 与 GDBT 都是逐次迭代来提高模型性能,但是 XGBoost 在选取最佳分割点时可以开启多线程进行,大大提高了运行速度。当然,后续微软又出了 LightGBM,在内存占用和运行速度上又做了不少优化,但是从算法本身来说,优化点则并没有比 XGBoost 多。

参考文献

[1] CHEN T. Q., GUESTRIN C. XGBoost:A Scalable Tree Boosting System[C]//Proceedings of the 22Nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. ACM: 785–794.

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

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

相关文章

Linux下的系统编程——线程同步(十三)

前言: 在多线程编程中,如果多个线程同时访问和修改共享资源,可能会产生竞争条件和数据不一致的问题。同步机制用于协调线程之间的访问和操作,确保数据的正确性和一致性。为了避免多个线程同时访问和操作共享资源导致的问题&#…

小程序键盘没有【小数点】输入

<input v-model"formData.number" :auto-height"true" placeholder"请输入" confirm-type"done" type"digit" maxlength"11" input"inputNumber" />number&#xff1a;数字键盘&#xff08;没有小…

Minitab Express for Mac(数据分析软件)附破解补丁 v1.5.0 支持M1

Minitab Express是一款专为Mac用户设计的数据分析和统计软件。它提供了一套全面的工具和功能&#xff0c;用于分析数据、执行统计计算和生成可视化。 下载&#xff1a;Minitab Express for Mac(数据分析软件)附破解补丁 以下是 Minitab Express for Mac 的一些主要功能&#x…

随机森林案例分析

阅读随机森林模型前&#xff0c;建议首先阅读决策树模型手册&#xff08;点击后跳到决策树模型的帮助手册页面&#xff09;&#xff0c;因为随机森林模型实质上是多个决策树模型的综合&#xff0c;决策树模型只构建一棵分类树&#xff0c;但是随机森林模型构建非常多棵决策树&a…

数字虚拟人制作简明指南

如何在线创建虚拟人&#xff1f; 虚拟人&#xff0c;也称为数字化身、虚拟助理或虚拟代理&#xff0c;是一种可以通过各种在线平台与用户进行逼真交互的人工智能人。 在线创建虚拟人变得越来越流行&#xff0c;因为它为个人和企业带来了许多好处。 推荐&#xff1a;用 NSDT编辑…

阿里云无影云电脑和传统PC有什么区别?

阿里云无影云电脑和传统电脑PC有什么区别&#xff1f;区别大了&#xff0c;无影云电脑是云端的桌面服务&#xff0c;传统PC是本地的硬件计算机&#xff0c;无影云电脑的数据是保存在云端&#xff0c;本地传统PC的数据是保存在本地客户端&#xff0c;阿里云百科分享阿里云无影云…

低代码与低代码平台

随着数字化转型和软件需求的不断增长&#xff0c;传统的手写代码开发方式已经无法满足迅速推出应用程序的需求。为了加快软件开发的速度并降低技术门槛&#xff0c;低代码开发模式应运而生。本文将介绍低代码的概念&#xff0c;探讨什么是低代码、什么是低代码平台&#xff1f;…

RFID设备在自动化堆场中的管理应用

随着信息技术的高速发展&#xff0c;带动了港口生产和管理技术的长足进步&#xff0c;港口堆场内的自动化场桥的智能化水平成为码头提高生产率一个重要标签。各地海关着力于现代化科技手段&#xff0c;努力构筑新型的便捷通关模式&#xff0c;在进出口环节做好管理和服务。 全…

已解决 Kotlin Error: Type mismatch: inferred type is String but Int was expected

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

idea之maven的安装与配置

我们到maven的官网里下载maven&#xff0c;地址&#xff1a;https://maven.apache.org/download.cgi下载完成后解压即可配置环境变量 此电脑–>右键–>属性–>高级系统设置–>环境变量–>系统变量&#xff08;S&#xff09;–>新建一个系统变量 变量名&…

【开发记录01】开发环境副本/页的导入&带用户权限管理系统

在蒋老师的指导下大概了解了: 1.开发环境的数据导入/导出 共享组件的同步 因为应用程序277是应用程序100的子程序&#xff0c;所以共享组件必须和100保持一致。 但是会出现一个小问题&#xff1a; 在APEX开发过程中同时打开两个不同的应用程序&#xff0c;但是编辑过程中经…

Java 华为真题-猴子爬山

需求&#xff1a; 一天一只顽猴想去从山脚爬到山顶&#xff0c;途中经过一个有个N个台阶的阶梯&#xff0c;但是这猴子有一个习惯&#xff1a;每一次只能跳1步或跳3步&#xff0c;试问猴子通过这个阶梯有多少种不同的跳跃方式&#xff1f; 输入描述 输入只有一个整数N&#xff…

Python - 小玩意 - 键盘记录器

pip install keyboardimport keyboard import timedef get_time():date_time time.strftime("%Y-%m-%d %H:%S", time.localtime())return date_timedef abc(x):if x.event_type down:print(f"{get_time()}你按下了{x.name}")with open(./键盘记录器.txt,…

CG Magic分享同一场景里下,VR渲染器和CR渲染器哪个好?

渲染操作时&#xff0c;VR渲染器和CR渲染器的对比成为常见问题了。这个问题很多人都会问。 今天CG Magic小编通过一个真实的项目&#xff0c;就是同一场景下来比较一下VR渲染器和CR渲染器的区别。 以下图为例是用来测试的场景当年的最终图。采用了当年的一个伊丽莎白大街152号的…

SwiftUI 导航设置

文章目录 一、导航跳转二、导航设置三、Present跳转&#xff08;模态跳转&#xff09;四、返回页面 一、导航跳转 页面A import SwiftUIstruct NavJumpAView: View {State var isNavPush falsevar body: some View {NavigationView {VStack {NavigationLink(isActive: $isNa…

Epub如何转换成PDF格式,收藏好着两个工具!不要太简单~

你是不是经常遇到这样的情况&#xff1a;你下载了一本很想看的Epub格式的电子书&#xff0c;但是你的电脑或者手机没有支持Epub格式的阅读器&#xff0c;或者你觉得Epub格式的阅读效果不够好&#xff0c;你想要将它转换为PDF格式&#xff0c;但是你又不知道用什么软件或者网站可…

6-2 pytorch中训练模型的3种方法

Pytorch通常需要用户编写自定义训练循环&#xff0c;训练循环的代码风格因人而异。&#xff08;养成自己的习惯&#xff09; 有3类典型的训练循环代码风格&#xff1a;脚本形式训练循环&#xff0c;函数形式训练循环&#xff0c;类形式训练循环。 下面以minist数据集的多分类模…

Git --- 基础介绍

Git --- 基础介绍 git 是什么git --- 工作区, 暂存区, 资源库git --- 文件状态git --- branch 和 HEADgit --- 一次正常的git提交流程 git 是什么 Git是一款分布式源代码管理工具(版本控制工具)Git和其他传统版本控制系统比较: 传统的版本控制系统(例如 SVN)是基于差异的版本控…

家政小程序开发制作,家政保洁上门维修小程序搭建

家政小程序开发制作&#xff0c;现如今家政上门服务&#xff0c;也越来越普及到我们的生活中&#xff0c;比如家电清洗&#xff0c;水电维修&#xff0c;家政保洁&#xff0c;上门护理等等方面。那么一个合格的家政小程序&#xff0c;需要满足哪些功能呢&#xff1f;今天就带大…

视频图像处理算法opencv模块硬件设计图像颜色识别模块

1、Opencv简介 OpenCV是一个基于Apache2.0许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上 它轻量级而且高效——由一系列 C 函数和少量 C 类构成&#xff0c;同时提供了Python、Rub…