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

news2024/10/3 10:33:13

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.coloradmin.cn/o/787676.html

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

相关文章

基于Truss+Docker+Kubernetes把开源模型Falcon-7B送上云端(译)

背景 到目前为止,我们已经看到了ChatGPT的能力及其所能提供的强大功能。然而,对于企业应用来说,像ChatGPT这样的封闭源代码模型可能会带来风险,因为企业自身无法控制他们的数据。尽管OpenAI公司声称用户数据不会被存储或用于训练…

【玩转Linux】标准IO函数

(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…

Emvirus: 基于 embedding 的神经网络来预测 human-virus PPIs【Biosafety and Health,2023】

研究背景: Human-virus PPIs 预测对于理解病毒感染机制、病毒防控等十分重要;大部分基于 machine-learning 预测 human-virus PPIs 的方法利用手动方法处理序列特征,包括统计学特征、系统发育图谱、理化性质等;本文作者提出了一个…

redis面试1

Redis基础面试题 1、为什么要使用Redis做缓存 缓存的好处 使用缓存的目的就是提升读写性能。而实际业务场景下,更多的是为了提升读性能,带来更好的性 能,带来更高的并发量。Redis 的读写性能比 Mysql 好的多,我们就可以把 Mysq…

探索APP开发的新趋势:人工智能和大数据的力量

随着5G技术的不断发展,人工智能和大数据将会更加广泛的应用于我们生活和工作中,作为 APP开发公司,应该及时的对新技术进行研发,进而更好的为用户服务。目前 APP开发已经不是传统的软件开发了,而是向移动互联网转型&…

完全背包相关题

class Solution { public:int dp[5005];int change(int amount, vector<int>& coins) {//dp[j]表示金额为j时的组合数dp[0]1;for(int i0;i<coins.size();i){for(int jcoins[i];j<amount;j){dp[j]dp[j-coins[i]];}}return dp[amount];} }; 题解&#xff1a;如果…

Pandas库:从入门到应用(四)--数学函数

一、测试数据 import numpy as np import pandas as pd## 5行3列 0到100的数据 df pd.DataFrame(datanp.random.randint(0, 100, size(5, 3))) df二、基础聚合函数 2.1、count()函数 df.count() # 统计每列的行数(非空),默认axis0 df.count(axis1) # 统计每行的列数(非空)…

mysql的主键选择

一.没有定义主键有什么问题 如果定义了主键&#xff0c;那么InnoDB会使用主键作为聚簇索引如果没有定义主键&#xff0c;那么会使用第一非空的唯一索引&#xff08;NOT NULL and UNIQUE INDEX&#xff09;作为聚簇索引如果既没有主键也找不到合适的非空索引&#xff0c;那么In…

案例研究|DataEase助力亚加达智能医学实验室场景BI展示

深圳市亚加达信息技术有限公司&#xff08;以下简称为亚加达&#xff09;成立于2018年&#xff0c;是一家专注于医疗信息系统研发的高科技公司&#xff0c;隶属于亚辉龙集团。 亚加达深入理解医疗实验室业务和日常工作流程&#xff0c;通过物联网和大数据技术&#xff0c;基于…

数据库概述和DDL语句(学会并使用数据库day1)

数据库概述和DDL语句&#xff08;day1&#xff09; 一、数据库概述概念数据库的集中式控制有什么优点数据库分类mysql数据库mysql简介基本术语数据表的组成 数据库管理系统数据库管理系统、数据库和表的关系 二、SQL的概念三、SQL语句分类1、SQL语句被分为四大类2、MySQL的语法…

电脑上怎么进行pdf合并免费?看看这种方法

电脑上怎么进行pdf合并免费&#xff1f;在日常工作中&#xff0c;我们经常需要将多个PDF文档合并成一个文件&#xff0c;以方便管理和传输。如果你正在寻找一种简单易用的PDF合并工具&#xff0c;那么接下来就给大家介绍一种简单好用的合并方法。 【迅捷PDF转换器】是一款PDF转…

godot引擎c++源码深度解析系列一

许久没有使用c开发过项目了&#xff0c;如果按照此时单位的入职要求&#xff0c;必须拥有项目经验的话&#xff0c;那我就得回到十多年前&#xff0c;大学的时代&#xff0c;哪个时候真好&#xff0c;电脑没有这么普及&#xff0c;手机没有这么智能&#xff0c;网络没有这么发达…

01背包相关题

题解&#xff1a;dp[j]表示目标和为j时的最大组合种数 class Solution { public:int dp[1005];int findTargetSumWays(vector<int>& nums, int target) {int val;int sum0;for(int i0;i<nums.size();i){sumnums[i];}int wsumtarget;if(w%21){return 0;}else{valw…

重磅来袭 | 2023数字供应链安全大会邀请函(DSS 2023)

2023数字供应链安全大会&#xff08;DSS 2023&#xff09;将于8月10日在北京国家会议中心隆重开幕。本次大会由悬镜安全主办&#xff0c;ISC互联网安全大会组委会、中国软件评测中心&#xff08;工业和信息化部软件与集成电路促进中心&#xff09;、中国信息通信研究院云计算与…

基于IMX6ULL的智能车载终端项目(代码开源)

前言&#xff1a;本文为手把手教学智能车载终端项目&#xff08;LinuxQT&#xff09;&#xff0c;该项目是综合性非常强的 Linux 系列项目&#xff01;项目核心板使用 NXP 的 IMX6ULL 作为 CPU&#xff0c;整体实现了简化版本的车载终端功能需求。项目可以学习的点非常多&#…

物联网网关模块可以带几台plc设备吗?可以接几个modbus设备?

随着物联网技术的快速发展&#xff0c;物联网网关模块已经成为了实现物联网应用的重要工具。很多客户在选择物联网网关模块时想了解物联网网关模块的设备接入能力&#xff0c;一个物联网网关模块可以带几台PLC设备&#xff1f;可以接几个Modbus设备&#xff1f; 物联网网关模块…

leetcode 50. Pow(x, n)(x的n次方)

求x的n次方。 思路&#xff1a; 第一个想到的思路是x和它自己乘n次&#xff0c; 但是这样做会面临一些问题&#xff1a; 如果是简单的n很小的情况还好&#xff0c;但是可以看到n的取值横跨整个整数范围&#xff0c; 如果n非常大&#xff0c;一次一次乘x效率低是其一。 一般来…

十、数据结构——链式队列

数据结构中的链式队列 目录 一、链式队列的定义 二、链式队列的实现 三、链式队列的基本操作 ①初始化 ②判空 ③入队 ④出队 ⑤获取长度 ⑥打印 四、循环队列的应用 五、总结 六、全部代码 七、结果 在数据结构中&#xff0c;队列&#xff08;Queue&#xff09;是一种常见…

【MySQL】存储引擎(六)

&#x1f697;MySQL学习第六站~ &#x1f6a9;本文已收录至专栏&#xff1a;MySQL通关路 ❤️文末附全文思维导图&#xff0c;感谢各位点赞收藏支持~ 一.引入 大家可能没有听说过存储引擎&#xff0c;但是一定听过引擎这个词&#xff0c;引擎就是发动机&#xff0c;是一个机器…

PCB封装设计指导(十五)验证封装的正确性

PCB封装设计指导(十五)验证封装的正确性 封装建立好之后,我们需要验证封装是否能够正常的放入PCB文件中,最好最直接的办法就是直接放入PCB中来验证。 具体操作如下 任意新建一个空白的PCB文件点击File 选择NEW