集成学习----“三个臭皮匠,赛过诸葛亮”

2024-02-12 02:30

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

集成学习(Ensemble Learning)通过使用一些方法改变原始训练样本的分布,来构建多个不同的学习器,再结合这多个学习器来完成学习任务,常可获得比单一学习器显著优越的泛化性能。该过程中多个不同的分类器,叫做个体学习器或者基学习器。个体分类器之间要具备一定的差异性和准确性,即尽可能“好而不同”,个体分类器的准确度要大于0.5。集成学习的研究核心有二个内容:一者是如何构建具备一定差异性和准确率的基学习器,二者为如何整合多个不同的学习器,提升学习性能。

根据个体学习器的生成方式,当前集成学习方法大致可分为二类:1.个体学习器之间存在强依赖关系,必须串行生成的序列化方法,以Boosting为代表;2.个体学习器之间不存在依赖关系,可以同时生成的并行方法,以Bagging、随机森林(Random Forest)为代表。

在正式介绍上述二类方法之前,先回顾二方面内容:

1.偏差-方差

如图所示,蓝色点为样本的训练期望值,红色区域为样本的真实值。偏差(Bias)指的是样本期望值与真实值之间的误差,方差指的是随机变量在其期望值附近的波动程度。

2.Bootstrap采样法

  Bootstrap是一种自助采样法,“有放回抽样”的经典样本估计算法。其假设观察样本即为数据总样本,再由假定总体抽取子样本,即再抽样。后续的Bagging、Boosting、随机森林等算法的样本抽样算法用的都是Bootstrap。

Boosting

Boosting是一种可把弱学习器提升为强学习器的算法。先从初始训练集训练出一个基学习器,再根据基学习器的表现改变原始训练样本的分布进行调整,使得先前学习器做错的训练样本在后续得到更高的关注,再进一步学习新的学习器。典型的算法是AdaBoost:对训练样本初始化相同的权重,训练一个基学习器,根据该学习器的表现,给予判断错误的样本更高的权重,改变训练样本的权重分布,在训练新的学习器;迭代进行上述步骤。

从偏差-方差的角度来看,Boosting主要关注降低偏差。每一次迭代都是在上一轮的基础上拟合训练样本,因此偏差逐渐降低。那么对于基分类器来说,目标是降低方差,故而常选择更简单的深度很浅的决策树;若基学习器过于复杂,则方差较大,容易产生过拟合,因此,Boosting的基本模型必须是“弱模型”,具备“高偏差低方差”的特点。

Bagging

给定包含m个样本的数据集,随机取出一个样本放入采样集中,再放回数据集。经过m次随机采样操作,得到包含m个样本的采样集。初始采样集中,可能存在样本多次出现。采样出T个包含m个训练样本的采样集,分别训练基学习器,再将T个基学习器进行整合,这就是Bagging算法。T个基学习器间相互独立,可以并行生成,性能较为平均,方差小,因此基分类器的目标是降低偏差,常采用较深而且不剪枝的决策树、神经网络。从偏差-方差的角度来看,Bagging主要关注降低方差。与Boosting相比,Boosting的拟合效果更好(偏差更小);Bagging的方差更小,更不易发生过拟合。Bagging的基本模型必须是“强模型”,具备“高方差低偏差”的特点。

随机森林

随机森林是在Bagging的基础上改进的,不仅是用了数据样本扰动,还使用了属性扰动的多样性增强机制,大大减少了产生过拟合的可能性,因此不需要剪枝。传统决策树在划分属性时,在当前节点的属性集合中选择一个最优属性;而在RF中,先从当前节点的属性集合中随机选择k个属性,再计算一个最优属性用于划分。

基分类器整合策略

1.投票法:多用于分类任务

2.平均法:多用于回归任务

3.学习法:如Stacking算法:使用交叉验证法,将原始训练样本划分为不相交的k个子集;每个子集按照7:3的比例分为训练集和测试集,利用训练集生成初级学习器;使用测试集对初级学习器进行测试,得到的预测结果作为次级学习器的输入,将正确输出作为输出,训练一个更高层的学习器。

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



http://www.chinasem.cn/article/701439

相关文章

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

SpringBoot集成EasyPoi实现Excel模板导出成PDF文件

《SpringBoot集成EasyPoi实现Excel模板导出成PDF文件》在日常工作中,我们经常需要将数据导出成Excel表格或PDF文件,本文将介绍如何在SpringBoot项目中集成EasyPo... 目录前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍测试用例小结前言在日常工作中,我们经

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte