【机器学习】揭秘XGboost:高效梯度提升算法的实践与应用

目录

🍔 XGBoost 原理

1.1 目标函数确定和树的复杂度介绍

1.2 XGBoost目标函数的推导

1.3 泰勒公式展开

1.4 化简目标函数

1.5 问题再次转换

1.6 对叶子结点求导

1.7 XGBoost的回归树构建方法

🍔 XGBoost API

2.1 通用参数

2.2 Booster 参数

2.2.1 Parameters for Tree Booster

2.2.2 Parameters for Linear Booster

2.3 学习目标参数

🍔 小结


学习目标

🍀 知道XGBoost原理

🍀 了解XGBoost API的常用参数

🍔 XGBoost 原理

XGBoost 是对梯度提升算法的改进:

  1. 求解损失函数极值时使用泰勒二阶展开

  2. 另外在损失函数中加入了正则化项

  3. XGB 自创一个树节点分裂指标。这个分裂指标就是从损失函数推导出来的。XGB 分裂树时考虑到了树的复杂度。

我们在前面已经知道,构建最优模型的一般方法是 最小化训练数据的损失函数

预测值和真实值经过某个函数计算出损失,并求解所有样本的平均损失,并且使得损失最小。

上面的式子称为 经验风险最小化 ,如果仅仅追求经验风险最小化,那么训练得到的模型复杂度较高,很容易出现过拟合。因此,为了降低模型的复杂度,常采用下式:

上面的式子称为 结构风险最小化 ,结构风险最小化的模型往往对训练数据以及未知的测试数据都有较好的预测 。

XGBoost的决策树生成是结构风险最小化的结果。

1.1 目标函数确定和树的复杂度介绍

XGBoost(Extreme Gradient Boosting)是对梯度提升树的改进,并且在损失函数中加入了正则化项。

目标函数的第一项表示整个强学习器的损失,第二部分表示强学习器中 K 个弱学习器的复杂度。

xgboost 每一个弱学习器的复杂度主要从两个方面来考量:

  1. γT 中的 T 表示一棵树的叶子结点数量,γ 是对该项的调节系数

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

1.2 XGBoost目标函数的推导

上公式中,第一部分是从强学习器的角度去衡量,第二项也是衡量整个强学习器的复杂·程度。

1.3 泰勒公式展开

我们直接对目标函数求解比较困难,通过泰勒展开将目标函数换一种近似的表示方式。接下来对 yi(t-1) 进行泰勒二阶展开,得到如下近似表示的公式:

其中,gi 和 hi 的分别为损失函数的一阶导、二阶导:

1.4 化简目标函数

我们观察目标函数,发现以下两项都是常数项,我们可以将其去掉。

为什么说是常数项呢?这是因为当前学习器之前的学习器都已经训练完了,可以直接通过样本得出结果。化简之后的结果为:

我们再将 Ω(ft) 展开,结果如下:

这个公式中只有 ft ,该公式可以理解为,当前这棵树如何构建能够降低损失。

1.5 问题再次转换

我们再次理解下这个公式表示的含义:

  1. gi 表示每个样本的一阶导,hi 表示每个样本的二阶导

  2. ft(xi) 表示样本的预测值

  3. T 表示叶子结点的数目

  4. ||w||2 由叶子结点值组成向量的模

现在,我们发现公式的各个部分考虑的角度不同,有的从样本角度来看,例如:ft(xi) ,有的从叶子结点的角度来看,例如:T、||w||2。我们下面就要将其转换为相同角度的问题,这样方便进一步合并项、化简公式。我们统一将其转换为从叶子角度的问题:

例如:10 个样本,落在 D 结点 3 个样本,落在 E 结点 2 个样本,落在 F 结点 2 个样本,落在 G 结点 3 个样本

  1. D 结点计算: w1 * gi1 + w1 * gi2 + w1 * gi3 = (gi1 + gi2 + gi3) * w1

  2. E 结点计算: w2 * gi4 + w2 * gi5 = (gi4 + gi5) * w2

  3. F 结点计算: w3 * gi6 + w3 * gi6 = (gi6 + gi7) * w3

  4. G 节点计算:w4 * gi8 + w4 * gi9 + w4 * gi10 = (gi8 + gi9 + gi10) * w4

gi ft(xi) 表示样本的预测值,我们将其转换为如下形式:

  • wj 表示第 j 个叶子结点的值

  • gi 表示每个样本的一阶导

hift2(xi) 转换从叶子结点的问题,如下:

