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

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

相关文章

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public

SpringBoot3集成swagger文档的使用方法

《SpringBoot3集成swagger文档的使用方法》本文介绍了Swagger的诞生背景、主要功能以及如何在SpringBoot3中集成Swagger文档,Swagger可以帮助自动生成API文档... 目录一、前言1. API 文档自动生成2. 交互式 API 测试3. API 设计和开发协作二、使用

SpringBoot如何集成Kaptcha验证码

《SpringBoot如何集成Kaptcha验证码》本文介绍了如何在Java开发中使用Kaptcha生成验证码的功能,包括在pom.xml中配置依赖、在系统公共配置类中添加配置、在控制器中添加生成验证... 目录SpringBoot集成Kaptcha验证码简介实现步骤1. 在 pom.XML 配置文件中2.

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06