集成学习——Boosting算法:Adaboost、GBDT、XGBOOST和lightGBM的简要原理和区别

news/2024/5/20 18:30:04/文章来源:https://blog.csdn.net/gjinc/article/details/131921374

1、Boosting算法

在这里插入图片描述

Boosting算法是通过串联的方式,将一组弱学习器提升为强学习器算法。它的工作机制如下:
(1)用初始训练集训练出一个基学习器;
(2)依据基学习器的表现对训练样本分布进行调整,使得之前做错的训练样本在之后中得到最大的关注;
(3)用调整后的样本分布进行下一个基学习器;
(4)重复2-3的步骤,直到基学习器的数量达到了指定的T值后
(5)将T个基学习器进行加权组合得到集成的学习器。
而根据策略不同,会有Adaboost和GBDT、XGBoost三种常见的Boosting算法。

2、Adaboost算法

Adaboost强调Adaptive(自适应),通过不断修改样本权重(增大分错样本权重,降低分对样本权重),不断加入弱分类器进行boosting。它的核心步骤为以下两个:
权值调整:提高上一轮错误分类的样本权值,降低正确分类的样本权值,从而使得错误分类的样本在下一轮基分类器中获得更大的关注。
基分类器组合:采用加权多数表决的方法,即加大分类误差小的分类器权值,减少误差大的分类器权值。
Adaboost的步骤和考虑点和Boosting算法一致,步骤也基本一致。
在这里插入图片描述

Adaboost算法特点

  • 可以使用各种方法构建子分类器,本身提供框架
  • 子分类器容易构建
  • 速度快,不怎么调节参数
  • 泛化错误率低

3、GBDT算法

GBDT是旨在不断减少残差(回归),通过不断加入新的树旨在在残差减少(负梯度)的方向上建立一个新的模型。——即损失函数是旨在最快速度降低残差。为了得到残差,所有的决策树都是使用CART回归树。其中Shrinkage(缩减)是GBDT的一个重要分支,它通过每次走小步的方式来逼近真实的结果,这种方式可以有效减少过拟合的风险,因为每棵树的只学习一小部分,累加的结果也是这小部分的内容,通过多学习几棵树来逼近目标。

残差:真实值与预测值的差值。

基本原理

在这里插入图片描述
(1)训练一个模型m1(20岁),产生错误e1(10岁);
(2)针对e1训练第二个模型m2(6岁),产生错误e2(4岁);
(3)针对e2训练第三个模型m3(3岁),产生错误e3(3岁);
(4)针对e3训练第四个模型m4(1岁)…
(5)最终的预测结果为:m1+m2+m3+m4 = 20+6+3+1=30岁
当然实际的流程中不会只对一个特征进行预测,实际的GBDT的过程会像下面类似的,不同的特征进行预测,然后对于每棵树的结果给予不同的权重,最后将不同树相加:
在这里插入图片描述

GBDT特点

优点

  • 预测阶段,因为每棵树的结构都已确定,可并行化计算,计算速度快。
  • 适用稠密数据,泛化能力和表达能力都不错,数据科学竞赛榜首常见模型。
  • 可解释性不错,鲁棒性亦可,能够自动发现特征间的高阶关系。

缺点

  • GBDT在高维稀疏的数据集上,效率较差,且效果表现不如SVM或神经网络。
  • 适合数值型特征,在NLP或文本特征上表现弱。
  • 训练过程无法并行,工程加速只能体现在单颗树构建过程中。

问题1:为什么不用CART分类树呢?

GBDT每次的迭代要拟合的是梯度值,所以要用连续值的回归树

问题2:回归树和分类树的区别?

1.对于回归树来说最重要的是寻找最佳的划分点,而划分点包含了所有特征的可取值。
2.分类树的最佳划分点都是熵或者基尼系数,也就说用纯度来衡量,但回归树的样本中都是连续标签值,用熵就不合适,用平方误差能够更好的拟合。

4、XGBOOST算法

XGBOOST的原理跟GBDT差不多,它是经过优化的分布式梯度提升库,同时还是大规模并行boosting tree的工具。
在这里插入图片描述

XGBOOST和GBDT的区别:

  • CART树复杂度:XGBoost考虑了树的复杂度,而GBDT未考虑;
  • 损失函数:XGBoost是拟合上一轮损失函数的二阶导展开,而GBDT是上一轮损失函数的一阶导,所以前者的准确性和迭代次数较少;
  • 多线程:XGBoost在选取最佳切分点时开启多线程进行,运行速度更快。

LightGBM算法

微软开源的一个梯度提升框架,主要体现在高效并行训练,速度比XGBoost快10倍,内存占用率为后者的1/6。它主要是通过以下方式来进行优化的:

  • 基于Histogram直方图的决策树算法;
  • 对Histogram直方图做差加速;
  • 使用带深度限制的leaf-wise的叶子生长策略;
  • 直接支持类别特征;
  • 直接支持高效并行。

基于Histogram直方图的决策树算法

