XGBoost的原理、工程实现与优缺点

news2024/11/14 20:23:49

Xgboost简介

XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted。XGBoost是一个优化的分布式梯度增强库,旨在实现高效,灵活和便携。 它在Gradient Boosting框架下实现机器学习算法。 XGBoost提供了并行树提升(也称为GBDT,GBM),可以快速准确地解决许多数据科学问题。在数据科学方面,有大量的Kaggle选手选用XGBoost进行数据挖掘比赛,是各大数据科学比赛的必杀武器;在工业界大规模数据方面,XGBoost的分布式版本有广泛的可移植性,支持在Kubernetes、Hadoop、SGE、MPI、 Dask等各个分布式环境上运行,使得它可以很好地解决工业界大规模数据的问题。XGBoost利用了核外计算并且能够使数据科学家在一个主机上处理数亿的样本数据。最终,将这些技术进行结合来做一个端到端的系统以最少的集群系统来扩展到更大的数据集上。Xgboost以CART决策树为子模型,通过Gradient Tree Boosting实现多棵CART树的集成学习,得到最终模型

Xgboost原理

从目标函数生成一颗树

XGBoost和GBDT两者都是boosting方法,boosting方法实际采用加法模型,(基函数线性组合)与前向分布算法,XGBoost与GBDT除了工程上的实现,解决问题上的一些差异外,最大的不同都是目标函数的定义,因此,我们从目标函数开始研究Xgboost的基本原理:

学习第t棵树

XGBoost由K个基模型组成的一个加法模型,假设我们第 t t t次迭代要训练的树模型是 f t ( x ) f_t(x) ft(x),则有:L
**加粗样式**在这里插入图片描述

Xgboost的目标函数

损失函数可有预测值 y i ^ \hat{y_i} yi^与真实值 y i y_i yi进行比较:
在这里插入图片描述
其中 n n n为样本数量。
模型的预测精度有模型的偏差和方差共同决定。损失函数代表了模型的偏差,想要方差小则需要在目标函数中添加正则项,用于防止过拟合。
所以,目标函数由模型的损失函数 L L L与抑制模型复杂度的 Ω Ω Ω组成,目标函数定义如下:
在这里插入图片描述
其中 ∑ i = 1 t Ω ( f i ) \sum^t_{i = 1}Ω(f_i) i=1tΩ(fi)是将全部 t t t棵树的复杂度进行求和。添加到目标函数作为正则项,用于防止模型过拟合。
由于xgboost是boosting方法,实际上采用了加法模型和前方分布算法,以第 t t t个模型为例,模型对第 i i i个样本的 x i x_i xi的预测值为:
在这里插入图片描述
其中 y i t − 1 ^ \hat{y^{t - 1}_i} yit1^ t − 1 t - 1 t1个模型给出的预测值,是已知常数, f t ( x i ) f_t(x_i) ft(xi)是第 t t t个模型的预测值,此时,目标函数写成:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

泰勒公式展开

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

定义一颗树

我们清楚XGBoost基模型不仅支持决策树,还支持线性模型,本章主要介绍基于决策树的目标函数,我们可以重新定义一颗决策树,其包含两个部分:

叶子节点归组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

贪心算法

从树的深度为0开始:

  • 对每个叶结点枚举所有可用特征。
  • 针对每个特征,把属于该结点的训练样本根据该特征值进行升序排列,通过线性扫描的方法来决定该特征的最佳分裂点,并记录该特征的分裂收益
  • 选择受益最大的特征作为分裂特征**,用改特征的最佳分裂点作为分裂位置**。在改结点上分类出左右两个新结点,并为每个新结点关联对应的样本集
  • 回到第一步,递归执行直到满足特定条件为止。
    在这里插入图片描述

总结

  • 慢慢的将各种的算法全部搞定,先根据项目进行学习Xgboost算法,后续在继续深入研究其他的 算法。

  • 后续其他算法,以后再开始学习,都行啦的样子与打算,慢慢的将各种算法都搞定,全部都研究透彻。

  • 先大致了解,后续再根据项目深入研究。

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

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

相关文章

C++普通类,派生类,虚基类的成员构造顺序以及构造函数调用顺序详解

目录前言普通类构造析构顺序解析依赖关系产生的错误派生类构造析构顺序解析扩展菱形多继承场景含虚基类的派生类构造析构顺序解析扩展菱形多继承场景(引入虚继承)前言 C规定“对象的析构过程必须与其构造过程相反”这一语法规则。 因此我们研究透彻了构造过程,那么…

宕机了,Redis如何避免数据丢失?

今天是大年初一,祝大家新年快乐,新的一年技术增进,工资翻倍。 目前,Redis的持久化主要有两大机制,即AOF日志和RDB快照,在接下来的两节课里,我们就分别学习一下吧。 AOF日志是如何实现的&#…

结构型模式-装饰器模式

1.概述 快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。 使用继承的方式存在的问题: 扩展性不好 如果要再加…

Alibaba微服务组件Sentinel学习笔记

1 .Sentinel 是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以 流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的…

一篇读懂图神经网络

来源:投稿 作者:张宇 编辑:学姐 近年来,作为一项新兴的图数据学习技术,图神经网络(GNN)受到了非常广泛的关注,在各大顶级学术会议上,图神经网络相关的论文也占了相当可观…

