【机器学习】揭秘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 使用自己的分裂增益计算方法来构建强学习器

  

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于vue框架的的高校学习资源共享系统5ym3y(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;学生,学校信息,课程分类,班课信息,班课申请,学习资源,班课评价,班课投诉,投诉学生,教师,班级 开题报告内容 基于Vue框架的高校学习资源共享系统开题报告 一、项目背景与意义 随着信息技术的飞速发展和教育改革的深入推进&#xff0c;…

Hadoop生态圈框架部署(二)- 配置IP地址映射为主机名及免密登录

文章目录 前言一、配置IP地址映射为主机名1. 虚拟机hadoop1配置主机名与 IP 地址的映射关系2. 虚拟机hadoop2配置主机名与 IP 地址的映射关系3. 虚拟机hadoop3配置主机名与 IP 地址的映射关系 二、配置免密登录1. 配置虚拟机hadoop1免密登录到hadoop1、hadoop2和hadoop32. 配置…

基于JSP的篮球系列网上商城系统【附源码】

基于JSP的篮球系列网上商城系统 效果如下&#xff1a; 系统首页界面 商品信息界面 购物车界面 购物车界面 管理员登录界面 管理员功能界面 用户注册界面 我的收藏界面 研究背景 21世纪&#xff0c;我国早在上世纪就已普及互联网信息&#xff0c;互联网对人们生活中带来了无限…

力扣题86~90

题86&#xff08;中等&#xff09;&#xff1a; python代码 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def partition(self, head: Optional[Li…

Python小白学习教程从入门到入坑------第十八课 异常模块与包【上】(语法基础)

一、异常 在Python中&#xff0c;异常&#xff08;Exception&#xff09;是一种用于处理在程序运行时可能发生的错误情况的机制 异常允许程序在检测到错误时不是简单地崩溃&#xff0c;而是能够优雅地处理这些错误&#xff0c;可能包括记录错误信息、清理资源、或者向用户提…

5G NR:BWP入门

简介 5G NR 系统带宽比4G LTE 大了很多&#xff0c;4G LTE 最大支持带宽为20MHz&#xff0c; 而5G NR 的FR1 最大支持带宽为100MHz&#xff0c; FR2 最大支持带宽为 400MHz。 带宽越大&#xff0c;意味了终端功耗越多。为了减少终端的功耗&#xff0c;5G NR 引入了BWP(Band Wid…

哪款宠物空气净化器能吸毛还低噪?希喂、范罗士真实测评

作为一个养宠清洁博主&#xff0c;这些年为了让家里更干净&#xff0c;让猫在家里更舒服&#xff0c;我也测了不少的清洁家电&#xff0c;其中包括洗地机、吸尘器、空气净化器以及扫地机器人等&#xff0c;其中宠物空气净化器的表现也算十分优异。 它可以快速去除空气中的浮毛…

【ComfyUI】手动安装部署ComfyUI的运行环境

如果不喜欢已有的一键启动包&#xff0c;我们可以手动的安装和部署ComfyUI的运行环境&#xff0c;相比一键安装包&#xff0c;自己部署ComfyUI 环境具有相当大的灵活性&#xff0c;其实部署ComfyUI 环境非常简单&#xff0c;不像网上说的那么复杂。下面我们就按照顺序给大家分享…

【JavaEE】【多线程】定时器

目录 一、定时器简介1.1 Timer类1.2 使用案例 二、实现简易定时器2.1 MyTimerTask类2.2 实现schedule方法2.3 构造方法2.4 总代码2.5 测试 一、定时器简介 定时器&#xff1a;就相当于一个闹钟&#xff0c;当我们定的时间到了&#xff0c;那么就执行一些逻辑。 1.1 Timer类 …

Http 状态码 301 Permanent Rediret 302 Temporary Redirect、 重定向 重写

HTTP状态码301和302是什么&#xff1f; 1、HTTP状态码301 HTTP状态码301表示永久性转移&#xff08;Permanent Redirect&#xff09;&#xff0c;这意味着请求的资源已经被分配了一个新的URI&#xff0c;以后的引用应该使用资源现在所指的URI。 HTTP 301状态码表示请求的资源…

详解PHP正则表达式中的转义操作

PHP正则表达式中的特殊字符和转义 在 PHP 正则表达式中&#xff0c;有许多特殊字符具有特定的意义。这些特殊字符通常用于定义匹配模式的一部分&#xff0c;或者改变匹配的行为。以下是 PHP 正则表达式中一些常用的特殊字符及其含义: .匹配除换行符之外的任何单个字符 ^在方括…

IDEA如何在线安装一个插件,超简单

前言 我们在使用IDEA开发Java应用时&#xff0c;经常是需要安装插件的&#xff0c;这些各种各样的插件帮助我们快速的开发应用&#xff0c;今天&#xff0c;就来介绍下如何在IDEA中安装插件。 那么&#xff0c;我们该如何安装插件呢&#xff1f; 如何安装插件 首先&#xf…

u盘装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法

我们在u盘安装原版win10 iso镜像时&#xff0c;发现在选择硬盘时提示了“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”&#xff0c;直接导致了无法继续安装下去。出现这种情况要怎么解决呢&#xff1f;下面小编分享u盘安装win10系统提示“windows无法安装到这个磁盘…

HarmonyOS开发 - 本地持久化之实现LocalStorage实例

用户首选项为应用提供Key-Value键值型的数据处理能力&#xff0c;支持应用持久化轻量级数据&#xff0c;并对其修改和查询。数据存储形式为键值对&#xff0c;键的类型为字符串型&#xff0c;值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。 说明&#x…

重学SpringBoot3-怎样优雅停机

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-怎样优雅停机 1. 什么是优雅停机&#xff1f;2. Spring Boot 3 优雅停机的配置3. Tomcat 和 Reactor Netty 的优雅停机机制3.1 Tomcat 优雅停机3.2 Reac…

【C++初阶】模版入门看这一篇就够了

文章目录 1. 泛型编程2. 函数模板2. 1 函数模板概念2. 2 函数模板格式2. 3 函数模板的原理2. 4 函数模板的实例化2. 5 模板参数的匹配原则2. 6 补充&#xff1a;使用调试功能观察函数调用 3. 类模板3 .1 类模板的定义格式3. 2 类模板的实例化 1. 泛型编程 在C语言中&#xff0…

numpy——数学运算

一、标量——矢量 import numpy as npa 3.14 b np.array([[9, 5], [2, 7]])print(a) print(b)# ---------- 四则运算 ---------- print(a b) # np.add print(a - b) # np.subtract print(a * b) # np.multiply print(a / b) # np.divide 二、矢量——矢量 import nump…

基于边缘计算的智能门禁系统架构设计分析

案例 阅读以下关于 Web 系统架构设计的叙述&#xff0c;回答问题1至问题3。 【说明】 某公司拟开发一套基于边缘计算的智能门禁系统&#xff0c;用于如园区、新零售、工业现场等存在来访被访业务的场景。来访者在来访前&#xff0c;可以通过线上提前预约的方式将自己的个人信息…

CAS的ABA问题

目录 什么是 CAS CAS最主要的用途&#xff0c;实现原子类 基于CAS实现自旋锁 CAS的一个典型缺陷&#xff0c;ABA问题 解决 ABA 问题的方法 什么是 CAS CAS: 全称Compare and swap&#xff0c;字⾯意思:”⽐较并交换“&#xff0c;⼀个 CAS 涉及到以下操作&#xff1a; 我…

基于yolov8的布匹缺陷检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 基于yolov8的布匹缺陷检测系统&#xff0c;支持图像、视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov8的布匹缺陷检测系统是在 PyTo…