集成学习概述:三个臭皮匠顶个诸葛亮

2024-02-12 02:30

本文主要是介绍集成学习概述:三个臭皮匠顶个诸葛亮,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“AI派”,选择“设为星标
最新分享,第一时间送达! 640?wx_fmt=gif

本文是《机器学习宝典》第 16篇,读完本文你能够对集成学习有一个简单的认识和理解。

上一篇介绍了面试常考的一个问题:回归决策树,这一篇我们来介绍下集成学习。在生活中,你是不是也会遇到这样的场景:当你对一件事情的判断没有把握的时候,通常会再咨询几个人,听听他们的观点,最后再做出决策。其实这反映出了一个思想:群体决策通常比个体决策更优,用句俗语来说就是:三个臭皮匠顶个诸葛亮。将这个思想应用于机器学习中就是集成学习(ensemble learning)。

为什么集成学习能够提升效果呢

为什么集成学习能够比单模型的效果更好呢?我们从以下几个角度考虑下:

从统计的角度来看,机器学习的任务可用认为是寻找一个最佳的假设空间。在没有充足的数据情况下,学习任务可以找到多个性能差不多的假设空间。如果融合多个模型的预测及过,可以降低预测错误的风险。外面的曲线表示假设空间,内部的曲线表示在训练集上具有不错性能的假设,点 640?wx_fmt=png 表示真实的假设 。我们看到,通过平均这些性能不错的假设,可以得到一个逼近 640?wx_fmt=png 的优化假设 。

640?wx_fmt=png

从计算的角度来看,很多优化算法采用局部搜索的方式来寻找最佳参数,这样很容易陷入局部最优解。融合多个模型可以看做是同一个训练集、从不同的起始点进行局部搜索,然后进行结合。这样可以降低陷入局部最优解的风向。

640?wx_fmt=png

从表示的角度来看,理论上,如果给出足够的训练数据,很多算法可以表示所有的情况,例如神经网络和决策树。但是在很多实际应用中,能够用于训练的数据是有限的。有些学习任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时如果使用单模型肯定无效 。模型融合可以使假设空间扩大,从而使得这些学习任务可能得到正确的表示。

640?wx_fmt=png

在集成学习中,参与融合的模型叫做基模型,想要使得集成学习的效果好,基模型应该”好而不同“。也就是说,基模型的准确率不能太低,同时基模型之间的多样性(差异性)。

如何增加模型多样性

我们已经知道,增加基模型的多样性能够提高集成学习的效果。一般增加基模型多样性的思路是在学习过程中引入随机性。常见的做法是对数据样本、输入特征、输出结果、算法参数进行扰动。

数据样本扰动

从初始的数据集中产生不同的数据子集,然后利用数据子集训练出不同的基模型。数据样本扰动通常是基于采样法。这种做法简单高效,使用最广。对于不稳定的基学习器(决策树、神经网路等)很有效果,对于一些稳定基学习器(线性学习器、支持向量机、朴素贝叶斯、k近邻算法等)效果不佳。

输入特征扰动

训练样本通常由 一组特征描述 , 不同的"子空间"提供了观察数据的不同视角 。如果数据包含大量冗余特征, 使用特征扰动会有好处(节省时间 、 多样性提升等);但是若样本数据特征较少或冗余特征很少,则输入特征扰动不适宜使用 。

输出表示扰动

此类做法的基本思路是对输出表示进行操作以增强多样性。如将多分类任务转换为多个二分类任务来训练基模型;“输出调制法”将分类输出转换为回归输出来训练基模型。

算法参数扰动

模型训练一般都需要进行参数调整,比如神经网络的隐藏层结点数、决策树的树深等。这些参数被赋予不同的值可以生成不同的基模型。

其实,我们可以同时采样多种方式来增强模型多样性,比如随机森林同时使用了数据样本扰动和输入特征扰动两种方式。

结合策略

当获得了多个基模型之后,如何将他们组合到一起呢?组合策略主要关注的就是将多个基模型通过某种方式融合后能够提升最后的效果。

假设有 640?wx_fmt=png 个基模型 640?wx_fmt=png,组合后的结果为 640?wx_fmt=png,对于回归任务,常见的有两种基础集成策略:简单平均加权平均

简单平均是将所有基模型的结果平均后作为集成后的结果:
640?wx_fmt=png
加权平均是说每个基模型的结果权重可以不同,这些权重可以人工制定,也可以从训练数据中学习得到。例如估计出个体学习器的误差,之后令权重大小与误差大小成反比。
640?wx_fmt=png
不过由于现实生活中训练样本通常不充分或者存在噪音,这使得学习到的权重不完全可靠。因此,加权平均的效果未必一定优于简单平均效果。一般而言,在个体学习器性能相差较大时宜使用加权平均,而在个体学习器性能相近时宜使用简单平均。

对于分类任务,由于预测的结果可以是类别,也可以是类别概率,对应的可以分为硬投票软投票。硬投票是采用投票法来融合输出为类别的基模型,软投票则是融合输出为类别概率的基模型。对于硬投票来说,常见的有:绝对多数投票法相对多数投票法加权投票法。对于软投票来说,融合的方式与回归任务中类似,所以这里就主要介绍硬投票相关的融合方式。