https://app.diagrams.net/在线画图的一些技巧

最近工作需要,实践了在线画图的case, 下面就把使用心得记录一下: 关于diagrams 的一些小技巧: 登入的网页是:Flowchart Maker & Online Diagram Software 1: 利用group 的选项,这个可以整体移动,不用担心会漏掉一个: 就是选中一个图标,然后,看右边arrange 下面…

20230123使AIO-3568J开发板在Android12下永不休眠

20230123使AIO-3568J开发板在Android12下永不休眠 2023/1/23 13:59 1、 Z:\android12-rk3568-new\device\rockchip\common\device.mk # Bluetooth HAL PRODUCT_PACKAGES \ libbt-vendor \ android.hardware.bluetooth1.0-impl \ android.hardware.bluetooth1.0-se…

Hadoop基础之《(1)—大数据基本概念》

一、Hadoop 1、Hadoop大数据框架,处理分布式环境下数据存储和计算 2、Hadoop的HDFS处理存储 3、Hadoop的MapReduce处理计算 map让任务数据拆分到每一台去执行 reduce处理后的任务合并 4、Hive作用是在Hadoop上能够让用户来写SQL处理数据 Hive的执行引擎,…

深度学习TensorFlow—GPU2.4.0版环境配置,一文简单易懂详细大全,CUDA11.0、cuDNN8.0

深度学习TensorFlow—GPU2.4.0版环境配置,一文简单易懂详细大全,CUDA11.0、cuDNN8.0 前提:电脑拥有英伟达独立显卡!!!,并且安装了anaconda!!! 前提:电脑拥有英伟达独立显卡!!!&…

vue事件车之兄弟组件之间传值

目录前言一,全局事件总线介绍1.1 原理介绍1.2 x需要满足的条件二,知识点的复习2.1 vc是什么2.2 vm管理vc如何体现2.3 原型2.4 上述知识的串联三,实现需求3.1 x的编写及讲解3.2 使用x四,标准写法4.1 写法改动4.2 销毁五 关键代码后…

兔年首文迎新春-Cesium橘子洲烟花礼赞

兔年新春今天是兔年大年初二,神州大地,在经历了疫情的三年后迎来开放的一个春节。大家都沉浸在欢乐幸福的春节气氛中。玉兔迎新春,祝福齐送到:白兔祝你身体安康,黑兔祝你薪水高涨,灰兔送你梦想如意&#xf…

Maven高级

Maven高级 1,分模块开发 1.1 分模块开发设计 (1)按照功能拆分 我们现在的项目都是在一个模块中,比如前面的SSM整合开发。虽然这样做功能也都实现了,但是也存在了一些问题,我们拿银行的项目为例来聊聊这个事。 网络没有那么发…

Java多线程03——等待唤醒机制(and阻塞队列实现)

目录1.等待唤醒机制1.ThreadDemo2.Desk3.Cook4.Foodie2.等待唤醒机制(阻塞队列方式实现)1.ThreadDemo022.Cook023.Foodie023.线程的状态1.等待唤醒机制 生产者和消费者 桌子上有食物,消费者吃,桌子上没有食物,消费者等…

ElasticSearch 索引模板 组件模板 组合模板详细使用介绍

索引模板_template 文章目录索引模板_templateTemplate 介绍索引模板Index Template参数说明创建一个索引模板 Index Template测试不存在的索引直接添加数据创建索引总结组合索引模板 Index Template 7.8版本之后引入创建基于组件模板的索引模板 Index Template创建组件模板模拟…

LeetCode103_ 103. 二叉树的锯齿形层序遍历

LeetCode103_ 103. 二叉树的锯齿形层序遍历 一、描述 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1&…

【头歌】顺序表的基本操作

第1关:顺序表的插入操作任务描述本关任务:编写顺序表的初始化、插入、遍历三个基本操作函数。相关知识顺序表的存储结构顺序表的存储结构可以借助于高级程序设计语言中的数组来表示,一维数组的下标与元素在线性表中的序号相对应。线性表的顺序…

YOLOv5/v7 引入 YOLOv8 的 C2f 模块

YOLOv8 项目地址:https://github.com/ultralytics/ultralytics YOLOv8 Ultralytics YOLOv8 是由 Ultralytics 开发的一个前沿的 SOTA 模型。它在以前成功的 YOLO 版本基础上,引入了新的功能和改进,进一步提升了其性能和灵活性。YOLOv8 基于快…

C 指针变量 取地址符的用法 *指针变量名的用法

文章目录IntroCode图示Intro C语言中有一类特殊的变量:指针变量(pointer variable),用于存储某个变量的内存地址的值。 要打印指针变量一般用%p格式符,会打印出该指针变量的值,即一个内存值。 Code // Created by wuyujin1997 …

【Linux】进程概念一

进程概念一 冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。 截止目前为止, 我们所认识的计算机,都是一个个的硬件组成 输入设备:包括键盘&#x…

如何使用JDBC操作数据库?JDBC API的使用详细解读

文章目录1. DriverManager1.1 注册驱动1.2 获取连接2. Connection2.1 获取执行sql的对象2.2 事务管理3. Statement4. ResultSet5. PreparedStatement5.1 sql注入问题5.2 preparedStatement 原理6. 总结Java编程基础教程系列1. DriverManager DriverManager ,驱动管…