机器学习常见知识点 3:Boosting集成学习技术和XGB、LGB

文章目录

      • 1、Boosting 的工作原理
        • 常见的 Boosting 算法
        • 优点和缺点
        • 如何进行加权投票
      • 2、XGB
        • 1. XGBoost中的梯度提升
        • 2. 目标函数
        • 3. 树的构建与优化
        • 4. 处理缺失值与特征重要性
      • 3、LGB
        • 核心特征
          • 1. 基于直方图的决策树学习
          • 2. 叶子优先策略
          • 3. 处理类别特征
          • 4. 缺失值处理
        • 工作原理
          • 数据预处理
          • 训练过程
          • 优化与效率
        • 应用场景
      • 4、LGB和XGB的区别
        • 1. 处理大数据的效率
        • 2. 内存使用
        • 3. 处理分类特征

1、Boosting 的工作原理

Boosting 是一种强大的集成学习技术,旨在提高多个弱学习器的性能,最终形成一个强大的模型。这种方法的核心思想是通过顺序地训练学习器,其中每个学习器都尝试纠正前一个学习器的错误。下面是 Boosting 的详细解释,包括其原理、常见算法、以及优缺点。

  • 总的来说,Boosting的过程是,顺序训练学习器,一开始样本权重相等,然后进行学习器训练,在训练一个学习器之后,这个学习器产生错误的样本会用来计算在所有学习器中的权重,也会用来更新下一个学习器的样本权重,总体上看错误率越高的学习器权重越小,并且错误样本权重会被更新变大(错误率也是通过权重加权得到)。(注意学习器的权重只跟自身错误率有关,当然这个计算公式是相同的,而样本权重是根所有样本有关的,因为要归一化。学习器的权重不需要归一化)
  • 最后每个学习器都有一个权重,在进行任务时,通过加权得到结果。

Boosting 包括以下步骤:

  1. 初始化

    • 在开始时,Boosting 算法对训练数据中的每个样本分配一个相等的权重。这意味着在第一轮中,每个样本在学习过程中具有相同的重要性。
  2. 顺序学习

    • 每一轮中,训练一个新的弱学习器。弱学习器通常是简单模型,比如决策树桩(一层决策树)。这些学习器特意设计为仅比随机猜测略好。
    • 每个学习器在训练过程中专注于前一个学习器错误分类的样本。这通常通过增加这些样本的权重来实现,这样在计算损失函数时,权重更大的样本对损失函数的贡献更多(加权损失)
  3. 错误评估和权重调整

    • 每个学习器的性能通过计算其错误率来评估,错误率是错误分类样本的权重和。
    • 根据学习器的错误率,更新样本权重:错误分类的样本权重增加,正确分类的样本权重减少。
  4. 学习器权重分配

    • 每个学习器根据其性能被赋予一个权重,通常这个权重与其错误率成反比。 误差低的学习器在最终决策中有更大的影响
  5. 组合所有学习器

    • Boosting 算法的最终预测是通过组合所有学习器的加权预测得到的。在分类问题中,这通常涉及到加权投票;在回归问题中,通常是加权平均
      • 分类问题,加权求出每个类别的权值,选最高的为最终分类。
      • 在组合所有学习器时,样本就没有权重了。样本权值在训练学习器,以及计算学习器权重时有效。
常见的 Boosting 算法
  1. AdaBoost (Adaptive Boosting)

    • AdaBoost 是最早的也是最著名的 Boosting 算法之一。它通过调整关注被先前学习器错误分类的样本来增强模型。
  2. Gradient Boosting

    • Gradient Boosting 不直接操作数据权重,而是通过优化一个损失函数来减少前一个模型的预测误差。它通过逐步添加新的学习器,专注于当前模型的残差。
  3. XGBoost (Extreme Gradient Boosting)

    • XGBoost 是 Gradient Boosting 的一种高效实现,支持多线程并行处理,并提供了正则化来防止过拟合。
  4. LightGBM

    • LightGBM 是微软开发的基于梯度提升的库,专门优化了大规模数据,提高了训练速度和效率。
优点和缺点