绝对投票法是将超过半数基模型预测的类别作为最终的结果,如果有的样本没有那个类别的票数超过了一半,这时候就拒绝预测。

640?wx_fmt=png

其中640?wx_fmt=png表示基模型640?wx_fmt=png在类别 c 上的输出,结果为 1 或 0 。

绝对投票法中会出现“拒绝预测”的情况,如果必须要求提供预测结果,可以考虑使用相对多数投票法。相对多数投票法会将基模型投票次数最多的类别作为最后的输出结果,所以不存在拒绝预测。
640?wx_fmt=png
如果基模型的性能差异较大,从直观上来看,让性能更好的模型掌握更多的投票权更合理一些,因此出现了加权投票法。也就是不同的基模型可以有不同的投票权重。

640?wx_fmt=png

当数据量比较大时,可以通过“学习法”来组合模型,常用的一种叫做 Stacking。Stacking 基于原始数据训练多个基模型,将基模型的输出和原始数据中的目标分别作为新训练集的特征和目标,在新训练集上训练二级模型,将二级模型的输出作为 Stacking 的输出。见下图:

640?wx_fmt=jpeg

集成算法

除了前面介绍的模型集合策略外,这里介绍两个集成算法:BaggingBoosting 。集成算法更关注的是将基模型经过集成算法来提高模型的泛化能力。

Bagging

Bagging 是的思想是从训练集从进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终的预测结果,见下图:

640?wx_fmt=jpeg

可以看到,需要说明的是,Bagging 采用自助采样法(Bootstrap sampling)进行采样,即对于m个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集m次,最终可以得到m个样本的采样集。

如果 Bagging 中基学习器都是决策树的话,这时候就属于随机森林算法了,这个之后文章再介绍。

Boosting

与 Bagging 不同的是,Boosting 训练过程为阶梯状,基模型按次序一一进行训练,基模型的训练集按照某种策略每次都进行一定的转化。对所有基模型预测的结果进行线性综合产生最终的预测结果,见下图:

640?wx_fmt=jpeg

常见的 Boosting 模型有 AdaBoost(Adaptive boosting)算法以及 Gradient Boosting 算法。

Bagging 和 Boosting 的区别

Bagging 可以认为是并行的集成方式,它能够并行的生成相对独立的基模型,Bagging 集成后模型的偏差与基模型近似,但是由于存在多个相对独立的基模型,所以集成后的模型方差会比单个基模型降低。也就是说,Bagging 通过降低方差,提高了模型的泛化能力。

Boosting 可以认为是串行的集成方式,它生成的基模型依赖于前一个基模型,Bagging 集成后模型的方差与基模型近似,但是由于每个基模型都在“纠正”前一个基模型的结果,所以集成后的模型偏差会比单个基模型降低。也就是说,Boosting 通过降低偏差,提高了模型的泛化能力。

参考:

  1. 集成学习(ensemble learning)应如何入门?(https://www.zhihu.com/question/29036379/answer/111637662)

  2. 独家 |从基础到实现:集成学习综合教程(https://zhuanlan.zhihu.com/p/40485758)

  3. 美团机器学习实战

??扫码查看《机器学习宝典》历史内容

640?wx_fmt=png


(完)




我开通了知识星球,在星球里会分享我个人在数据分析/机器学习/深度学习/推荐系统方面的所学和所得。当前正在星球里分享我录制的机器学习视频课,如果想快速入门和提高自己,可以加入我的星球来交流(加入方式:扫描下方二维码或者点击“阅读原文”)。


640?wx_fmt=png 640

人人都是数据分析师,人人都能玩转Pandas | Numpy 精品系列教程汇总 | 我是如何入门机器学习的呢 | 谷歌机器学习43条黄金法则


640

640?wx_fmt=png


长按,识别二维码,加关注


这篇关于集成学习概述:三个臭皮匠顶个诸葛亮的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/Xw_Classmate/article/details/95426232
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/701446

相关文章

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

springboot2.1.3 hystrix集成及hystrix-dashboard监控详解

《springboot2.1.3hystrix集成及hystrix-dashboard监控详解》Hystrix是Netflix开源的微服务容错工具,通过线程池隔离和熔断机制防止服务崩溃,支持降级、监... 目录Hystrix是Netflix开源技术www.chinasem.cn栈中的又一员猛将Hystrix熔

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

SpringBoot集成P6Spy的实现示例

《SpringBoot集成P6Spy的实现示例》本文主要介绍了SpringBoot集成P6Spy的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录本节目标P6Spy简介抛出问题集成P6Spy1. SpringBoot三板斧之加入依赖2. 修改

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

springboot项目中集成shiro+jwt完整实例代码

《springboot项目中集成shiro+jwt完整实例代码》本文详细介绍如何在项目中集成Shiro和JWT,实现用户登录校验、token携带及接口权限管理,涉及自定义Realm、ModularRe... 目录简介目的需要的jar集成过程1.配置shiro2.创建自定义Realm2.1 LoginReal

SpringBoot集成Shiro+JWT(Hutool)完整代码示例

《SpringBoot集成Shiro+JWT(Hutool)完整代码示例》ApacheShiro是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,在现代应用开发中,Shiro因... 目录一、背景介绍1.1 为什么使用Shiro?1.2 为什么需要双Token?二、技术栈组成三、环境

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心