【机器学习】集成学习解读(ensemble learning)

news2024/11/16 22:42:07

【机器学习】集成学习解读(ensemble learning)

文章目录

  • 【机器学习】集成学习解读(ensemble learning)
    • 1. 集成学习(ensemble learning)
      • 1.1 前言
      • 1.2 什么是集成学习
    • 2. 如何得到若干个个体学习器
      • 2.1 集成学习之 Bagging
      • 2.2 集成学习之 Boosting
      • 2.3 集成学习之 Stacking
      • 2.4 小结
    • 3. 如何选择一种结合策略
      • 3.1 平均法
      • 3.2 投票法
      • 3.3 学习法
    • 4. 总结
    • 5. 补充
    • 参考

1. 集成学习(ensemble learning)

1.1 前言

在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型。

  • 但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好)。

集成学习的出现就是为了去组合多个弱监督模型以期得到一个更好更全面的强监督模型。

  • 集成学习潜在的思想是:即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来
    • 单个学习器我们称为弱学习器(常指泛化性能略优于随机猜测的学习器:例如在二分类问题桑精度略高于50%的分类器)。
    • 相对的,集成学习则是强学习器(通过一定的方式集成一些弱学习器,达到了超过所有弱学习器的准确度的分类器)。

集成学习本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。集成学习可以用于

  • 分类问题集成、回归问题集成、特征选取集成、异常点检测集成等等,可以说所有的机器学习领域都可以看到集成学习的身影。

常见的集成学习算法包括 Boosting、Bagging(Bootstrap Aggregating)、Voting(其实 voting 严格来说不算)、Stacking 等。
在这里插入图片描述

1.2 什么是集成学习

从下图,对集成学习的思想做一个概括。对于训练集数据,通过训练若干个个体学习器,通过一定的结合策略,来完成学习任务,(常常可以获得比单一学习显著优越的学习器)就可以最终形成一个强学习器。
在这里插入图片描述
集成学习是一种技术框架,其按照不同的思路来组合基础模型,从而达到更好的目的。集成学习有两个主要的问题需要解决:

  • 第一是如何得到若干个个体学习器,
  • 第二是如何选择一种结合策略,将这些个体学习器集合成一个强学习器。

2. 如何得到若干个个体学习器

对于如何得到若干个个体学习器,这里有两种选择。

  • 第一种是所有的个体学习器都是一个种类的,或者说是同质的。
    • 比如都是决策树个体学习器,或者都是神经网络个体学习器。比如 bagging 和 boosting 系列。
  • 第二种是所有的个体学习器不全是一个种类的,或者说是异质的。
    • 比如我们有一个分类问题,对训练集采用支持向量机个体学习器、逻辑回归个体学习器、朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。这种集成学习成为 Stacking。

同质的个体学习器按照个体学习器之间是否存在依赖关系可以分为两类。

  • 第一种是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是Boosting系列算法。
  • 第二种是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是Bagging系列算法。

2.1 集成学习之 Bagging

  • 代表算法:随机森林(Random Forest)

Bagging(训练多个分类器取平均):从训练集从进行子抽样组成每个基模型所需要的子训练集,然后对所有基模型预测的结果进行综合产生最终的预测结果。
在这里插入图片描述
1)Bagging工作机制:

  • 从原始样本集中抽取训练集。每轮从原始样本集中使用自助采样法(Bootstraping)抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中),共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的);
  • 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等);
  • 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;
  • 对回归问题:计算上述模型的均值作为最后的结果。(所有模型的重要性相同)。

2)训练集随机采样
Bagging的个体弱学习器的训练集是通过随机采样得到的。

  • 通过T次的随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略来得到最终的强学习器。
  • 对于这里的随机采样,一般采用的是自助采样法(Bootstrap sampling),即对于m个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集m次,最终可以得到m个样本的采样集,由于是随机采样,这样每次的采样集是和原始训练集不同的,和其他采样集也是不同的,这样得到多个不同的弱学习器。

3)随机森林(Random Forest)
随机森林:很多个决策树并行放在一起,数据采样随机,特征选择随机,都是有放回的随机选取。它是bagging的一个特化进阶版。

  • 所谓的特化是因为随机森林的弱学习器都是决策树。
  • 所谓的进阶是随机森林在bagging的样本随机采样基础上,又加上了特征的随机选择,其基本思想没有脱离bagging的范畴。

2.2 集成学习之 Boosting

  • 代表算法:AdaBoost, Xgboost,GBDT