优点

  • 高精度:Boosting 方法通常能提供非常高的准确率。
  • 灵活性:可以与任何类型的学习器结合使用。
  • 自动特征选择:Boosting 过程中加大了错误分类样本的权重,有助于模型聚焦于

难分类的样本。

缺点

  • 计算成本:Boosting 需要顺序训练学习器,这可能导致训练过程比 Bagging 类方法更长。
  • 过拟合风险:尽管 Boosting 通常对过拟合有一定的抵抗力,但如果数据噪声较大,过拟合的风险依然存在。

在Boosting算法中,加权投票是一个关键的机制,用于将多个弱学习器的预测结果合成一个最终的预测。这种方法在分类问题中特别重要,因为它决定了如何根据每个学习器的表现来加权它们的投票。

如何进行加权投票
  1. 确定每个学习器的权重

    • 在Boosting算法中,通常根据每个学习器的错误率 ϵ \epsilon ϵ 来计算其权重 α \alpha α。权重的计算公式常见的形式是:
      α t = 1 2 log ⁡ ( 1 − ϵ t ϵ t ) \alpha_t = \frac{1}{2} \log\left(\frac{1 - \epsilon_t}{\epsilon_t}\right) αt=21log(ϵt1ϵt)
    • 这里 α t \alpha_t αt 是第 t t t 个学习器的权重, ϵ t \epsilon_t ϵt是其错误率。这个权重反映了学习器的准确性,错误率低的学习器获得更高的权重。
  2. 收集每个学习器的预测

    • 对于给定的输入样本,每个学习器都会给出一个预测结果。在二分类问题中,这个结果通常是类标签 + 1 +1 +1 − 1 -1 1
  3. 计算加权投票的总和

    • 对于每个类别,计算所有学习器预测该类别的加权总和。公式可以表示为:
      Score ( c ) = ∑ t = 1 T α t [ y t ( x ) = c ] \text{Score}(c) = \sum_{t=1}^T \alpha_t [y_t(x) = c] Score(c)=t=1Tαt[yt(x)=c]
    • 这里 y t ( x ) y_t(x) yt(x) 是第 t t t 个学习器对样本 x x x 的预测, [ y t ( x ) = c ] [y_t(x) = c] [yt(x)=c] 是一个指示函数,当 y t ( x ) y_t(x) yt(x) 预测为类别 c c c 时值为1,否则为0。
  4. 选择最终预测

    • 最终的类别预测是基于最高的加权投票得分来确定的。即:
      y ^ ( x ) = arg ⁡ max ⁡ c Score ( c ) \hat{y}(x) = \arg \max_c \text{Score}(c) y^(x)=argcmaxScore(c)
    • 这意味着每个样本的类别是由加权投票得分最高的类别确定的。

2、XGB

XGBoost(eXtreme Gradient Boosting)是基于梯度提升算法(Gradient Boosting Machine, GBM)的高效实现,它是一种使用Boosting集成学习技术的工具,旨在解决大规模和高维数据的监督学习问题。XGBoost通过优化传统梯度提升算法,在速度和模型性能方面都有显著提升。以下是使用Boosting集成学习框架详细解释XGBoost的工作原理:

1. XGBoost中的梯度提升

XGBoost 实现了梯度提升的算法框架,具体步骤如下:

  • 初始化:以一个基函数开始,通常是一个常数预测值,如数据的平均值。
  • 迭代构建树:在每次迭代中,添加一个新的决策树,专注于修正前一轮留下的残差,实际上就是调整数据权重。(即前一模型预测的误差)。

梯度提升的定义:
梯度提升是一种集成学习技术,它通过逐步添加新模型来改进整体模型的准确性,每个新模型都尝试纠正前一个模型的残差(错误)。在梯度提升中,"提升"指的是这种逐步改进的过程,而 "梯度"是因为每一步的改进方向由损失函数的梯度决定,即模型在当前步骤中对输出误差最敏感的方向。

2. 目标函数