λ||w||2 由于本身就是从叶子角度来看,我们将其转换一种表示形式:

我们重新梳理下整理后的公式,如下:

上面的公式太复杂了,我们令:

Gi 表示样本的一阶导之和,Hi 表示样本的二阶导之和,当确定损失函数时,就可以通过计算得到结果。

现在我们的公式变为:

1.6 对叶子结点求导

此时,公式可以看作是关于叶子结点 w 的一元二次函数,我们可以对 w 求导并令其等于 0,可得到 w 的最优值,将其代入到公式中,即可再次化简上面的公式。

将 wj 代入到公式中,即可得到:

1.7 XGBoost的回归树构建方法

该公式也叫做打分函数 (scoring function),它可以从树的损失函数、树的复杂度两个角度来衡量一棵树的优劣。

这个公式,我们怎么用呢?

当我们构建树时,可以用来选择树的最佳划分点。

其过程如下:

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

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

    1. 如果分数 > 0,则分裂之后分树的结构损失更小,我们会考虑此次分裂

    2. 如果分数 < 0,说明分裂后的分数比分裂前的分数大,此时不建议分裂

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

    1. 达到最大深度

    2. 叶子结点样本数量低于某个阈值

    3. 等等...

🍔 XGBoost API

2.1 通用参数

booster [缺省值=gbtree]

  1. gbtree:使用树模型

  2. gblinear:使用线性模型

  3. dart:使用树模型,主要多了 Dropout

silent [缺省值=0]

  • 设置为 0 打印运行信息

  • 设置为 1不打印运行信息

nthread [缺省值=设置为最大可能的线程数]

  • 并行运行的线程数,输入的参数应该 <= 系统的CPU核心数

  • 若是没有设置算法会检测将其设置为 CPU 的全部核心数

下面的两个参数不需要设置,使用默认的就好了

num_pbuffer [xgboost自动设置,不需要用户设置]

  • 预测结果缓存大小,通常设置为训练实例的个数。该缓存用于保存最后 boosting 操作的预测结果

num_feature [xgboost自动设置,不需要用户设置]

  • 在boosting中使用特征的维度,设置为特征的最大维度

2.2 Booster 参数

2.2.1 Parameters for Tree Booster

eta [缺省值=0.3,别名:learning_rate]

  • 更新中减少的步长来防止过拟合

  • 每次 boosting 之后,可以直接获得新的特征权值,这样可以使得 boosting 更加鲁棒

  • 范围: [0,1]

gamma [缺省值=0,别名: min_split_loss](分裂最小loss)

  • gamma 指定了节点分裂所需的最小损失函数下降值

  • 这个参数的值和损失函数息息相关,所以是需要调整的

  • 范围: [0, ∞]

max_depth [缺省值=6]

  • 这个值为树的最大深度。 这个值也是用来避免过拟合的

  • max_depth越大,模型会学到更具体更局部的样本

  • 设置为 0 代表没有限制

  • 范围: [0 ,∞]

min_child_weight [缺省值=1]

  • 当它的值较大时,可以避免模型学习到局部的特殊样本

  • 如果这个值过高,会导致欠拟合

  • 范围: [0,∞]

subsample [缺省值=1]

  • 这个参数控制对于每棵树,随机采样的比例

  • 如果这个值设置得过大,它可能会导致过拟合

  • 如果这个值设置得过小,它可能会导致欠拟合

  • 典型值:0.5-1,0.5 代表平均采样,防止过拟合

  • 范围: (0,1]

colsample_bytree [缺省值=1]

  • 控制每棵随机特征采样的比例

  • 范围: (0,1],典型值:0.5-1

colsample_bylevel [缺省值=1]

  • 用来控制树每一次分裂时对特征的采样的比例

  • 范围: (0,1]

alpha [缺省值=0,别名: reg_alpha]

  • 权重的L1正则化项。(和Lasso regression类似)。 可以应用在很高维度的情况下,使得算法的速度更快

scale_pos_weight[缺省值=1]

  • 在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛

  • 通常可以将其设置为负样本的数目与正样本数目的比值

2.2.2 Parameters for Linear Booster

linear booster一般很少用到。

lambda [缺省值=0,别称: reg_lambda]

  • L2 正则化惩罚系数,增加该值会使得模型更加保守

alpha [缺省值=0,别称: reg_alpha]

  • L1正则化惩罚系数,增加该值会使得模型更加保守。

