我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【机器学习】XGBoost

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【机器学习】XGBoost

1.什么是XGBoost

        XGBoost(eXtreme Gradient Boosting)极度梯度提升树,属于集成学习中的boosting框架算法。对于提升树,简单说就是一个模型表现不好,继续按照原来模型表现不好的那部分训练第二个模型,依次类推。本质思想与GBDT一致,构建多个基学习器使用加法模型,学习前面基学习器的结果与真实值的偏差,通过多个学习器的学习,不断降低模型值和实际值的差。

         最终模型的预测结果是由所有基学习器预测结果的加和。 

2.XGBoost的目标函数

        XGBoost整体思想就是直接把损失函数和正则项加起来合成一个整体的损失函数,对这个损失函数求二阶导,得到最终的obj,通过obj计算得到一个分数,这个分数越小越好,最终通过obj计算得到的分数确定了树的结构和整个强学习器的分数。所以XGBoost不是通过拟合残差实现的,而是计算obj函数直接得到的树结构。 

        目标函数由两部分组成,第一部分是模型误差,即样本真实值和预测值之间的差值,第二部分是模型的结构误差,即正则项,通过使用超参数乘以结点个数和节点值限制模型的复杂度。 

        正则项公式如下: 

        参数说明: 

       

        优化目标:

         由于是加法模型,所以可以将正则项进行改写,整体的正则项就等于前面t-1棵树的正则项加上当前回归树的正则项。

         而在计算时,前面t-1棵树正则项中的T和w是已经确定的,整体优化目标可以近似表示:

         正则项的确定只与要优化的当前的这颗回归树的叶子结点的w值和叶子结点的个数T有关。

        由于树模型是阶跃的,是不连续的,不适合用梯度下降法,所以需要将目标函数改写,按照样本的顺序做遍历更改为按照叶子结点的顺序做遍历。例如叶子结点有w1、w2....wn。经过回归后落到w1叶子结点下的样本集合K1中包含有不同的预测值,w1的损失值就是w1(叶子结点的值)的值与K1中不同预测值的损失加和,以此类推。

         已经将损失函数转化为与叶子结点的值w有关的多项式,因为损失函数根据不同的任务定义,所以无法提前预知损失函数的形式。接下来的任务是将抽象的损失函数分解为包含w的多项式,通过泰勒二阶展开将w进行提取。

3.公式推导

        使用泰勒二阶对目标函数展开。

         泰勒二阶展开后的损失函数。

         通过分步+贪婪的到树的结构。确定树的结构就是来确定树的叶子结点的值w

4. XGBoost的优缺点

4-1 优点

(1)精度更高:GBDT 只用到一阶泰勒展开,而 XGBoost 对损失函数进行了二阶泰勒展开。XGBoost 引入二阶导一方面是为了增加精度,另一方面也是为了能够自定义损失函数,二阶泰勒展开可以近似大量损失函数;

(2)灵活性更强:GBDT 以 CART 作为基分类器,XGBoost 不仅支持 CART 还支持线性分类器,使用线性分类器的 XGBoost 相当于带 L1 和 L2 正则化项的逻辑回归(分类问题)或者线性回归(回归问题)。此外,XGBoost 工具支持自定义损失函数,只需函数支持一阶和二阶求导;

(3)正则化:XGBoost 在目标函数中加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、叶子节点权重的 L2 范式。正则项降低了模型的方差,使学习出来的模型更加简单,有助于防止过拟合,这也是XGBoost优于传统GBDT的一个特性。

(4)防止过拟合:

        1.Shrinkage(缩减):相当于学习速率。XGBoost 在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,使每棵树的影响不会过大,让后面有更大的学习空间。主要用于传统GBDT的实现也有学习速率;

        2.Column Subsampling(列采样),类似于随机森林选区部分特征值进行建树,其中又分为两个方式:方式一按层随机采样,在对同一层结点分裂前,随机选取部分特征值进行遍历,计算信息增益;方式二在建一棵树前随机采样部分特征值,然后这棵树的所有结点分裂都遍历这些特征值,计算信息增益。这也是XGBoost异于传统GBDT的一个特性;

(5)缺失值处理:XGBoost和LightGBM是支持缺失值的,并且XGBoost和LightGBM对缺失值的处理方法相同。xgboost为缺失值设定了默认的分裂方向,对于存在某一维特征缺失的样本XGBoost会先将其划入左子树计算增益,再划入右子树计算训练增益,对比放在左右子树增益的大小决定放在哪个子树。

4-2 缺点

(1)计算量大:虽然利用预排序和近似算法可以降低寻找最佳分裂点的计算量,但在节点分裂过程中仍需要遍历数据集;

   (2)内存消耗大:预排序过程的空间复杂度过高,不仅需要存储特征值,还需要存储特征对应样本的梯度统计值的索引,相当于消耗了两倍的内存。

5.  XGBoost与GBDT的联系和区别有哪些?

(1)GBDT是机器学习算法,XGBoost是该算法的工程实现。

(2)正则项:在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。

(3)导数信息:GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。

(4)基分类器:传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。