XGBoost 的目标函数包括两部分:一是传统的损失函数(如均方误差或对数损失),用于度量模型预测和实际值之间的差异;二是正则化项,用于控制模型的复杂性,防止过拟合。公式表示为:
Obj ( Θ ) = ∑ i = 1 n l ( y i , y ^ i ) + ∑ k Ω ( f k ) \text{Obj}(\Theta) = \sum_{i=1}^n l(y_i, \hat{y}_i) + \sum_{k} \Omega(f_k) Obj(Θ)=i=1nl(yi,y^i)+kΩ(fk)
其中, l l l 是损失函数, Ω \Omega Ω 是正则化项, f k f_k fk 是第 k k k棵树。

3. 树的构建与优化
  • 基于直方图的分割XGBoost 使用一种称为直方图优化的方法来查找最佳分割点,这种方法将连续特征的值离散化到直方图的bin中,显著减少了计算量。(最初采用的是预排序,注意这是决策树分割的策略!)
  • 剪枝:在树的构建过程中,XGBoost 先生长到最大深度(层优先),然后自上而下剪枝,去除不增加模型性能的分枝。
  • 并行处理:虽然树的生长本身是顺序的,但XGBoost 在构建树的某些部分,如特征的分割点计算上可以实现并行。
4. 处理缺失值与特征重要性
  • 缺失值处理:XGBoost 可以自动学习缺失值的处理策略,为每个节点分配一个默认的方向(左或右),以优化模型性能。
  • 特征重要性:XGBoost 通过计算每个特征在模型中的贡献度(如增益),提供了特征重要性的评估,有助于特征选择和模型解释。

3、LGB

LightGBM(Light Gradient Boosting Machine)是由微软开发的一种高效的梯度提升框架。它被设计为在保持高精度的同时,提高训练速度和效率,特别适合处理大规模数据。LightGBM 使用基于直方图的决策树算法和一系列高级技术,如叶子优先的生长策略、直接支持类别特征的处理等,从而显著提升了性能。

核心特征
1. 基于直方图的决策树学习

LightGBM 使用基于直方图的方法来减少内存使用量并加速计算过程。在此方法中,连续的特征值被分桶(或离散化)到固定数量的离散bins中。这样,算法只需计算每个bin的边界上的最佳分割点,而不是在每个唯一的特征值上计算,大幅减少了计算量。

2. 叶子优先策略

与传统的按层(Level-wise)生长策略不同,LightGBM实现了叶子优先(Leaf-wise)的生长策略。这种策略会选择增益最大的叶子进行分裂,即使这会导致更深的树。虽然叶子优先可能导致过拟合,但在大数据集上,这种策略可以更快地减少误差,提高模型的整体性能。

3. 处理类别特征

LightGBM 可以直接处理类别特征而无需进行独热编码。它使用特殊的算法来找到最优的分割点,这在处理具有大量类别的特征时非常有效。

4. 缺失值处理

LightGBM 可以自动处理缺失值。在模型训练过程中,LightGBM 会自动学习如何最好地处理缺失值,无需进行预处理。

工作原理
数据预处理

LightGBM 在构建直方图之前将连续的特征值离散化成bins,并对每个特征的数据进行排序存储,准备好用于快速分割。

训练过程
  • 直方图合并:在每次迭代中,通过合并已存在的直方图(来自之前的树)来构建新树,这样可以减少重复的数据排序和bin计数的需要。
  • 直方图分割:使用直方图来找到最佳的特征分割点。这涉及到比较不同分割点的信息增益,并选择最佳的进行节点分割。
  • 树生长:根据叶子优先策略生长树,每次都优先分割那些使得模型损失最大程度减少的叶子节点。
优化与效率
  • 并行学习:虽然树的构建本质上是顺序的,但LightGBM 在构建直方图和寻找最优分割点等方面实现了并行计算,提高了效率。
  • 网络通信优化:在分布式学习中,LightGBM 优化了网络通信,以减少在多台机器上训练时的数据传输延迟。
应用场景

由于其高效性和灵活性,LightGBM 被广泛应用于各种机器学习任务中,包括但不限于分类、回归、排序等。在处理大规模数据集、需要快

速训练和预测、以及高维数据场景下表现尤为出色。