lambda_bias [缺省值=0,别称: reg_lambda_bias]

  • 偏置上的 L2 正则化(没有在L1上加偏置,因为并不重要)

2.3 学习目标参数

objective [缺省值=reg:linear]

  1. reg:linear:线性回归

  2. reg:logistic: 逻辑回归

  3. binary:logistic:二分类逻辑回归,输出为概率

  4. multi:softmax:使用softmax的多分类器,返回预测的类别(不是概率)。在这种情况下,你还需要多设一个参数:num_class(类别数目)

  5. multi:softprob:和multi:softmax参数一样,但是返回的是每个数据属于各个类别的概率。

eval_metric [缺省值=通过目标函数选择] 验证集

可供选择的如下所示:

  1. rmse: 均方根误差

  2. mae: 平均绝对值误差

  3. logloss: 负对数似然函数值

  4. error:其值通过错误分类数目与全部分类数目比值得到。对于预测,预测值大于0.5被认为是正类,其它归为负类。

  5. error@t: 不同的划分阈值可以通过 ‘t’进行设置

  6. merror: 多分类错误率,计算公式为(wrong cases)/(all cases)

  7. mlogloss: 多分类log损失

  8. auc: 曲线下的面积

seed [缺省值=0]

  • 随机数的种子,设置它可以复现随机数据的结果,也可以用于调整参数

🍔 小结

  1. XGBoost 算法是对 GBDT 的改进,在损失函数中增加了正则化项,综合考虑了模型的结构风险

  2. XGBoost 使用自己的分裂增益计算方法来构建强学习器

  

💘若能为您的学习之旅添一丝光亮,不胜荣幸💘

🐼期待您的宝贵意见,让我们共同进步共同成长🐼

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

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

相关文章

Transformer的Pytorch实现【1】

使用Pytorch手把手搭建一个Transformer网络结构并完成一个小型翻译任务。 首先&#xff0c;对Transformer结构进行拆解&#xff0c;Transformer由编码器和解码器&#xff08;Encoder-Decoder&#xff09;组成&#xff0c;编码器由Multi-Head Attention Feed-Forward Network组…

【MySQL】存储引擎

MySQL采用的是可插拔的存储引擎架构&#xff0c;也就是说在运行期间可以动态的加载或卸载存储引擎&#xff1b;查看当前服务器存储引擎的方法show engines&#xff0c;其中重点关注两个字段即可&#xff0c;其一是Support-表示当前服务器是否支持&#xff0c;其二是它的数值yes…

构建校园社团信息管理平台:Spring Boot技术的核心要点

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

RAG工具:FlashRAG用于高效 RAG 研究的 Python 工具包

随着大语言模型的火热&#xff0c;如何提高生成内容的准确性和可靠性&#xff0c;成为各行业关注的重点。检索增强生成&#xff08;RAG&#xff09;正是通过将强大的检索功能与语言模型结合&#xff0c;在生成文本时引入来自外部的实时信息。 今天&#xff0c;我们来了解一款为…

任天堂新款闹钟被玩家破解,竟能运行《毁灭战士》游戏!

任天堂于10月9日推出的Nintendo Sound Clock Alarmo闹钟在市场上引起了强烈反响。这款定价为99.99美元&#xff08;约706元人民币&#xff09;的闹钟&#xff0c;在日本则以12980日元&#xff08;约619元人民币&#xff09;的价格迅速被抢购一空。 近日&#xff0c;首批收到闹钟…

我笑了,居民日均劳动不满3.5小时

鸭鸭是一位现代都市青年&#xff0c;生活节奏规律&#xff0c;时间安排精细&#xff0c;非常符合国家统计局发布的时间利用调查报告中的数据。以下是鸭鸭一天的生活日常&#xff1a; 早上 7:00 - 鸭鸭准时起床&#xff0c;开始一天的生活。他通常会在床上稍微刷刷手机&#xf…

django快速基本配置(2)

知识星球 | 深度连接铁杆粉丝&#xff0c;运营高品质社群&#xff0c;知识变现的工具 目录 配置开发目录 配置MySQL数据库 配置Redis数据库 配置工程日志 用户注册 跨域CORS 注意 配置开发目录 libs 存放第三方的库文件 utils 存放项目自己定义的公共函数或类等 apps 存…

前端技术月刊-2024.11

本月技术月刊聚焦于前端技术的最新发展和业务实践。业界资讯部分&#xff0c;React Native 0.76 版本发布&#xff0c;带来全新架构&#xff1b;Deno 2.0 和 Node.js 23 版本更新&#xff0c;推动 JavaScript 生态进步&#xff1b;Flutter 团队规模缩减&#xff0c;引发社区关注…