Boosting(提升算法,从弱学习器开始加强,通过加权来进行训练):训练过程为阶梯状,基模型按次序一、一进行训练(理论上为串行,但实现上可以做到并行)。

  • 基模型的训练集按照某种策略每次都进行一定的转化。如果某一个数据在这次分错了,那么在下一次我就会给它更大的权重。对所有基模型预测的结果进行线性综合产生最终的预测结果。
    在这里插入图片描述

1)Boosting工作机制:

  • 首先从训练集用初始权重训练出一个弱学习器1;
  • 再根据弱学习的学习误差率表现来更新训练样本的权重,使之前弱学习器1学习误差率高的训练样本点的权重变高,即让误差率高的点在后面的弱学习器2中得到更多的重视;
  • 然后基于调整权重后的训练集来训练弱学习器2;
  • 如此重复进行,直到弱学习器数达到事先指定的数目T;
  • 最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。

2)关于Boosting的两个核心问题:

  • 在每一轮如何改变训练数据的权值或概率分布?

    • 通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。
  • 通过什么方式来组合弱分类器?

    • 通过加法模型将弱分类器进行线性组合,
      • 比如:AdaBoost(Adaptive boosting)算法:刚开始训练时对每一个训练例赋相等的权重,然后用该算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数。通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。
      • GBDT(Gradient Boost Decision Tree),每一次的计算是为了减少上一次的残差,GBDT在残差减少(负梯度)的方向上建立一个新的模型。

2.3 集成学习之 Stacking

stacking(堆叠各种各样的分类器(KNN,SVM,RF等等),分阶段操作:

  • 第一阶段输入数据特征得出各个基模型的结果;
  • 第二阶段再用前一阶段结果训练得到分类结果。
    • 训练一个模型用于组合各个基模型的结果): 将训练好的所有基模型对训练基进行预测,第 j 个基模型对第 i 个训练样本的预测值将作为新的训练集中第 i 个样本的第 j 个特征值,最后基于新的训练集进行训练。
      • 就相当于,假设又n个样本,有k个基学习器,那么新的训练集就是 n * k 的大小,维度为k。
    • 同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后再对测试集进行预测。

在这里插入图片描述

1)Stacking工作机制:

  • 首先先训练多个不同的模型;
  • 然后把之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。

2)Stacking 训练一个模型用于组合(combine)其他各个基模型。

  • 具体方法是把数据分成两部分,用其中一部分训练几个基模型A1,A2,A3,用另一部分数据测试这几个基模型,把A1,A2,A3的输出作为输入,训练组合模型B。
  • 注意,它不是把模型的结果组织起来,而把模型组织起来。理论上,Stacking可以组织任何模型,实际中常使用单层logistic回归作为模型。(一定有疑问,看起来更像是组织结果?其实组织模型的结果本质上也是组织模型的一种方式。)
  • Sklearn中也实现了stacking模型:StackingClassifier。

2.4 小结

综上按照个体学习器之间的关系,集成学习一般分为Bagging、Boosting、Stacking三大类(我们可以把它简单地看成并行,串行和树型)。

  • Bagging是把各个基模型的结果组织起来,取一个折中的结果;
  • Boosting是根据旧模型中的错误来训练新模型,层层改进;
  • Stacking是把基模型组织起来,注意不是组织结果,而是组织基模型本身,该方法看起来更灵活,也更复杂。

3. 如何选择一种结合策略

假设我们得到的T个弱学习器是: { h 1 , h 2 , . . . h T } \{h_1,h_2,...h_T\} {h1,h2,...hT}

3.1 平均法

对于数值类的回归预测问题,通常使用的结合策略是平均法,也就是说,对于若干个弱学习器的输出进行平均得到最终的预测输出。

  • 最简单的平均是算术平均,也就是说最终预测是: H ( x ) = ∑ i = 1 T h i ( x ) H(x)=\sum_{i=1}^T h_i(x) H(x)=i=1Thi(x)

  • 如果每个个体学习器有一个权重ww,则最终预测是: H ( x ) = ∑ i = 1 T w i h i ( x ) H(x)=\sum_{i=1}^T w_ih_i(x) H(x)=i=1Twihi(x)
    其中 w i w_i wi 是个体学习器 h i h_i hi 的权重,通常有: w i ≥ 0 , ∑ i = 1 T w i = 1 wi≥0, \sum_{i=1}^Tw_i=1 wi0,i=1Twi=1

3.2 投票法

