机器学习原理(1)集成学习基本方法

news2025/1/8 5:10:38

一.什么是集成学习

集成学习(ensemble learning)通过将多个学习器进行组合来完成学习任务。下图显示集成学习的一般结构(取自周志华老师的西瓜书),个体学习器通常由一种现有的学习算法从训练数据产生,例如决策树(C4.5、CART)、BP神经网络等。集成中只包含同种类型的个体学习器时,集成是同质的,同质集成中的个体学习器也称为“基学习器”,相应学习算法称为“基学习器算法”;集成中包含不同类型的个体学习器时,例如既有决策树又有神经网络,这样的集成是异质的,异质集成中个体学习器由不同学习算法生成,这时不再有基学习器算法,相应的个体学习器一般不称为基学习器,直接称为“个体学习器”或“组件学习器”。
在这里插入图片描述
集成学习算法需要关注的两个问题,是探索集成学习的关键
1)个体学习器如何训练得到
例如Adaboost改变训练数据权值;Gradient Boosting的梯度提升
2)如何将个体学习器组合
例如Bagging的投票法——软投票、硬投票;Boosting的线性组合——加法模型
不同的个体学习器训练方法+不同的个体学习器组合=不同的集成学习算法

二.集成学习主要方法

2.1Boosting 串行方法

Boosting是将弱学习算法提升为强学习算法的机器学习方法,采用加法模型(即基函数的线性组合)与前向分步算法or梯度提升算法。通俗解释:Boosting会训练一系列弱分类器,并将所有学习器的预测结果组合起来作为最终预测结果,在学习过程中,后期的学习器更关注先前学习器学习中的错误。

  • 典型算法
    Adaboost、GBDT、XGBoost、LightGBM等,其中AdaBoost继承了Boosting的思想,为每个弱学习器赋予不同权值,将所有弱分类器权重和作为预测的结果,达到强学习器的效果;Gradient Boosting是Boosting思想的另一种实现方法,它将损失函数梯度下降的方向作为优化的目标,新的学习器建立在之前学习器损失函数梯度下降的方向,在梯度下降的方向不断优化,使损失函数持续下降,从而提高模型的拟合程度,代表算法GBDT、XGBoost、LightGBMGBDT(Gradient Tree Boosting,别名 GBM、GBRT、MART)是Gradient Boosting的一种实现,GBDT相较BDT(提升树)基学习器都是采用CART回归树,但BDT是不断拟合残差来优化目标函数,GBDT是通过负梯度近似残差来优化目标函数(即损失函数);XGBoost和LightGBM都是GBDT的改进模型,最终这两个模型成为了集大成者,适合于分类、回归、排序等问题(多种基学习器);支持分布式并行计算(Rabit),具有高可移植性(XGBoost4J-Spark、XGBoost4J-Flink);支持GPU算法加速;结果也更加精准(目标函数用二阶泰勒展开近似);泛化能力更强(加入了结构误差项——正则化降低模型复杂度)。

  • 算法特点
    Boosting可以有效提高模型准确性,但各个基学习器间存在强依赖关系,只能【串行】生成的序列化方法,时间开销较大(XGBoost和LightGBM在这方面已经做了极大的改进)

2.2Bagging 并行方法

Bagging对数据集进行有放回采样,得到每个基模型所需要的子训练集,然后对所有基模型预测结果进行综合,产生最终的预测结果。对于分类问题,采用投票法(软投票、硬投票)计算结果;对于回归问题,采用平均法计算结果。

  • 典型算法
    Random Forests随机森林(简称RF)是Bagging最具代表性的算法,基学习器采用决策树,并且在Bagging样本扰动(行采样)的基础上增加了属性扰动(列采样),进一步丰富了样本的多样性。
  • 算法特点
    Bagging模型的精度要比Boosting低,但各个基学习器相互独立,不存在强依赖关系,可以【并行】生成的序列化方法,时间开销较小(RF模型仅采用决策树作为基模型,进一步优化可训练效率)

2.3Stacking 融合方法

Stacking是通过训练集训练好所有的基模型,然后用基模型的预测结果生成一个新的数据,作为组合器模型的输入,用以训练组合器模型,最终得到预测结果。组合器模型通常采用逻辑回归。

  • 算法特点
    Stacking一般采用异质集成,即使用多种学习算法训练不同种类的个体学习器。而Boosing和Bagging采用同质集成,即基学习器为同一种基学习算法。

三.集成学习案例

3.1书籍案例推荐