Golang的Web应用架构设计

# Golang的Web应用架构设计 介绍 是一种快速、高效、可靠的编程语言&#xff0c;它在Web应用开发中越来越受欢迎。Golang的Web应用架构设计通常包括前端、后端和数据库三个部分。在本篇文章中&#xff0c;我们将详细介绍Golang的Web应用架构设计及其组成部分。 前端 在Golang的…

element-plus按需引入报错AutoImport is not a function

官网文档&#xff1a;快速开始 | Element Plus webpack配置 // webpack.config.js const AutoImport require(unplugin-auto-import/webpack) const Components require(unplugin-vue-components/webpack) const { ElementPlusResolver } require(unplugin-vue-components…

【51单片机】串口通信原理 + 使用

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 串口硬件电路UART串口相关寄存器 编码单片机通过串口发送数据电脑通过串口发送数据控制LED灯 串口 串口是一种应用十分广泛的通讯接…

操作系统——计算机系统概述——1.4操作系统结构

目录 操作系统的体系结构 大内核&#xff08;宏内核/单内核&#xff09;&#xff1a; 微内核&#xff1a; 分层法 模块化 操作系统的体系结构 大内核&#xff08;宏内核/单内核&#xff09;&#xff1a; 将操作系统的主要功能模块都作为系统内核&#xff0c;运行在核心态。…

ssh和ssl的区别在哪些方面?

在网络安全和数据保护领域&#xff0c;谈话中经常提到的两个词是SSH(安全外壳)和SSL(安全套接字层)。尽管这两者在在线通信安全中都具有重要意义&#xff0c;但它们的使用目的不同&#xff0c;并且处于网络堆栈的不同级别。本文将深入分析 SSH 和 SSL 主要区别在哪些方面。 概念…

第三十三篇:TCP协议如何避免/减少网络拥塞,TCP系列八

一、流量控制 一般来说&#xff0c;我们总是希望数据传输得更快一些&#xff0c;但是如果发送方把数据发送得太快&#xff0c;接收方可能来不及接收&#xff0c;造成数据的丢失&#xff0c;数据重发&#xff0c;造成网络资源的浪费甚至网络拥塞。所谓的流量控制&#xff08;fl…

基于卷积神经网络的棉花病虫害识别与防治系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 棉花病害识别与防治系统&#xff0c;卷积神经网络&#xff0c;resnet50&#xff0c;mobilenet【pytorch框架&#xff0c;python源码】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积…

基于STM32的智能停车场管理系统设计

引言 本项目旨在基于STM32微控制器设计一个智能停车场管理系统。该系统集成了多种传感器和控制模块&#xff0c;以实现停车位实时检测、车辆识别、自动控制栏杆、车位信息显示和云端数据管理等功能。智能停车场管理系统可以有效提升停车场的运转效率&#xff0c;改善车主的停车…

《大数据与人工智能:提升数据质量与数量的利器》

《大数据与人工智能&#xff1a;提升数据质量与数量的利器》 一、大数据与人工智能的融合趋势二、大数据增加数据数量的方法&#xff08;一&#xff09;不同途径的数据增量&#xff08;二&#xff09;数据增强的多样方法 三、人工智能提升数据数量的手段&#xff08;一&#xf…

C/C++常用编译工具链:GCC,Clang

目录 GNU Compiler Collection GCC的优势 编译产生的中间文件 Clang Clang的特点 什么是LLVM&#xff1f; Clang编译过程中产生的中间表示文件 关于Clang的调试 C 编译工具链中有几个主要的编译工具&#xff0c;包括&#xff1a; GNU Compiler Collection (GCC…

停车位类型分割系统:一条龙教学体系

停车位类型分割系统源码&#xff06;数据集分享 [yolov8-seg-aux&#xff06;yolov8-seg-C2f-DAttention等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al l…

DICOM标准:CR图像模块属性详解——计算放射线照相术(CR)及其在DICOM中的表示

目录 CR图像及其在DICOM中的表示 1 计算放射线照相术 1.1 CR序列组件 1.1 -- CR 序列模块属性 1.2 CR 图像模块 表1.2 -- CR 图像模块属性 结论 CR图像及其在DICOM中的表示 计算放射线照相术&#xff08;Computed Radiography, CR&#xff09;是一种利用计算机技术对传统…