4、LGB和XGB的区别

XGBoost(eXtreme Gradient Boosting)和LightGBM(Light Gradient Boosting Machine)都是流行的梯度提升框架,它们在许多机器学习任务中表现出色。尽管两者都基于相似的原理—构建决策树以优化损失函数—但它们在实现细节和性能优化上存在一些关键的区别。以下是XGBoost和LightGBM之间的一些主要区别:

1. 处理大数据的效率
  • LightGBM

    • LightGBM 使用基于直方图的决策树算法,这种方法在处理大规模数据时更加高效。直方图优化方法减少了内存使用量,并且能够加快训练速度。
    • 它还采用了带深度限制的 Leaf-wise(叶子优先)的生长策略,相比于 XGBoost 的 Level-wise(层次优先)策略,Leaf-wise 在处理大规模数据集时可以减少更多的损失,但也可能导致过拟合(尤其是在数据量较小的情况下)。
  • XGBoost

    • XGBoost 通常使用预排序方法(虽然也可以使用直方图方法),在处理非常大的数据集时可能会比 LightGBM 慢。
    • 它采用的是Level-wise 生长策略,这种策略相对更稳健,可以有效控制过拟合,适合大多数情况,特别是当数据集大小适中或小规模时。
2. 内存使用
  • LightGBM

    • 由于直方图的优化方法,LightGBM 在内存使用上通常比 XGBoost 更高效
  • XGBoost

    • XGBoost 在使用预排序算法时,可能需要更多内存,这是因为它在训练前对数据进行排序并存储排序后的结果。
3. 处理分类特征
  • LightGBM

    • LightGBM 为处理高基数的分类特征提供了原生支持它不需要对分类特征进行独热编码,直接支持使用分类特征可以提高效率和准确率。
  • XGBoost

    • XGBoost 对分类特征没有原生支持,通常需要先将分类特征转换为数值型(如通过独热编码),这可能导致维度增加并影响模型的性能和速度。

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

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

相关文章

镜像发布至dockerHub

1、login 没有账号的话去注册一个 https://hub.docker.com docker login 输入账号密码和账号2、修改镜像名格式 可以直接招我的修改 格式为你的 hub名/镜像名 3、推送

svm和决策树基本知识以及模型评价以及模型保存

svm和决策树基本知识以及模型评价以及模型保存 文章目录 一、SVM1.1,常用属性函数 二、决策树2.1,常用属性函数2.2,决策树可视化2.3,决策树解释 3,模型评价3.1,方面一(评价指标)3.2&…

DockerHub 镜像加速

Docker Hub 作为目前全球最大的容器镜像仓库,为开发者提供了丰富的资源。Docker Hub 是目前最大的容器镜像社区,DokcerHub的不能使用,导致在docker下pull镜像无法下载,安装kubernetes镜像也受到影响,下面请看解决方式。 1.加速原理 Docker下载加速的原理…

Android基于MediaBroswerService的App实现概述

mSession.setPlaybackState(mStateBuilder.build()); // 5. 关联 SessionToken setSessionToken(mSession.getSessionToken()); } } 根据包名做权限判断之后,返回根路径 Override public BrowserRoot onGetRoot(String clientPackageName, int clientUid, Bundl…

如何生成protobuf文件

背景 protobuf是一种用于序列化结构数据的工具,实现数据的存储与交换,与编程语言和开发平台无关。 序列化:将结构数据或者对象转换成能够用于存储和传输的格式。 反序列化:在其他的计算环境中,将序列化后的数据还原为…

FreeBSD通过CBSD管理低资源容器jail 网络NAT配置

jail容器里的系统有时候并不需要公开的地址,所以给它们配置内网地址即可。但是这些系统一般都有上网的需求,这时候可以使用nat进行解决。 CBSD可以配置NAT规则,只需要命令cbsd natcfg,配置好后cbsd naton启动即可: % …

Vue3.4新增的defineModel的使用

define-model的作用 在3.3及之前的版本,父子组件之间的通讯,一直都是靠props(父传子)和emit(子传父)来实现。而define-model整合了这两种方法,只需要在父组件中定义define-model的方法&#xf…