对于分类问题的预测,我们通常使用的是投票法。假设我们的预测类别是{c1,c2,…cK},对于任意一个预测样本x,我们的T个弱学习器的预测结果分别是 {h1(x),h2(x)…hT(x)}。

  • 最简单的投票法是相对多数投票法,也就是我们常说的少数服从多数,也就是T个弱学习器的对样本x的预测结果中,数量最多的类别cici为最终的分类类别。如果不止一个类别获得最高票,则随机选择一个做最终类别。
  • 稍微复杂的投票法是绝对多数投票法,也就是我们常说的要票过半数。在相对多数投票法的基础上,不光要求获得最高票,还要求票过半数。否则会拒绝预测。
  • 更加复杂的是加权投票法,和加权平均法一样,每个弱学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。

3.3 学习法

上面两类方法都是对弱学习器的结果做平均或者投票,相对比较简单,但是可能学习误差较大,于是就有了学习法这种方法。

  • 对于学习法,代表方法是stacking,当使用stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
  • 在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。
  • 对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。

4. 总结

集成方法是将几种机器学习技术组合成一个预测模型的元算法,以达到减小方差(bagging)、偏差(boosting)或改进预测(stacking)的效果。集成学习法的特点:

① 将多个分类方法聚集在一起,以提高分类的准确率。(这些算法可以是不同的算法,也可以是相同的算法。)

② 集成学习法由训练数据构建一组基分类器,然后通过对每个基分类器的预测进行投票来进行分类

③ 严格来说,集成学习并不算是一种分类器,而是一种分类器结合的方法。

④ 通常一个集成分类器的分类性能会好于单个分类器

⑤ 如果把单个分类器比作一个决策者的话,集成学习的方法就相当于多个决策者共同进行一项决策。

5. 补充

1)Bagging,Boosting二者之间的区别

  • 样本选择上:
    • Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
    • Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
  • 样例权重:
    • Bagging:使用均匀取样,每个样例的权重相等
    • Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
  • 预测函数:
    • Bagging:所有预测函数的权重相等。
    • Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
  • 并行计算:
    • Bagging:各个预测函数可以并行生成
    • Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

2)决策树与这些算法框架进行结合所得到的新的算法:

  • Bagging + 决策树 = 随机森林
  • AdaBoost + 决策树 = 提升树
  • Gradient Boosting + 决策树 = GBDT

参考

【1】https://blog.csdn.net/xiao_yi_xiao/article/details/124040296

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

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

相关文章

《Netty》从零开始学netty源码(五十三)之PoolThreadCache的功能

allocateNormal 在前面分析PoolArena的分配内存的方法中,每次分配都是先从本地线程缓存中分配,本地线程缓存PoolThreadCache的分配方法如下: 分配过程主要有两步: 从PoolThreadCache的缓存数组中获取相应大小的缓存cache将需要…

手残也不该敲的命令

Linux命令是一种很有趣且有用的东西,但在你不知道会带来什么后果的时候,它又会显得非常危险。所以,在输入某些命令前,请多多检查再敲回车。 rm –rf rm –rf是删除文件夹和里面附带内容的一种最快捷的方法,但是细微的…

mybatis拦截器统一处理createBy、createTime、updateBy等字段

一、问题描述 createBy 、createTime、updateBy等字段是我们创建表的时候经常要用到的几个字段,但是我们不可能每一次在增删改查的时候都手动去修改或者添加这几个字段的属性值,我们可以在系统层面统一处理,如何实现呢? 二、实现…

轻松掌握KubeKey单节点和集群安装k8s和kubesphere

1、KubeKey单节点AllInOne装kubesphere及k8s 如果只想安装k8s,注意在命令里不指定kubesphere即可。 1、设置hostname hostnamectl set-hostname k8s-node05 2、准备KubeKey export KKZONEcncurl -sfL https://get-kk.kubesphere.io | VERSIONv1.1.1 sh -chmod …

Codeforces Round 867 (Div. 3) AK题解

目录 A. TubeTube Feed(签到) 题意: 思路: 代码: B. Karina and Array(签到) 题意: 思路: 代码: C. Bun Lover(结论) 题意&…

C++类和对象(5)

类和对象 1.流插入和流提取的运算符重载2.const成员3.取地址及const取地址操作符重载 1.流插入和流提取的运算符重载 通过函数重载&#xff0c;可以对流插入运算符和流提取运算符进行运算符重载。<<流插入在ostream中&#xff0c;>>流提取在istream中。 ① 流提取…

SpringCloud全面学习笔记之初窥门径篇

目录 前言Docker初见小鲸鱼Docker架构Docker的安装Docker基操Dockerfile自定义镜像Docker-ComposeDocker镜像仓库 异步通信初识MQ同步通讯异步通讯MQ常见框架 RabbitMQ快速入门RabbitMQ概述和安装常见消息模型快速入门 SpringAMQPBasic Queue 简单队列模型Work Queue 工作队列模…