(5)子采样:传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样。

(6)缺失值处理:传统GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。

(7)并行化:传统GBDT没有进行并行化设计,注意不是tree维度的并行,而是特征维度的并行。XGBoost预先将每个特征按特征值排好序,存储为块结构,分裂结点时可以采用多线程并行查找每个特征的最佳分割点,极大提升训练速度。

Reference:

(1)15.【近似算法】加权分位法_哔哩哔哩_bilibili

(2)XGBoost算法介绍_月落乌啼silence的博客-CSDN博客_xgboost

(3)深入理解XGBoost - 知乎

来源地址:https://blog.csdn.net/weixin_44750512/article/details/129047112

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【机器学习】XGBoost

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

机器学习——XGBoost大杀器,XGB

0.随机森林的思考  随机森林的决策树是分别采样建立的,各个决策树之间是相对独立的。那么,在我们得到了第k-1棵决策树之后,能否通过现有的样本和决策树的信息, 对第m颗树的建立产生有益的影响呢?在随机森林建立之后,采用的投票过程能否增加一定
2023-01-31

XGBoost机器学习模型的决策过程

本文为读者提供了一个简单有效理解 XGBoost 的方法。希望这些方法可以帮助你合理利用 XGBoost,让你的模型能够做出更好的推断。

机器学习

由于工作原因,机器学习相关核心文章无法发布,对机器学习感兴趣的,随时欢迎私聊我。人工智能(机器学习)学习之路推荐《机器学习实战》-机器学习基础《机器学习实战》-k近邻算法《机器学习实战》-决策树《机器学习实战》-线性回归《机器学习实战》-逻
2023-01-31

机器学习:无监督学习

文章目录 线性学习方法聚类ClusteringKmeansHAC 分布表示降维PCAMatrix FactorizationManifold LearningLLELaplacian Eigenmapst-SEN
2023-08-30

Python机器学习:6本机器学习书籍推

机器学习是实现人工智能的一种途径,它和数据开掘有一定的相似性,也是一门多领域交叉学科,触及概率论、核算学、逼近论、凸剖析、核算复杂性理论等多门学科。对比于数据开掘从大数据之间找互相特性而言,机器学习愈加注重算法的设计,让核算机可以白动地从数
2023-01-31

机器学习——KMeans

导入类库1 from sklearn.cluster import KMeans2 from sklearn.datasets import make_blobs3 import numpy as np4 import matplotlib
2023-01-30

Python迁移学习:机器学习算法

终有一天,人工智能会像我们看待非洲平原上低级生物的化石一样看待我们。在人工智能眼中,人类只是直立行走的猿猴,用着粗糙的语言和简陋的工具,从诞生起就注定会灭绝。

机器学习资源

推荐资源大部分来自《深度学习入门之 PyTorch》(廖星宇 编著)。Python 语言三个学习资源(1)《笨方法学 Python》(Learn Python the Hard Way)本书面向零基础的读者,通过一系列简单的例子快速入门 P
2023-01-31

机器学习模型

机器学习模型是一种计算机程序,可以从数据中学习模式并预测结果。它们有监督和无监督两种类型,通过训练和评估来学习和验证。机器学习模型广泛应用于图像识别、自然语言处理和预测分析等领域,提供自动化、准确性和可预测性等好处。然而,它们也面临数据需求、解释能力和偏差等挑战。未来趋势包括深度学习、边缘计算和自动机器学习。
机器学习模型
2024-04-02

机器学习简介

机器学习主要的理论基础涉及到概率论、数理统计、数值逼近、最优化理论、计算复 杂理论等,核心要素是数据、算法和模型。

JavaScript&机器学习

欢迎各位阅读本篇,Javascript是一avascript是一种由Netscape的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器终端语言,比如Perl,遗留的速度问题。当时服务端需要对数据进行验证,由于网络速度相当缓慢,只有28.8kbps,验证步骤浪费的时间太多。本篇文章讲述了JavaScript&机器学习,编程学习网教育平台提醒各位:本篇文章纯干货~因此大家一定要认真阅读本篇文章哦!
JavaScript&机器学习
2024-04-23

机器学习概述

文章目录 机器学习应用背景数据挖掘个性化定制替代人力的软件应用 什么是机器学习示例 机器学习系统举例IBM Watson DeepQAIBM Watson技术需求相关技术 -- DeepQA
2023-08-30

【数据科学系统学习】机器学习算法 #

本篇内容为《机器学习实战》第 6 章 支持向量机部分程序清单。所用代码为 python3。支持向量机优点:泛化错误率低,计算开销不大,结果易解释。 缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二分类问题。适用数据类型:
2023-01-31

学习!机器学习算法优缺点综述

本文介绍了机器学习的各种算法的优点和缺点,一起来看一下吧。

机器学习中的“学习”到底是个啥?

将机器学习视为一种编程范式,有助于我们更好地理解其核心价值和潜力。它不仅仅是一系列算法和技术的集合,更是一种全新的思考和解决问题的方式。这种思维方式的创新为解决复杂问题提供了新的可能性,并且正在不断推动科技和社会的进步。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录