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

news2024/11/27 22:37:49

目录

🍔 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.coloradmin.cn/o/2227780.html

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

相关文章

太速科技-430-基于RFSOC的8路5G ADC和8路10G的DAC PCIe卡

430-基于RFSOC的8路5G ADC和8路10G的DAC PCIe卡 一、板卡概述 板卡使用Xilinx的第三代RFSOC系列&#xff0c;单颗芯片包含8路ADC和DAC&#xff0c;64-bit Cortex A53系列4核CPU&#xff0c;Cortex-R5F实时处理核&#xff0c;以及大容量FPGA。 对主机接口采用PCIe Gen3x…

SpringBoot篇(运维实用篇 - 临时属性)

目录 一、临时属性设置 1. 简介 2. 属性加载优先级 那是否还有其他的配置方式呢&#xff1f; 3. 知识小结 二、开发环境中使用临时属性 1. 如何操作 2. 知识小结 3. 思考 三、配置文件分类 1. 简介 2. 4个级别 3. 为什么设计多种配置文件&#xff1f; 一个典型的应…

基于SSM+微信小程序的汽车维修管理系统(汽车5)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的汽车维修管理系统实现了三个角色&#xff1a;管理员、员工、用户。 1、管理员实现了首页、管理员管理员、员工管理、用户管理、车辆信息管理、配件管理等 2、员工实…

【51 Pandas+Pyecharts | 深圳市共享单车数据分析可视化】

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 处理起始时间、结束时间2.4 增加骑行时长区间列2.5 增加骑行里程区间列 &#x1f3f3;️‍&#x1f308; 3. Pyecharts数据可视化3.1 各…

海亮科技亮相第84届中国教装展 尽显生于校园 长于校园教育基因

10月25日&#xff0c;第84届中国教育装备展示会&#xff08;以下简称“教装展”&#xff09;在昆明滇池国际会展中心开幕。作为国内教育装备领域规模最大、影响最广的专业展会&#xff0c;本届教装展以“数字赋能教育&#xff0c;创新引领未来”为主题&#xff0c;为教育领域新…

Mac 电脑 使用sudo创建项目后,给了读写权限,仍报权限问题

问题&#xff1a;sudo创建的项目&#xff0c;都已经改成读写权限了&#xff0c;但是修改项目中的内容还是报没权限。 原因&#xff1a;当你使用 sudo 创建项目时。这是因为 sudo 会以 root 用户的身份创建文件和目录&#xff0c;这些文件和目录默认属于 root 用户&#xff0c;…

vue封装信号强度

图标下载链接: https://pan.baidu.com/s/1828AidkCKU1KTkw1SvBwQg?pwd4k7n 共五格信号 信号5为绿色&#xff0c;信号4为绿色&#xff0c;信号3为黄色&#xff0c;信号2为黄色&#xff0c;信号1为红色&#xff0c;信号0为灰色。 子组件 /components/SignalStrength/index.vu…

【JavaScript】入门详解

JavaScript 作为 Web 开发的基石&#xff0c;赋予了网页动态交互的能力。本文将深入浅出地讲解 JavaScript 的核心概念&#xff0c;并结合最新用法进行详细解释和示例。 1. JavaScript 简介 JavaScript 是一种解释型脚本语言&#xff0c;也称弱类型语言&#xff0c;最初设计用…

标准正态分布的数据 tensorflow 实现正态分布图,python 编程,数据分析和人工智能...

登录后复制 import tensorflow as tfimport matplotlib.pyplot as plt# 设置随机种子以获得可重复的结果tf.random.set_seed(42)# 生成正态分布的数据# mean0 和 stddev1 表示生成标准正态分布的数据# shape(1000,) 表示生成1000个数据点data tf.random.normal(mean0, stddev1…

Web3 与人工智能的跨界合作:重塑数字经济的新引擎

在当今数字化浪潮汹涌澎湃的时代&#xff0c;Web3 和人工智能这两大前沿技术的跨界合作正逐渐成为重塑数字经济的强大新引擎。 Web3 代表着互联网的新一代发展方向&#xff0c;强调去中心化的理念、用户主权以及数据隐私保护。它致力于打破传统互联网由少数巨头掌控的格局&…

【问题记录】当机器人存在多个串口需要绑定时udevadm的作用

一、正常绑定 输入sudo udevadm info -a /dev/ttyUSBx | grep KERNELS 命令 会出现KERNELS的编号&#xff0c;记录编号。 修改规则文件/etc/udev/rules.d/99-usb.rules 添加以下命令 KERNEL"ttyUSB*", KERNELS"2-1.2:1.0", MODE:"0666", GROU…

江协科技STM32学习- P24 DMA数据转运DMA+AD多通道

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

论文阅读 - Pre-trained Online Contrastive Learning for Insurance Fraud Detection

Pre-trained Online Contrastive Learning for Insurance Fraud Detection| Proceedings of the AAAI Conference on Artificial Intelligence 目录 摘要 Introduction Methodology Problem Formulation Pre-trained Model for Enhanced Robustness Detecting Network a…

pycharm与anaconda下的pyside6的安装记录

一、打开anaconda虚拟环境的命令行窗口&#xff0c;pip install&#xff0c;加入清华源&#xff1a; pip install PySide6 -i https://pypi.tuna.tsinghua.edu.cn/simple 二、打开pycharm&#xff0c;在文件--设置--工具--外部工具中配置一下三项&#xff1a; 1、 QtDesigner…

GitHub Star 数量前 5 的开源应用程序生成器

欢迎来的 GitHub Star 数量排名系列文章的第 7 篇——最受欢迎的应用程序生成器。 之前我们已经详细探讨过&#xff1a;在 GitHub 上最受欢迎的——无代码工具、低代码项目、内部工具、CRUD项目、自部署项目和 Airtable 开源替代品。累计超过 50 个优质项目&#xff01;&#…

【主机游戏】塔尼蚀:神之堕落 游戏介绍

《塔尼蚀&#xff1a;神之堕落》是一款2D横版动作游戏支持简体和繁体中文 https://pan.baidu.com/s/1UT5XSwUcxGQzPOoSuNt3vw?pwdfxbt 。 游戏的基本操作包括&#xff1a; 移动&#xff1a;使用键盘的WASD或方向键进行角色的移动。攻击&#xff1a;鼠标左键或键盘的攻击…

【优选算法篇】前缀之序,后缀之章:于数列深处邂逅算法的光与影

文章目录 C 前缀和详解&#xff1a;基础题解与思维分析前言第一章&#xff1a;前缀和基础应用1.1 一维前缀和模板题解法&#xff08;前缀和&#xff09;图解分析C代码实现易错点提示代码解读题目解析总结 1.2 二维前缀和模板题解法&#xff08;二维前缀和&#xff09;图解分析C…

【小白学机器学习26】 极大似然估计,K2检验,logit逻辑回归(对数回归)(未完成----)

目录 1 先从一个例题出来&#xff0c;预期值和现实值的差异怎么评价&#xff1f; 1.1 这样一个问题 1.2 我们的一般分析 1.3 用到的关键点1 1.4 但是差距多远&#xff0c;算是远呢&#xff1f; 2 极大似然估计 2.1 极大似然估计的目的 2.1.1 极大似然估计要解决什么问题…

Mount Image Pro,在取证安全的环境中挂载和访问镜像文件内容

天津鸿萌科贸发展有限公司从事数据安全服务二十余年&#xff0c;致力于为各领域客户提供专业的数据恢复、数据备份解决方案与服务&#xff0c;并针对企业面临的数据安全风险&#xff0c;提供专业的相关数据安全培训。 天津鸿萌科贸发展有限公司是 GetData 公司数据恢复与取证工…

什么是元件符号什么是封装

话不多说直接上图 左上角就可以理解为元件的符号&#xff0c;右上角可以理解为元件的封装&#xff0c;右下角是封装得3D图&#xff0c;左下角是真实的芯片。 同时注意我们元件符号的小孔&#xff0c;在封装和焊接时我们可以参照小孔的位置以及对应的引脚。如下图所示&#xff…