ChatGPT - 高效编写Prompt

文章目录 概念prompt基本结构如何编写prompt指导组合使用将指令提示、角色提示和种子词提示技术结合使用&#xff1a;将标准提示、角色提示和种子词提示技术结合使用的示例&#xff1a; 资料 概念 prompt 是给预训练语言模型 的一个线索/提示&#xff0c;更好的理解 人类的问题…

深入剖析PyTorch和TensorFlow:理解二者的区别与联系

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

java基础入门-02-【面向对象】

Java基础入门-02-【面向对象】 8、面向对象8.1. 类和对象8.1.1 类和对象的理解8.1.2 类的定义8.1.3 对象的使用8.1.4 学生对象-练习 8.2. 对象内存图8.2.1 单个对象内存图8.2.2 多个对象内存图 8.3. 成员变量和局部变量8.3.1 成员变量和局部变量的区别 8.4. 封装8.4.1 封装思想…

JavaSE基础(四)—— 数组、内存分配

目录 一、数组的定义 1. 静态初始化数组 1.1 数组的访问 1.2 数组的几个注意事项 2. 动态初始化数组 2.1 动态初始化数组的元素默认值 3. 两种初始化的的使用场景总结、注意事项说明 二、数组的遍历 三、数组的案例 1. 数组元素求和 2. 数组求最值 3. 数组…

系统辨识——最小二乘法

基本原理 数学推导 最小二乘法是通过输入数据与输出数据来拟合已知结构的函数关系&#xff0c;也就是说已知二者的函数关系&#xff0c;通过最小二乘法估计函数的相关参数。假设 x , y x,y x,y存在以下函数关系&#xff1a; 但是在实际中&#xff0c;测量数据时存在测量误差或…

JavaScript call,callee,caller,apply,bind之间的区别

&#xff08;现实是此岸&#xff0c;梦想是彼岸&#xff0c;中间隔着湍急的河流&#xff0c;行动则是架在河上的桥梁。——克雷洛夫&#xff09; call call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。 MDN链接 call方法可以将一个对象属性作为…

ChatGPT AI使用成本

LLM “经济学”&#xff1a;ChatGPT 与开源模型&#xff0c;二者之间有哪些优劣权衡&#xff1f;谁的部署成本更低&#xff1f; 太长不看版&#xff1a;对于日均请求在 1000 次左右的低频使用场景&#xff0c;ChatGPT 的实现成本低于部署在 AWS 上的开源大模型。但面对每天数以…

Qt 从入门到入土

本文目录 1. Qt 概述1.1 什么是 Qt1.2 Qt 的发展史1.3 支持的平台1.4 Qt 的版本1.5 Qt 的优点1.6 成功案例 2. 创建 Qt 项目2.1 使用向导创建2.2 手动创建2.3 .pro文件2.4 一个最简单的 Qt 应用程序2.5 Qt 命名规范和常用快捷键 3. 第一个 Qt 小程序3.1 按钮的创建3.2 对象模型…

基于springboot的学生成绩管理系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

LeetCode第2题——两数相加(Java)

题目描述&#xff1a; ​ 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 ​ 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 ​ 你可以假设除了数字 0 之外…

考研数据结构--数组与广义表

数组与广义表 文章目录 数组与广义表数组数组的基本概念性质数组的存储结构一维数组的存储结构二维数组的存储结构 特殊矩阵的压缩存储对称矩阵上三角矩阵下三角矩阵对角矩阵 稀疏矩阵定义稀疏矩阵的三元组表示稀疏矩阵的存储结构及其基本运算算法定义存入三元组三元组元素赋值…

ChatGPT in Drug Discovery

ChatGPT是OpenAI开发的一种语言模型。这是一个在大型人类语言数据集上训练的机器学习模型&#xff0c;能够生成类似人类语言文本。它可以用于各种自然语言处理任务&#xff0c;如语言翻译、文本摘要和问题回答。在目前的工作中&#xff0c;我们讨论了ChatGPT在药物发现中的应用…

矩阵乘法之叉乘和点乘

矩阵的乘法包含两种&#xff1a;点乘和叉乘。 矩阵点乘的含义是对应元素相乘&#xff0c;例如矩阵&#xff0c;同样存在矩阵, 那么. 矩阵叉乘含义与我们平时理解矩阵相乘一致&#xff0c;即一个矩阵A&#xff0c;若要与另外一个矩阵相乘&#xff0c;另另外一个矩阵的行数必须…