集成学习-Boosting

news2024/11/27 2:28:41

Boosting 采用串行的方式训练,各基分类器之间有依赖。根据当前模型损失函数的负梯度训练新的弱分类器,将训练好的弱分类器以累加的形式结合到现有模型中。

过程中会不断减小损失函数,使模型偏差不断降低,方差不会降低。因为各弱分类器之间是强相关的,缺乏独立性,不会对降低方差有作用。

Gradient Boosting:boosting中的一大类算法。每轮迭代中,首先计算出当前模型在所有样本上的负梯度,以该值为目标训练一个新的弱分类器,计算该弱分类器的权重,实现模型更新。

优点:

1)预测阶段的计算速度快,树与树之间可并行化计算
2)在分布稠密的数据集上,泛化能力和表达能力都很好。
3)采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的预处理如归一化等。

缺点:

1)GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。
2)GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显。
3)训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。

XGBoost

一种高效实现GBDT的改进算法。原始的GBDT算法基于经验损失函数的负梯度来构造新的决策树,只是在决策树构建完成后再进行剪枝。而xgboost在决策树构建阶段就加入正则项

xgboost 从所有的树结构中找出一个最优的树结构,是一个NP-hard问题,通常采用贪心算法( 求解问题时,总是做出当前最好的选择,不从整体最优上加以考虑,得到局部最优构建一个次优的树结构,基本思想:从根节点开始,每次对一个叶子节点进行分裂,针对每一种可能的分裂,根据特定的准则选取最优的分裂。不同的决策树算法采用不同的准则,如IC3算法采用信息增益,C4.5算法为了克服信息增益中容易偏向取值较多的特征而采用信息增益比,CART算法使用基尼指数和平方误差,XGBoost也有特定的准则来选取最优分裂。

XGBoost 的并行是在特征粒度上的,决策树的学习最耗时的一个步骤是对特征的值排序以确定最佳分割点,XGBoost 在训练之前,预先对数据进行了排序,保存为block结构,后面的迭代中重复地使用这个结构,减小计算量。在进行节点的分裂时,需要计算每个特征的增益,选增益最大的特征做分裂,各个特征的增益计算就可以多线程进行。
可并行的近似直方图算法。树节点在进行分裂时,需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,此时 xgboost 使用一种可并行的近似直方图算法,高效生成候选分割点。先通过直方图算法获得候选分割点的分布情况,根据候选分割点将连续的特征信息映射到不同的buckets中,并统计汇总信息。

XgBoost:对所有特征都按照特征的数值进行预排序,遍历分割点的时候用O(#data)的代价找到特征最好的分割点。在找到一个特征的最好分割点后,将数据分裂成左右子节点。空间消耗和时间消耗都很大,对cache优化不友好。

LightGBM

Light Gradient Boosting Machine,实现GBDT算法的框架,支持高效并行训练,有更快的训练速度、更低的内存消耗、更好的准确率、支持分布式可以快速处理海量数据等优点

  • 基于Histogram的决策树算法。
  • 单边梯度采样 Gradient-based One-Side Sampling:减少大量只具有小梯度的数据实例,这样在计算信息增益的时候只利用剩下的具有高梯度的数据就可以了,相比XGBoost遍历所有特征值节省了不少时间和空间上的开销。
  • 互斥特征捆绑 Exclusive Feature Bundling(EFB):使用EFB将许多互斥的特征绑定为一个特征,达到了降维的目的;捆绑的特征都是互斥的,即特征不会同时为非零值,这样两个特征捆绑起来不会丢失信息。
  • 带深度限制的Leaf-wise的叶子生长策略:多数GBDT使用低效的按层生长 (level-wise) 决策树的生长策略,不加区分的对待同一层的叶子,带来没必要的开销,很多叶子的增益较低,没必要进行搜索和分裂。LightGBM使用了带有深度限制的按叶子生长 (leaf-wise) 算法。
  • 直接支持类别特征(Categorical Feature);对于决策树,不推荐使用 one-hot 编码,特别是类别个数很多的情况,会产生样本切分不平衡问题,并影响决策树的学习。
  • 支持高效并行
  • Cache命中率优化

速度更快:

  • LightGBM 采用了直方图算法将遍历样本转变为遍历直方图,极大的降低了时间复杂度;
  • LightGBM 在训练过程中采用单边梯度算法过滤掉梯度小的样本,减少了大量的计算;
  • LightGBM 采用了基于 Leaf-wise 算法的增长策略构建树,减少了很多不必要的计算量;
  • LightGBM 采用优化后的特征、数据并行方法加速,数据量大时可采用投票并行策略;
  • LightGBM 优化缓存,增加了缓存命中率;

内存更小:

  • XGBoost 预排序后,要记录特征值及其对应样本的统计值的索引,而 LightGBM 使用了直方图算法将特征值转变为 bin ,不需要记录特征到样本的索引,将空间复杂度从 O(2∗#data) 降低为 O(#bin) ,减少了内存消耗;
  • LightGBM 采用了直方图算法将存储特征值转变为存储 bin 值,降低了内存消耗;
  • LightGBM 在训练过程中采用互斥特征捆绑算法减少了特征数量,降低了内存消耗。

缺点:

  • 会生成较深的决策树,过拟合。通过增加了最大深度限制,保证高效率的同时防止过拟合;
  • Boosting 是迭代算法,每一次迭代都根据上一次迭代的预测结果对样本进行权重调整,随着迭代不断进行,误差会越来越小,模型的偏差不断降低。而 LightGBM 是基于偏差的算法,所以会对噪点较为敏感;
  • 寻找最优解时,依据最优切分变量,没有将最优解是全部特征的综合这一理念考虑进去;

方法参数:
'task': 'train',
'boosting_type': 'gbdt', # 设置提升类型
'objective': 'regression', # 目标函数
'metric': {'l2', 'auc'}, # 评估函数
'num_leaves': 31, # 叶子节点数
'learning_rate': 0.05, # 学习速率
'feature_fraction': 0.9, # 建树的特征选择比例
'bagging_fraction': 0.8, # 建树的样本采样比例
'bagging_freq': 5, # k 意味着每 k 次迭代执行bagging
'verbose': 1 # <0 显示致命的, =0 显示错误 (警告), >0 显示信息

CatBoost

一种基于对称决策树为基学习器实现的参数较少、支持类别型变量和高准确性的GBDT框架,解决了高效合理处理类别型特征的问题,还解决了梯度偏差(Gradient Bias)以及预测偏移(Prediction shift)的问题,减少过拟合,提高算法的准确性和泛化能力。

  • 加入了自动将类别型特征处理为数值型特征的算法。对categorical features做统计,计算某类别特征出现的频率,加上超参数,生成新的数值型特征。
  • 使用了组合类别特征,利用特征之间的联系,丰富了特征维度。
  • 用排序提升的方法对抗训练集中的噪声点,避免梯度估计的偏差,解决预测偏移的问题。
  • 采用了完全对称树作为基模型。

CatBoost可以直接传入类别特征列标识,模型自动将其转为one-hot编码,可通过max_one_hot_size限制其长度,如果不传入特征列标识,CatBoost会把所有列视为数值特征并处理,如果特征超过设定的长度,做如下处理:

LightGBM 也可使用特征名处理标签,但不将其转为one-hot形式,但需要将标签特征转为整型变量,其不接受字符串形式的标签。

XgBoost 则只接收数值型数据。

参考:

XGBoost-LightGBM-CatBoost三大杀器 - 知乎

CatBoost, XGBoost, AdaBoost, LightBoost,各种Boost的介绍和对比 - 知乎

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

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

相关文章

《CTFshow - Web入门》02. Web 11~20

Web 11~20web11知识点题解web12知识点题解web13知识点题解web14知识点题解web15知识点题解web16知识点题解web17知识点题解web18知识点题解web19知识点题解web20知识点题解web11 知识点 dns检查查询&#xff1a;http://dbcha.com/&#xff0c;输入域名&#xff0c;获取flag。…

MySQL数据库期末考试试题及参考答案(07)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 一、 填空题 如果不想提交当前事务&#xff0c;可以使用_____语句回滚事务。每个事务都是完整不可分割的最小单元是事务的_____性。MySQL中&#xff0c;显式开启事务的语句…

屏幕视频捕获组件-ByteScout Screen Capturing SDK

使用 ByteScout Screen Capturing SDK&#xff0c;您可以轻松地将屏幕视频捕获功能添加到您的应用程序中。输出带有音频、鼠标移动和点击的高质量桌面屏幕视频录制。 主要优势 只需几行代码即可在您的应用中启用屏幕视频捕获和屏幕录制功能&#xff1b;无需互联网连接即可离线…

Django day1

在windows下可以直接的创建django项目 但是需要把自动生成的templates和setting里面的DIRS里面字段删除&#xff08;templates自动生成的可以删不删都行&#xff0c;我是看视频那个老师删了&#xff0c;但是setting DIRS里面的字段需要删&#xff0c;至于具体为啥我已经忘了&am…

TiDB数据库概述——PD

PD PD的架构与功能TSO的分配PD的调度原理label的作用 PD的架构 PD的个数一般是奇数个的。 PD的主要功能&#xff1a; 整个集群TiKV的元数据存储分配全局ID和事务ID生成全局时间戳TSO收集群信息进行调度提供label&#xff0c;支持高可用提供TiDB Dashboard 路由功能 用key…

vue3使用富文本编辑器wangEditor-v5(未使用composition api写法)

效果 安装 安装核心库和其vue组件库 yarn add wangeditor/editor yarn add wangeditor/editor-for-vuenext使用v-model封装富文本组件editor.vue <template><div class"editor-box"><Toolbar class"toolbar" :editor"editor" …

Flink是什么?场景?处理流的发展演变?

Flink是什么&#xff1f;Flink是什么&#xff1f;为什么选择Flink&#xff1f;什么场景需要处理流数据?处理流的发展演变Flink是什么&#xff1f; Apache Flink 是一个在无界和有界数据流上进行状态计算的框架和分布式处理引擎。Flink 能在所有常见集群环境中运行&#xff0c…

线性表的链式存储的基本

链表是线性表的链式存储方式&#xff0c;逻辑上相邻的数据在计算机内的存储位置不一定相邻&#xff0c;因此&#xff0c;我们需要为每一个元素设置有一个指针来指向与它逻辑相邻的元素。 为此&#xff0c;我们为每个元素设置一个结点&#xff0c;每个结点由数据域和指针域组成…

【3D目标检测】Monocular 3D Object Detection with Pseudo-LiDAR Point Cloud

目录概述整体流程伪点云vs点云2D-3D边界框的一致性约束概述 本文的输入数据仅仅是单目图像&#xff0c;在方法上是融合了伪点云&#xff08;Pseudo-LiDAR&#xff09;的深度信息表示方法与Frustum PointNets的检测方法。 乍一看文章和伪点云原论文Pseudo-LiDAR from Visual De…

Deep-SVDD 方法

两种情况 1. 数据集有正负样本&#xff0c;但正样本的量远远大于负样本为异常检测&#xff0c;即大量的正样本为正常&#xff0c;少数的负样本是异常的。 2. 数据集只有正样本&#xff0c;称为单分类&#xff0c;即只通过正样本训练模型&#xff0c;区分正样本和非正样本。 情…

蓝桥杯2021年第十二届省赛真题-时间显示(C and C++)

这一篇是个小记&#xff0c;真无语了&#xff0c;看见这个题感觉哇塞好简单的感觉&#xff0c;谁知道栽了&#xff0c;烦死了 话不多说&#xff0c;记录一下 C语言 #include<stdio.h> int main() {int a,b,c;long long time;//题上说了10的18次方的正整数&#xff0c;所…

Spring:AOP的五种通知类型(12)

AOP的五种通知类型前置通知&#xff1a;Before注解后置通知&#xff1a;After注解环绕通知&#xff1a;Around注解&#xff08;掌握&#xff09;返回后通知&#xff1a;AfterReturning&#xff08;了解&#xff09;异常后通知&#xff1a;AfterThrowing&#xff08;了解&#x…

直播回顾 | 【原引擎】解密云原生安全:如何应对新型BOT攻击?

BOT流量是指在互联网上对Web网站、APP应用、API接口通过工具脚本、爬虫程序或模拟器等非人工手动操作访问的自动化程序流量&#xff0c;一般也称为机器人流量。而恶意的BOT流量通过利用代理或秒拨IP、手机群控等手段来爬取信息数据、抢刷接口、薅羊毛、外挂作弊等恶意攻击行为&…

招标 | 近期隐私计算项目招标中标25(大连理工大学、中国电信北京研究院、松山湖材料实验室、北京控制工程研究所、光大永明)

开放隐私计算 开放隐私计算 开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播&#xff0c;愿成为中国 “隐私计算最后一公里的服务区”。 177篇原创内容 …

apache-POI ,easyexcel(3个办公软件)

POI介绍 ApachePOI是用Java编写的免费开源的跨平台的JavaAPI&#xff0c;ApachePOI提供API给Java程序对MicrosoftOffice格式档案读和写的功能&#xff0c;其中使用最多的就是使用POI操作Excel文件。 HSSF&#xff0d;提供读写MicrosoftExcelXLS格式档案的功能XSSF&#xff0d;…

【设计模式】适配器模式

适配器模式属于结构型模式&#xff0c;主要解决两个已存在的功能相近的接口间不能兼容的问题。在准备将一个接口对接到另一个接口中时&#xff0c;发现另一个接口&#xff08;目标&#xff09;与准备对接的接口&#xff08;适配者&#xff09;因不兼容而无法正常运行功能时&…

Allegro如何打盲埋孔操作指导

Allegro如何打盲埋孔操作指导 Allegro支持打盲埋孔,具操作如下 首先保证库路径下方有盲埋孔的封装 打开规则管理器 选择Physical规则,点击VIAS,会出现一个对话框,勾选show vias from Library ,出现孔的封装 把孔添加到via list里面去,之后点击ok 加好的效果如

web前端-javascript-数据类型(6种数据类型/字符串、数值、布尔值、空值、未定义、对象,String字符串、引号问题、转义字符、字面量和变量输出)

文章目录数据类型1. 介绍说明2. String 字符串引号问题转义字符字面量和变量的输出数据类型 var str "hello"; str 我说:"今天天气真不错&#xff01;";str 我说:"今天\t天气真不错&#xff01;"; str "\\\\\\";//输出字面量str …

ESP32基础应用之使用两个ESP32通过阿里云物联网平台实现相互通信

文章目录1 阿里云物联网平台2 程序编写2.1 ESP32-COM4 设备2.1 ESP32-COM5 设备3 实验现象分析1 阿里云物联网平台 在设备管理下创建两个设备&#xff0c;参考ESP32基础应用之ESP32与阿里云物联网平台实现数据互传&#xff08;MQTT协议&#xff09; 在规则引擎下创建云产品流…

前后端分离 基础(新增与查询)

目录 一&#xff0c;后端 1.1 修改settings---->搜索Maven 1.2 application.yml文件与jdbc.properties文件 对应数据库的账号密码 application.yml 1.4 jdbc.properties 1.3 generatorConfig.xml jdbc驱动jar包 1.4 从本地导入pom依赖 POM 1.5 自动生成 1.6 各个层…