简单理解就是把连续值离散化为k个整数,从而构造一个直方图,那么在遍历数据的时候也是直接对直方图遍历寻找最优的划分点。这样虽然在一定程度上降低了精确性,但在内存消耗和计算速度上得到了很大的优化;同时由于决策树本身是弱模型,划分点的精确性影响不大,而且还能有效防止过拟合。
在这里插入图片描述

对Histogram直方图做差加速

通常构造直方图需要遍历叶子上的所有数据,但通过对直方图做差,只需要遍历直方图的k个桶。这样在构造一个叶子的直方图后,很容易就能得到兄弟叶子的直方图,速度又可以提升一倍。
在这里插入图片描述

带深度限制的leaf-wise的叶子生长策略

XGBoost采用level-wise的叶子生长策略,它可以进行多线程优化,也能控制模型复杂度,不容易过拟合,但它对同一层的叶子一视同仁,会导致很多增益低的也进行分裂和搜索,这就会带来很多没必要的开销。
在这里插入图片描述

lightGBM采用leaf-wise的叶子生成策略,它是找到叶子分裂增益最大的那个,进行分裂。这种方法在相同分裂次数的情况下,该方法误差更低,精度也更高。但相应的可能会产生太深的决策树,从而产生过拟合,因此需要增加一个最大深度限制。
在这里插入图片描述

直接支持类别特征

一般机器学习工具需要将类别特征转化为数值特征,这降低了空间和时间的效率,而lightGBM可以直接输入类别特征。
在这里插入图片描述

直接支持高效并行

特征并行:在每台机器上保存全部训练数据,不用进行数据垂直划分,在得到最佳划分后直接在本地执行,不用在机器之间进行通信。
在这里插入图片描述
数据并行:将直方图合并的任务分给不同的机器,降低通信和计算,并利用直方图做差进一步减少通信量。
在这里插入图片描述
投票并行:通过本地找出TOP k特征,这些基于投票筛选出来的特征可能是最优划分点,那么在合并的时候也只合并筛选出来的特征,从而降低通信。
在这里插入图片描述

lightGBM的特点:

优点

  • 速度快:遍历直方图降低时间复杂度;使用leaf-wise算法减少大量计算;采用特征并行、数据并行和投票并行,加快计算;对缓存进行优化,增加缓存命中率。
  • 内存小:使用直方图算法将特征转变为bin值,少记录索引减少内存消耗;将特征存储变为存储bin值减少内存消耗;采用互斥特征捆绑算法减少特征数量。

缺点

  • 可能会长出较深的决策树,产生过拟合,需要使用深度限制防止过拟合;
  • 传统boosting算法通过迭代会让误差越来越小,而lightGBM基于偏差算法,对噪点比较敏感;
  • 没有将最优解的全部特征考虑进去,会出现考虑不全的情况。

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

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

相关文章

WPF实现DiagramChart

1、文件架构 2、FlowChartStencils.xaml <ResourceDictionary xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:s"clr-namespace:DiagramDesigner"xmlns:c&…

算法通关村第一关-链表白银挑战笔记|公共子节点

两个链表公共子节点问题 提示&#xff1a;大家都在做什么&#xff1f; 不做什么。就是等夏天结束 文章目录 两个链表公共子节点问题前言题目&#xff1a;提供四种解决方法的思路&#xff1a;拿到题目要怎么思考&#xff1a;审题哈希表或集合实现使用栈来实现拼接字符串实现 (组…

短视频矩阵源码开发搭建分享--多账号授权管理

目录 文章目录 前言 一、矩阵号系统是什么&#xff1f; 二、使用步骤 1.创建推广项目 2.多账号授权 3.企业号智能客服系统 总结 前言 短视频多账号矩阵系统&#xff0c;通过多账号一键授权管理的方式&#xff0c;为运营人员打造功能强大及全面的“矩阵式“管理平台。…

从零构建深度学习推理框架-1 简介和Tensor

源代码作者&#xff1a;https://github.com/zjhellofss 本文仅作为个人学习心得领悟 &#xff0c;将原作品提炼&#xff0c;更加适合新手 什么是推理框架&#xff1f; 深度学习推理框架用于对已训练完成的神经网络进行预测&#xff0c;也就是说&#xff0c;能够将深度训练框…

UE虚幻引擎教程_生成云平台指定路径下的exe文件

市面上大量优秀的游戏都是基于UE制作的&#xff0c;UE虚幻引擎制作的作品可以在windows、mac、linux以及ps4、x-boxone、ios、android甚至是html5等平台上运行。本文介绍了UE虚幻引擎如何生成云平台指定路径下的EXE。 一、云平台会运行打包文件夹下指定路径的EXE文件 但有时候…

【多选框、表格全选】element el-checkbox、el-table

话不多说 先看效果&#xff1a; 多选框&#xff1a; 表格全选&#xff1a; <template><div><div class"titleLabel"><div class"lineStyle"></div>统计部门</div><div style"display: flex"><e…

项目开启启动命令整合