Spring容器中的Bean作用域

在Spring框架中,开发者确实主要关注两件事:开发Bean和配置Bean。Spring容器负责根据配置文件或注解来创建Bean实例,并通过依赖注入(DI)来管理Bean之间的依赖关系,这体现了控制反转(IoC&#xff…

GIT回滚

1. 使用 git revert git revert 命令会创建一个新的提交,这个提交会撤销指定提交的更改。这通常用于公共分支(如 main 或 master),因为它不会重写历史。 git revert HEAD # 撤销最近的提交 # 或者指定一个特定的提交哈希值 …

实际中应对网络丢包故障的方法

1.网络数据包发送时通时断,丢包严重 故障现象:通常故障发生时,该方向网络出现震荡性中断。使用Ping命令测试,发现在一段时间内数据包发送延时比正常值略高,间隔一小段时间数据包又全部丢失,丢包率超过60%&a…

Net开源项目推荐-WPF控件样式篇

Net开源项目推荐-WPF控件样式篇 HandyControlWPFDeveloperswpf-uidesignLive-ChartsAvalonDock HandyControl WPF控件库,比较常用的WPF开源控件库,对WPF原有控件样式都进行了重写和扩展,也增加了许多特别的控件,非常好用 github仓库&#x…

Day14—基于Langchain-chatchat搭建本地智能

一、基于Langchain-chatchat搭建本地智能 知识问答系统 1、项目介绍 基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现,开一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知…

贪心+动归1

​​​​​​​​​​​​​​跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则&#xff0…

Claude3.5:编码螃蟹游戏就是这么轻松

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)则…

【错误记录】Android 应用漏洞修复处理 ( 动态反调试漏洞 | 调用 Debug.isDebuggerConnected 函数查询是否被动态调试 )

文章目录 一、动态调试攻击二、Frida、Xposed 动态调试攻击应对措施三、调用 Debug.isDebuggerConnected 函数查询是否被动态调试 一、动态调试攻击 针对 Android 应用 进行 动态调试攻击 , 攻击者利用 Frida、Xposed 等调试工具 , 对 Android 应用进行 运行时 分析和修改 , 从…

UbuntuServer 22.04.4安装Docker

文章目录 一、docker安装二、docker基本命令用法三、docker命令示范 一、docker安装 1.sudo apt update ---更新软件包索引 2.sudo apt install ca-certificates curl gnupg lsb-release ---允许APT使用HTTPS 3.curl -fsSL https://download.docker.com/linux/ubuntu/gpg | su…

爱眼小妙招:台灯怎么选?学生如何正确使用台灯?

视力是心灵的窗户,尤其对于儿童来说更为重要。然而,随着现代生活方式的改变,孩子们面临越来越多的视力挑战。据统计,在近视学生中,近10%的人患有高度近视,而这一比例随年级的增加而逐渐上升。从幼儿园的小小…

【备忘录】配置 Docker 守护程序以使用代理服务器

配置/etc/docker/daemon.json Docker 守护程序在其启动环境中使用以下环境变量来配置 HTTP 或 HTTPS 代理行为: HTTP_PROXYhttp_proxyHTTPS_PROXYhttps_proxyNO_PROXYno_proxy 在 Docker Engine 23.0 及更高版本中,您还可以在/etc/docker/daemon.json…

电子杂志制作工具推荐:让你轻松成为编辑大人

在这个数字化的时代,电子杂志已经成为信息传播的重要载体。它不仅能够满足人们对阅读的需求,还能够提供更加丰富、互动的阅读体验。因此,掌握一款好用的电子杂志制作工具,已经成为每个编辑大人的必备技能。接下来告诉大家一个超简…

设置浏览器互不干扰

目录 一、查看浏览器文件路径 二、 其他盘新建文件夹Cache 三、以管理员运行CMD 四、执行命令 一、查看浏览器文件路径 chrome://version/ 二、 其他盘新建文件夹Cache D:\chrome\Cache 三、以管理员运行CMD 四、执行命令 Mklink /d "C:\Users\Lenovo\AppData\Loca…