集成学习(Bagging、Boosting、Stacking)

2023-12-05 10:58

本文主要是介绍集成学习(Bagging、Boosting、Stacking),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

组合多个学习器:集成方法(ensemble method)元算法(meta-algorithm)

  • 不同算法的集成(集成个体应“好而不同”)
  • 同一算法在不同设置的集成
  • 数据集不同部分分配给不同分类器之后的集成

集成学习中需要有效地生成多样性大的个体学习器,需要多样性增强

  • 数据样本 进行扰动(敏感:决策树、神经网络; 不敏感:线性学习器、支持向量机、朴素贝叶斯、k近邻)
  • 输入属性 进行扰动
  • 输出表示 进行扰动
  • 算法参数 进行扰动

目前的集成学习方法大致可分为两大类:

  • 个体学习器之间存在强依赖关系,必须串行生成的序列化方法
  • 个体学习器不存在强依赖关系,可以同时生成的并行化方法

Bagging

也称自举汇聚法(bootstrap aggregating),是在原始数据集选择T次后得到T个新数据集。通过放回取样得到(比如要得到一个大小为n的新数据集,该数据集中的每个样本都是在原始数据集中随机取样,即抽样之后又放回)得到。基于每个采样集训练出一个基学习器,再将这些基学习器结合,在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务采用简单平均法。Bagging主要关注降低方差

为啥有放回取样?:训练数据不同,我们获得的基学习器可望具有比较大的差异。然而,如果采样出的子集都完全不同,则每个基学习器只用到了一小部分训练数据,甚至不足以进行有效学习,显然无法产生比较好的基学习器。所以,采取相互有交叠的采样子集。

对于一个样本,它在某一次含m个样本的训练集的随机采样中,每次被采集到的概率是1/m。不被采集到的概率为1-1/m。如果m次采样都没有被采集中的概率是(1-1/m)^m, 当m→∞时,(1-1/m)^m→1/e≃0.368。也就是说,在bagging的每轮随机采样中,训练集中大约有36.8%的数据没有被采样集采集中。

随机森林(Random Forest, RF)

2001年由Breiman提出。是Bagging的一个扩展变体。

优点:可用于回归任务和分类任务,并且很容易查看它分配给输入特征的相对重要性。易于使用,超参数数量少。不易过拟合

缺点:大量的树会使算法变慢。

RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,使得最终集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升

传统决策树在选择划分属性时是在当前结点的属性集合中选择一个最优属性;而在RF中,对基决策树的每个结点,是从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性进行划分。参数k控制了随机性的引入程度,推荐值k=log2d。

超参数:

  • n_estimators:控制随机森林中树的数量
  • max_features:随机森林在单个树中尝试的最大特征数量。
  • min_sample_leaf: 叶子的数量

Boosting

分类器通过串行训练获得,通过集中关注已有分类器错分的那些数据来获得新的分类器。Boosting主要关注降低偏差

AdaBoost(Adaptive Boosting)

1995年由Freund和Schapire提出。

训练算法
- 训练数据中的每个样本,并赋予其一个权重,这些权重构成了向量D。一开始,这些权重都初始化成相等值
- 首先在训练数据上训练出一个弱分类器并计算该分类器的错误率
- 然后在同一数据集上再次训练弱分类器。在分类器的第二次训练当中,将会重新调整每个样本的权重,其中第一次分对的样本的权重会降低,而第一次分错的样本的权重将会提高
- 为了从所有弱分类器中得到最终的分类结果,Adaboost为每个分类器都分配了一个权重值alpha,这些alpha值是基于每个弱分类器的错误率进行计算的。

ε=num(error)num(all)(ε<0.5) ε = n u m ( e r r o r ) n u m ( a l l ) ( ε < 0.5 )

α=12ln(1εε)(α>0) α = 1 2 l n ( 1 − ε ε ) ( α > 0 )

alpha表示弱分类器在最终分类器中的重要性,由上式可知,当误差小于0.5时,alpha大于等于0,并且alpha随着误差的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。

如果某个样本被正确分类,那么该样本的权重更改为:

Dt+1i=Dt

这篇关于集成学习(Bagging、Boosting、Stacking)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;