《阿里云天池大赛赛题分析 机器学习篇》

  • 工业蒸汽量预测 属于回归问题。采用的算法有 单一模型 岭回归、Lasso回归、SVR回归、K近邻; Boosting模型 GBDT 、XGBoost; Bagging模型 RandomForset; 多模型融合Stacking LightGBM+LinearRegression 等等。
  • 天猫用户重复购买预测 属于分类问题。采用模型有 单一模型 逻辑回归LogisticRegressioin、高斯贝叶斯 GaussianNB、K近邻、决策树分类; 集成学习 随机森林、LightGBM、极端随机树ET。
  • O2O优惠券预测 属于时间序列预测问题。采用算法有 朴素贝叶斯 MultinomialNB、逻辑回归、决策树、随机森林、XGBoost、LightGBM。另外有模型验证方法 交叉验证(K折、留一法、留P法、K折分层等)、 验证结果可视化 (学习曲线、验证曲线),以及模型调参 (网格搜索、随机搜索、启发式搜索)。
  • 阿里云安全恶意程序检测 属于多分类问题,采用LightGBM模型实现,本节更多讲解 数据探索和特征工程过程。

3.2个人学习博客

1.关于XGBoost的应用示例及基本原理,
见《XGBoost模型调参、训练、评估、保存和预测》 ,包含模型脚本文件;
见《XGBoost算法原理及基础知识》 ,包括集成学习方法,XGBoost模型、目标函数、算法,公式推导等;

2.关于分类任务的评估指标值详解,
见《分类任务评估1——推导sklearn分类任务评估指标》,其中包含了详细的推理过程;
见《分类任务评估2——推导ROC曲线、P-R曲线和K-S曲线》,其中包含ROC曲线、P-R曲线和K-S曲线的推导与绘制;

3.关于XGBoost模型中树的绘制和模型理解,
见《Graphviz绘制模型树1——软件配置与XGBoost树的绘制》,包含Graphviz软件的安装和配置,以及to_graphviz()和plot_trees()两个画图函数的部分使用细节;
见《Graphviz绘制模型树2——XGBoost模型的可解释性》,从模型中的树着手解释XGBoost模型,并用EXCEL构建出模型。

4.关于集成学习实践,
见《机器学习实践(1.1)XGBoost分类任务》,包含二分类、多分类任务以及多分类的评估方法。
见《机器学习实践(1.2)XGBoost回归任务》,包含回归任务模型训练、评估(R2、MSE)。
见《机器学习实践(2.1)LightGBM分类任务》,包含LightGBM二分类、多分类任务及评估方法;
见《机器学习实践(2.2)LightGBM回归任务》,包含LightGBM模型的调参、训练、保存、调用、评估。

❤️ 机器学习内容持续更新中… ❤️


声明:本文所载信息不保证准确性和完整性。文中所述内容和意见仅供参考,不构成实际商业建议,可收藏可转发但请勿转载,如有雷同纯属巧合。

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

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

相关文章

Vue项目实战失物招领

经过两天的时间,搞定了一个Vue版本的项目,在这里留下这两天的点点滴滴,这个项目主要实现了失物招领的相关功能,比如发布丢失信息,发布拾到信息,跑腿信息,用户注册,用户登录等相关功能…

故障分析 | Kubernetes 故障诊断流程

一、本文概述及主要术语 1.1 概述 本文基于 Pod 、Service 和 Ingress 三大模块进行划分,对于 Kubernetes 日常可能出现的故障问题,提供了较为具体的排查步骤,并附上相关解决方法或参考文献。 1.2 主要术语 Pod: Kubernetes 中创建和管理的…

Spring Boot日志:SLF4J和Logback

日志的分类 SpringBoot中的日志库分为两种: 实现库:提供具体的日志实现,例如日志级别的控制、打印格式、输出目标等。外观库:自身不提供日志实现,而是对其他日志库进行封装,从而方便使用。基于外观模式实…

