机器学习——XGboost模型

2023-05-16

相关文章链接

 

        机器学习——人工神经网络(NN)

        机器学习——卷积神经网络(CNN)

        机器学习——循环神经网络(RNN)

        机器学习——长短期记忆(LSTM)

        机器学习——决策树(decision tree)

        机器学习——随机森林(Random forest)

        机器学习——梯度提升决策树(GBDT)

一、XGBoost概述:

XGBoost:在训练出一棵树的基础上再训练下一棵树预测它与真是分布间的差距。通过不断训练用来弥补差距的树,最终用树的组合实现对真是分布的模拟。XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted。

XGBoost与GBDT比较大的区别就是目标函数的定义。XGboost的目标函数包括损失函数正则项两部分。

  1. 损失函数:代表模型拟合数据的程度。通常用其一阶导数指出梯度下降的方向,XGboost还计算了它的二阶导数,进一步考虑了梯度的变化趋势,拟合更快,精度更高。
  2. 正则项:用来控制模型的复杂程度。叶子结点越多,模型越大,不仅运算时间长,超过一定限度后还会过拟合,导致分类效果的下降。XGboost的正则项是一个惩罚机制,叶子结点的数量越多,惩罚力度越大,从而限制他们的数量。

XGboost的目标函数:

 其中:

  1. 红色箭头所指向的L 即为损失函数(比如平方损失函数:
  2. 红色方框所框起来的是正则项(包括L1正则、L2正则)
  3. 红色圆圈所圈起来的为常数项
  4. 对于f(x),XGBoost利用泰勒展开三项,做一个近似。f(x)表示的是其中一颗回归树。

二、XGBoost核心思想

XGBoost的核心算法思想是:

  1. 不断的添加树,不断地进行特征分裂来生长一棵树,每次添加一棵树,其实是学习一个新函数f(x),去拟合上次预测的残差。
  2. 当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数。
  3. 最后只需要将每棵树对应的分数加起来就是该样本的预测值。

目标是要使得树群的预测值yi’尽量接近真实值yi,而且有尽量大的泛化能力。XGBoost也是需要将多棵树的得分累加得到最终的预测得分(每一次迭代,都在现有树的基础上,增加一棵树去拟合前面树的预测结果与真实值之间的残差)。

其中选取一个f来使我们的目标函数尽量最大地降低。这里f可以使用泰勒展开公式近似。

数学原理外XGBoost最大的改进是大幅提升了计算速度。数的构建中最耗时的部分是为确定最佳分裂点而进行的特征值排序。XGBoost在训练前会将特征值进行排序,存储为Block结构,此后重复使用这些结构,从而减少计算量。

三、树的生长与停止

树的生长:

XGBoost作者在其原始论文中给出了一种分裂节点的方法:枚举所有不同树结构的贪心法。不断的枚举不同树的结构,然后利用打分函数来寻找出一个最优结构的树,接着加入到模型中,不断重复这样的操作。寻找的过程使用的就是贪心算法。选择一个feature分裂,计算loss function最小值,然后再选一个feature分裂,又得到一个loss function最小值,枚举完,找到一个效果最好的,把树给分裂,就得到了小树苗。

XGBoost使用了和CART回归树一样的想法,利用贪心算法,遍历所有特征的所有特征划分点,不同的是使用的目标函数不一样。具体做法就是分裂后的目标函数值比单叶子节点的目标函数的增益,同时为了限制树的生长过深,还加了个阀值,只有当增益大于该阀值才进行分裂。从而继续分裂,形成一棵树,再形成一棵树,每次在上一次的预测基础上取最优进一步分裂/建树。

停止树的生长

设置树的最大深度,当样本权重和小于设定阀值时会停止生长防止过拟合。

  1. 当引入的分裂带来的增益小于设定阀值的时候,我们可以忽略掉这个分裂,所以并不是每一次分裂loss function整体都会增加的;
  2. 当树达到最大深度时则停止建立决策树,设置一个超参数max_depth,避免树太深导致学习局部样本,从而过拟合;
  3. 样本权重和小于设定阀值时则停止建树。

四、XGBoost的优缺点

优点:

  1. 善于捕捉复杂数据之间的依赖关系。
  2. 能从大规模数据集中获取有效模型。
  3. 在实用性上支持多种系统和语言。

缺点:

在高纬稀疏特征数据集和小规模数据集上的表现不是很好。

XGBoost和GBDT的不同:

  1. GBDT是机器学习算法,XGBoost是该算法的工程实现。
  2. 在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
  3. GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
  4. 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
  5. 传统的GBDT在每轮迭代时使用全部的数据,XGBoost采用了与随机森林相似的策略,支持对数据进行采样。
  6. 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习——XGboost模型 的相关文章

  • 时间序列预测——Prophet模型

    文章链接 xff1a 时间序列预测 ARIMA模型 https blog csdn net beiye article details 123317316 spm 61 1001 2014 3001 5502 1 Propht模型概述 Pr
  • 机器人导航——路径跟踪

    要完成一套完整的机器人路径规划 xff0c 并完成其物理实验并非一件简单的事情 参考 xff1a http wenku baidu com link url 61 n11mP6EDlM78NZYZ4yQYXzmzPeBV6BeLNOUjIv

随机推荐

  • python 读取txt出现\xef\xbb\xbf…的问题

    用python读取txt文件 xff0c 文件的内容是一列数如下 xff1a 1883 1886 1900 1900 1897 1897 1897 1897 1906 1917 1910 1910 但是读取的时候第一个元素为 xef xbb
  • (算法)判断两个区间是否重叠

    题目 xff1a 判断两个区间是否重叠 思路 xff1a 假设区间表示为 start end xff0c 先存在两个区间A B 两个区间的关系有两种 xff1a 重叠与不重叠 重叠的情况有4种 xff0c 两种相交 xff0c 两种包含 x
  • python ctrl+c 退出while True:

    写了一个死循环 xff0c 类似 xff1a def function while True my code 程序运行后想用ctrl 43 c按键停止程序 xff0c 可是终止不了 以下为解决办法 xff1a 第一步 xff1a 加入sys
  • python二维字典

    感谢原文 xff1a http www jb51 net article 83108 htm 本文实例讲述了Python的 二维 字典 two dimension dictionary 定义与实现方法 分享给大家供大家参考 xff0c 具体
  • ros安装出现依赖问题

    http www liuxiao org 2015 10 ros E5 9C A8 ubuntu 14 04 E7 B3 BB E7 BB 9F E4 B8 8A E5 AE 89 E8 A3 85 ros indigo 0 安装环境 xf
  • KMP算法介绍

    参考 xff1a https www cnblogs com c cloud p 3224788 html 前言 之前对kmp算法虽然了解它的原理 xff0c 即求出P0 Pi的最大相同前后缀长度k xff1b 但是问题在于如何求出这个最大
  • 【python】*与** 参数问题

    原文地址 xff1a https www cnblogs com paulwinflo p 5764748 html 可变参数 在Python函数中 xff0c 还可以定义可变参数 顾名思义 xff0c 可变参数就是传入的参数个数是可变的
  • 计算机网络编程知识总结

    博客出处 xff1a http www cnblogs com maybe2030 阅读目录 1 网络层次划分 2 OSI七层网络模型 3 IP地址 4 子网掩码及网络划分 5 ARP RARP协议 6 路由选择协议 7 TCP IP协议
  • 机器学习——决策树(decision tree)

    相关文章链接 xff1a 机器学习 人工神经网络 xff08 NN xff09 机器学习 卷积神经网络 xff08 CNN xff09 机器学习 循环神经网络 xff08 RNN xff09 机器学习 长短期记忆 xff08 LSTM xf
  • 基于UDP的Winsock编程(C++版)

    基于UDP的Winsock编程与基于TCP的Winsock编程相比 xff0c 只是缺少了一个步骤而已 对于Server xff0c 缺少了接受连接的过程 xff08 accept 函数调用 xff09 xff1b 对于Client xff
  • Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven re

    Using insecure protocols with repositories without explicit opt in is unsupported Switch Maven repository maven4 http ma
  • 解析APK的AndroidManifest.xml

    将apk重命名zip解压后获取的AndroidManifest xml是加密后的 xff0c 如果需要看到里边的具体的内容信息 xff0c 需要使用AXMLPrinter2 jar来进行 1 网上下载工具AXMLPrinter2 jar工具
  • unity Symbolicate Android crash

    参考链接 https support unity com hc en us articles 115000292166 Symbolicate Android crash https docs unity3d com Packages co
  • 【无标题】

    Starting a Gradle Daemon 1 incompatible Daemon could not be reused use status for details Configure project launcher WAR
  • unity里生成的.csproj和.sln :assembly definition

    有一段时间一直没明白为啥有的时候第三方的package里的代码没法引用我们项目的 最近有点心得 记录下 在创建unity项目的时候默认是创建一个解决方案就是以 sln为结尾的 默认开发时都在同一个解决项目里 所以不会出现相互引用不到的问题
  • Jenkins 报错: command not found

    主要是路径问题 xff0c Jenkins无法识别 在一台 macOS 的 anget 中 xff0c 我们的 pipeline 脚本一直报错 xff1a cmake command not found xff0c 但实际系统中已经通过 b
  • java.lang.AssertionError: annotationType(): unrecognized Attribute name MODULE (class com.sun.tools.

    改成 30 就好了
  • UnityEngine.JsonUtility.FromJson 一直序列化失败坑多多

    今天写了个小工具 xff0c 偷懒就使用json数据存储 xff0c 结果一直转换失败 xff0c 查了半响 xff0c 原来是忘了加 Serializable xff0c 感觉好坑 xff0c 如果是本身数据类型是没有问题的 xff0c
  • STM32单片机ESP8266发送数据到WiFi接收端代码实现

    ESP8266支持的一些指令看我另一篇博文 xff1a http blog csdn net qq 17242837 article details 53931712 首先需要配置STM32的串口发送和接收 xff0c 在本文中基于原子和网
  • 机器学习——XGboost模型

    相关文章链接 机器学习 人工神经网络 xff08 NN xff09 机器学习 卷积神经网络 xff08 CNN xff09 机器学习 循环神经网络 xff08 RNN xff09 机器学习 长短期记忆 xff08 LSTM xff09 机器