【机器学习系列】深入理解集成学习:从Bagging到Boosting

2024-06-10 22:44

本文主要是介绍【机器学习系列】深入理解集成学习:从Bagging到Boosting,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、集成方法的一般思想

二、集成方法的基本原理

三、构建集成分类器的方法

常见的有装袋(Bagging)和提升(Boosting)两种方法

方法1 :装袋(Bagging)

Bagging原理如下图:

方法2 :提升(Boosting) 

Boosting工作原理

目前已有几个Boosting算法,其区别在于:

四、随机森林(Bagging集成方法的一种)

(一)随机森林bagging的思想:

(二)随机森林中的每棵树是怎么生成的呢?

(三) 为什么要随机抽样训练集?

(四)为什么要有放回地抽样?

随机森林Python实现

五、Adaboosting (Boosting集成方法的一种)

(一)基本思想

(二)Adaboosting举例说明 

本文将探讨集成学习方法的核心概念,包括其基本原理和两种主流技术:装袋(Bagging)与提升(Boosting)。我们将深入了解随机森林——一种基于Bagging的集成方法,并讨论其背后的思想、树的生成过程以及抽样策略。同时,我们也将介绍Adaboost算法的基本思想和工作原理,并通过实例加以说明。通过这篇文章,读者可以获得对集成分类器构建方法的全面了解,并掌握如何在Python中实现随机森林。

一、集成方法的一般思想

聚集多个分类器的预测来提高分类准确率,这种技术称为组合(ensemble)分类器组合(classifier combination)方法,也就是集成方法

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

二、集成方法的基本原理

假定有 25 基分类器:
每个基分类器的误差均为 e = 0.35
假定基分类器是独立的
通过对这些基分类器的预测进行多数表决方法预测类标号
仅当超过一半的基分类器都预测错误时,组合分类器才会做出错误的预测,此时误差率为:
远远低于基分类器的误差率。
下图显示对于不同的基分类器误差率 e 下的 25 个二元分类器的组合分类器误差率           。
对角虚线表示所有基分类器都是等同的情况
实线表示所有基分类器独立时的情况
e > 0.5 时,组合分类器的性能不如基分类器

三、构建集成分类器的方法

基本思想:

 在原始数据上构建多个分类器,然后在分类未知样本时聚集它们的预测结果。

常见的有装袋(Bagging)和提升(Boosting)两种方法

方法1 :装袋(Bagging)

Bagging原理如下图:

对于未知样本Z,预测Z的类标号

方法2 :提升(Boosting) 

Boosting 方法是一种用来提高 弱分类算法 准确度的方法。
通过构造一个预测 函数 系列 , 然后以一定的方式将他们组合成一个预测函数。
Boosting 是一种提高任意给定学习算法准确度的方法。

Boosting 方法是一种针对提高弱分类算法准确度的有效技术。该方法的核心思想是通过构建一系列的预测函数,并将它们以特定的方式组合起来,从而形成一个更为强大和精准的预测模型。

具体而言,Boosting 通过以下步骤来提升任意给定学习算法的准确度:

  1. 初始化:首先选择一个弱分类器作为基础模型,并确定一个权重分配方案,初始时通常所有数据点的权重相等。

  2. 迭代训练:在每一轮迭代中,根据上一次迭代中分类错误的样本调整权重,使得错误分类的样本在下一轮迭代中得到更多的关注。然后,使用调整后的权重训练新的弱分类器。

  3. 组合预测:将每个弱分类器的预测结果按照一定的权重进行组合,通常是加权投票或加权平均,以形成最终的预测函数。这个组合过程能够有效提升整体模型的准确度。

Boosting 方法的特点在于:

  • 逐步增强:通过迭代的方式逐步增强模型的预测能力,每一步都试图修正上一步的错误。
  • 权重调整:动态调整样本权重,使得模型在后续的学习过程中更加关注那些难以分类的样本。
  • 模型组合:将多个弱分类器智能组合,形成一个强大的分类器,通常比单个分类器具有更高的准确度和鲁棒性。

总之,Boosting 是一种通用且强大的机器学习算法增强技术,它能够显著提升弱分类算法的性能,使其在许多实际问题中达到或接近最优的分类效果。

其核心思想是“ 三个臭皮匠,顶过诸葛亮 ”。

Boosting工作原理

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

 

 

目前已有几个Boosting算法,其区别在于:

1)每轮Boosting结束时如何更新训练样本的权值;

2)如何组合每个分类器的预测。

四、随机森林(Bagging集成方法的一种)

       随机森林就是通过集成学习的思想将多棵树集成的一种算法它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习方法。

      随机森林的名称中有两个关键词,一个是“随机”,一个就是“森林”。

     “森林”很好理解,一棵叫做树,那么成百上千棵就可以叫做森林了,其实这也是随机森林的主要思想--集成思想的体现。“随机”的包括随机选取训练样本集随机选取分裂属性集。 

      从直观角度来解释,每棵决策树都是一个分类器(假设现在针对的是分类问题),那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出。

(一)随机森林bagging的思想:

 将若干个弱分类器的分类结果进行投票选择,从而组成一个强分类器。

(二)随机森林中的每棵树是怎么生成的呢?

一开始提到的随机森林中的“随机”就是指的步骤a和步骤b中的两个随机性。两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感) 。

(三) 为什么要随机抽样训练集?

如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的,这样的话完全没有集成的必要

(四)为什么要有放回地抽样?

如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是有偏的"片面的",也就是说每棵树训练出来都是有很大的差异的;

而随机森林最后分类取决于多棵树(弱分类器)的投票表决,这种表决应该是"求同",因此使用完全不同的训练集来训练每棵树这样对最终分类结果是没有帮助的。

随机森林Python实现

请看下方链接

【机器学习系列】掌握随机森林:从基础原理到参数优化的全面指南_随机森林算法参数解释及调优-CSDN博客

五、Adaboosting (Boosting集成方法的一种)

(一)基本思想

如果错误率ei 接近0,则  αi 有一个很大的正值。

如果错误率ei 接近1,则 αi  有一个很大的负值。

(二)Adaboosting举例说明 

 

 

这篇关于【机器学习系列】深入理解集成学习:从Bagging到Boosting的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

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

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

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规