接口自动化测试-Python+Requests+Pytest+YAML+Allure配套撸码(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 接口自动化框架&a…

软件测试/测试开发丨Pytest测试框架学习笔记

Pytest 参数化用例 测试登录场景 测试登录成功,登录失败(账号错误,密码错误)*创建多种账号: 中⽂文账号,英⽂文账号*普通测试用例方法Copy 多份代码 or 读⼊入参数?*一次性执⾏多个输⼊入参数* def test_param_login_ok():# 登录成功user…

解决分类任务中数据倾斜问题

大家好,在处理文本分类任务时,基准测试流行的自然语言处理架构的性能是建立对可用选项的理解的重要步骤。在这里,本文将深入探讨与分类相关的最常见的挑战之一——数据倾斜。如果你曾经将机器学习(ML)应用于真实世界的…

selenium---滑动框验证码破解

前言 目前常见的验证码有很多种,比如数字验证码,滑动验证码,以及滑动补全图像验证码等,关于验证码的操作属于我们在UI自动化很大的一个障碍,今天安静来介绍下如何通过python来实现我们滑动验证码 滑动验证码 先来一…

MySQL之全文索引二三事

全文索引 MySQL全文索引是一种用于快速搜索文本字符串的索引,在MySQL数据库中,它可以用来提高文本搜索的效率。全文索引不同于普通索引,普通索引只是对列值进行排序,而全文索引则会对列的内容进行分词,并且对每个分词…

RocketMQ重复消费的解决方案::分布式锁直击面试!

文章目录 场景分析方法的幂等分布式锁Redis实现分布式锁抢锁的设计思路 分布式锁案例 直击面试rocketmq什么时候重复消费消息丢失的问题消息在哪里丢失发送端确保发送成功并且配合失败的业务处理消费端确保消息不丢失rocketmq 主从同步刷盘 场景分析 分布式系统架构中,队列是分…

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 参…

多媒体工作中用到的小工具

安利下嵌入式多媒体用到的各种小工具 下面是同事们推荐的 以下是对这些软件的简要介绍: ocenaudio:ocenaudio是一款跨平台的音频编辑软件,它提供了直观的界面和丰富的功能,可以帮助用户进行音频剪辑、修复、转码等操作。 MKVToolNix:MKVToolNix是一款开源的多媒体容器格…

web-vim信息泄露

(1)知识补充 vim 交换文件名 在使用vim时会创建临时缓存文件,关闭vim时缓存文件则会被删除,当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容   以 index.php 为例&#xff1…

Redis一主二从三哨兵模式

文章目录 Redis一主二从三哨兵模式环境配置实践配置主从配置哨兵模式 测试主从复制测试模拟master宕机恢复master Redis一主二从三哨兵模式 当你使用Redis作为主从复制的架构,并且希望在出现主节点故障时自动进行故障转移时,适用于一主而从三哨兵模式。…

android 面试题目之handler消息机制

Handler消息机制是Android里面很基础的东西,基本上属于必考题 一般会从如下几个方面来考查 实现原理,Handler/Message/MessageQueue/Looper 几个类的实现流程,Handler导致的内存泄露怎么处理主线程的Looper是什么时候创建的;如果…

3. Spring 更简单的读取和存储对象(五大类注解 方法注解)

目录 1. 存储 Bean 对象 1.1 配置扫描路径 1.2 添加注解存储 Bean 对象 1.2.1 Controller(控制器存储) 1.2.2 Service(服务存储) 1.2.3 Repository(仓库存储) 1.2.4 Component(组件存储&…

C语言学习笔记 Ubuntu系统下部署gcc编译工具-01

在22.04版本 ubuntu系统下: 1.进行apt工具包更新 sudo apt-get update 2.安装gcc工具 sudo apt-get install -y gcc 3.创建一下文件,并编译它输出相应的内容 touch hello.c 4.使用gcc编译c源程序并运行 格式:gcc 源文件名 -o 生成的执行文…

AcWing 1210. 连号区间数

输入样例1: 4 3 2 4 1输出样例1: 7输入样例2: 5 3 4 2 5 1输出样例2: 9样例解释 第一个用例中,有 77 个连号区间分别是:[1,1],[1,2],[1,3],[1,4],[2,2],[3,3],[4,4][1,1],[1,2],[1,3],[1,4],[2,2],[3,3…

记一次vscode配置CMake编译task的坑

事情经过是这样的,博主在一个项目中需要使用交叉编译链进行项目编译,但是在CMake中有一个自定义的编译选项,在vscode中配置task任务后,编译发现终端报静态库.a文件格式错误,如下图所示: 但是如果在CMakeLis…

python与深度学习(七):CNN和fashion_mnist

目录 1. 说明2. fashion_mnist实战2.1 导入相关库2.2 加载数据2.3 数据预处理2.4 数据处理2.5 构建网络模型2.6 模型编译2.7 模型训练2.8 模型保存2.9 模型评价2.10 模型测试2.11 模型训练结果的可视化 3. fashion_mnist的CNN模型可视化结果图4. 完整代码 1. 说明 本篇文章是C…

Install the Chinese input method on Linux

Open terminal and input: sudo -i apt install fcitx fcitx-googlepinyinWait for it to finish. Search fcitx: "设置"-->"输入法": Finally, we get the following result: Ctrl Space:Switch the input method. The test …