启动RabbitMQ管理插件 1.启动 RabbitMQ 管理插件。 rabbitmq-plugins enable rabbitmq_management rabbitmq-server # 直接启动&#xff0c;如果关闭窗⼝或需要在该窗⼝使⽤其他命令时应⽤就会停⽌ rabbitmq-server -detached # 后台启动 rabbitmq-server start # 启⽤服务 rab…

(二)安装部署InfluxDB

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 2 章 安装部署InfluxDB 1、linux 安装方式如下 通过包管理工具安装&#xff0c;比如apt 和yum直接下载可执…

springboot()—— 集成redis

1、新建一个springboot项目 2、添加redis依赖包 可以在新建项目的时候就选上 也可以建完项目以后手动导入pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </d…

2023年基准Kubernetes报告:6个K8s可靠性失误

云计算日益成为组织构建应用程序和服务的首选目的地。尽管一年来经济不确定性的头条新闻主要集中在通货膨胀增长和银行动荡方面&#xff0c;但大多数组织预计今年的云使用和支出将与计划的相同&#xff08;45%&#xff09;&#xff0c;或高于计划的&#xff08;45%&#xff09;…

装饰模式-扩展系统功能

买了新车后&#xff0c;不少人会对车进行装饰&#xff0c;比如给车贴膜&#xff0c;喷上骚粉的漆等。某天&#xff0c;小李和小张都买了辆车&#xff0c;小李想给车贴膜&#xff0c;小张想给车先喷漆然后再贴膜。现在中的做法是&#xff0c;把车开到改装店&#xff0c;如果要喷…

浏览器调试Android App

浏览器调试Android App 1. 背景2. 调试工具3. 手机设置4. 打开浏览器(edge)5. 连接手机6. 点击inspect 开始调试 1. 背景 在工作中经常会遇到在原生app中嵌套h5&#xff0c; 但是在某些需要在app里面调试的内容&#xff0c; 却没有像chrome开发者工具这样的工具来帮助我们快速…

react 在build读取env 数据

默认会读取.env 文件 npm install dotenv --save npm install dotenv-cli --save-dev例如读取.env.test "build:test": "dotenv -e .env.test react-app-rewired build",.env.test REACT_APP_CURRENTMODE devREACT_APP_Public_Path "https://baid…

[NLP]使用Alpaca-Lora基于llama模型进行微调教程

Stanford Alpaca 是在 LLaMA 整个模型上微调&#xff0c;即对预训练模型中的所有参数都进行微调&#xff08;full fine-tuning&#xff09;。但该方法对于硬件成本要求仍然偏高且训练低效。 [NLP]理解大型语言模型高效微调(PEFT) 因此&#xff0c; Alpaca-Lora 则是利用 Lora…

算法竞赛入门【码蹄集新手村600题】(MT1040-1060)

算法竞赛入门【码蹄集新手村600题】(MT1040-1060&#xff09; 目录MT1041 求圆面积和周长MT1042 求矩形的面积和周长MT1043 椭圆计算MT1044 三角形面积MT1045 平行四边形MT1046 菱形MT1047 梯形MT1048 扇形面积MT1049 三角形坐标MT1050 空间三角形MT1051 四边形坐标MT1052 直角…

Java通过URL对象实现简单爬虫功能

目录 一、URL类 1. URL类基本概念 2. 构造器 3. 常用方法 二、爬虫实例 1. 爬取网络图片&#xff08;简易&#xff09; 2. 爬取网页源代码 3. 爬取网站所有图片 一、URL类 1. URL类基本概念 URL&#xff1a;Uniform Resource Locator 统一资源定位符 表示统一资源定位…

day39-Password Strength Background(密码强度背景)

50 天学习 50 个项目 - HTMLCSS and JavaScript day39-Password Strength Background&#xff08;密码强度背景&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name&quo…

Linux 学习记录57(ARM篇)

Linux 学习记录57(ARM篇) 本文目录 Linux 学习记录57(ARM篇)一、外部中断1. 概念2. 流程图框 二、相关寄存器1. GIC CPU Interface (GICC)2. GIC distributor (GICD)3. EXTI registers 三、EXTI 寄存器1. 概述2. 内部框图3. 寄存器功能描述4. EXTI选择框图5. EXTI_EXTICR1 &…

go-zero学习 第六章 分布式事务dtm

go-zero学习 第六章 分布式事务dtm 1 参考文档2 官方示例3 go-zero使用dtm参考代码3.1 go-zero支持dtm 代码操作步骤※3.2 gozerodtm 代码操作步骤 4 注意事项4.1 grpc接口地址※4.2 动态调用过程4.3 dtm的回滚补偿4.4 barrier的空补偿、悬挂等4.5 barrier在rpc中本地事务 1 参…

Volatile关键字详解

Volatile关键字详解 volatile的定义 这个引用JSR中的定义&#xff1a; The Java programming language allows threads to access shared variables (17.1). As a rule, to ensure that shared variables are consistently and reliably updated, a thread should ensure tha…