AdaBoost

机器学习笔记(七)Boost算法(GDBT,AdaBoost,XGBoost)原理及实践 Boost(提升)算法介绍,包括GDBT,AdaBoost和XGBoost的原理及Python中的实践。 阅读详情

原文出处:http://stblog.baidu-tech.com/?p=19

一、Boosting算法的发展历史

  Boosting算法是一种把若干个分类器整合为一个分类器的方法,在boosting算法产生之前,还出现过两种比较重要的将多个分类器整合为一个分类器的方法,即boostrapping方法和bagging方法。我们先简要介绍一下bootstrapping方法和bagging方法。

  1)bootstrapping方法的主要过程

  主要步骤:

  i)重复地从一个样本集合D中采样n个样本

  ii)针对每次采样的子样本集,进行统计学习,获得假设Hi

  iii)将若干个假设进行组合,形成最终的假设Hfinal

  iv)将最终的假设用于具体的分类任务

  2)bagging方法的主要过程

  主要思路:

  i)训练分类器

  从整体样本集合中,抽样n* < N个样本 针对抽样的集合训练分类器Ci

  ii)分类器进行投票,最终的结果是分类器投票的优胜结果

  但是,上述这两种方法,都只是将分类器进行简单的组合,实际上,并没有发挥出分类器组合的威力来。直到1989年,Yoav Freund与 Robert Schapire提出了一种可行的将弱分类器组合为强分类器的方法。并由此而获得了2003年的哥德尔奖(Godel price)。

  Schapire还提出了一种早期的boosting算法,其主要过程如下:

  i)从样本整体集合D中,不放回的随机抽样n1 < n 个样本,得到集合 D1

  训练弱分类器C1

  ii)从样本整体集合D中,抽取 n2 < n 个样本,其中合并进一半被C1 分类错误的样本。得到样本集合D2

  训练弱分类器C2

  iii)抽取D样本集合中,C1 和C2 分类不一致样本,组成D3

  训练弱分类器C3

  iv)用三个分类器做投票,得到最后分类结果

  到了1995年,Freund and schapire提出了现在的adaboost算法,其主要框架可以描述为:

  i)循环迭代多次

  更新样本分布

  寻找当前分布下的最优弱分类器

  计算弱分类器误差率

  ii)聚合多次训练的弱分类器

  在下图中可以看到完整的adaboost算法:

图1.1  adaboost算法过程

  现在,boost算法有了很大的发展,出现了很多的其他boost算法,例如:logitboost算法,gentleboost算法等等。在这次报告中,我们将着重介绍adaboost算法的过程和特性。

二、Adaboost算法及分析

  从图1.1中,我们可以看到adaboost的一个详细的算法过程。Adaboost是一种比较有特点的算法,可以总结如下:

  1)每次迭代改变的是样本的分布,而不是重复采样(re weight)

  2)样本分布的改变取决于样本是否被正确分类

  总是分类正确的样本权值低

  总是分类错误的样本权值高(通常是边界附近的样本)

  3)最终的结果是弱分类器的加权组合

  权值表示该弱分类器的性能

  简单来说,Adaboost有很多优点:

  1)adaboost是一种有很高精度的分类器

  2)可以使用各种方法构建子分类器,adaboost算法提供的是框架

  3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单

  4)简单,不用做特征筛选

  5)不用担心overfitting!

  总之:adaboost是简单,有效。

  下面我们举一个简单的例子来看看adaboost的实现过程:

      

  图中,“+”和“-”分别表示两种类别,在这个过程中,我们使用水平或者垂直的直线作为分类器,来进行分类。

  第一步:

  根据分类的正确率,得到一个新的样本分布D2­,一个子分类器h1

  其中划圈的样本表示被分错的。在右边的途中,比较大的“+”表示对该样本做了加权。

  第二步:

  根据分类的正确率,得到一个新的样本分布D3,一个子分类器h2

  第三步:

  得到一个子分类器h3

  整合所有子分类器:

  因此可以得到整合的结果,从结果中看,及时简单的分类器,组合起来也能获得很好的分类效果,在例子中所有的。

  Adaboost算法的某些特性是非常好的,在我们的报告中,主要介绍adaboost的两个特性。一是训练的错误率上界,随着迭代次数的增加,会逐渐下降;二是adaboost算法即使训练次数很多,也不会出现过拟合的问题。

  下面主要通过证明过程和图表来描述这两个特性:

  1)错误率上界下降的特性

  从而可以看出,随着迭代次数的增加,实际上错误率上界在下降。

  2)不会出现过拟合现象

  通常,过拟合现象指的是下图描述的这种现象,即随着模型训练误差的下降,实际上,模型的泛化误差(测试误差)在上升。横轴表示迭代的次数,纵轴表示训练误差的值。

而实际上,并没有观察到adaboost算法出现这样的情况,即当训练误差小到一定程度以后,继续训练,返回误差仍然不会增加。

  对这种现象的解释,要借助margin的概念,其中margin表示如下:

  通过引入margin的概念,我们可以观察到下图所出现的现象:

  从图上左边的子图可以看到,随着训练次数的增加,test的误差率并没有升高,同时对应着右边的子图可以看到,随着训练次数的增加,margin一直在增加。这就是说,在训练误差下降到一定程度以后,更多的训练,会增加分类器的分类margin,这个过程也能够防止测试误差的上升。

三、多分类adaboost

  在日常任务中,我们通常需要去解决多分类的问题。而前面的介绍中,adaboost算法只能适用于二分类的情况。因此,在这一小节中,我们着重介绍如何将adaboost算法调整到适合处理多分类任务的方法。

  目前有三种比较常用的将二分类adaboost方法。

  1、adaboost M1方法

  主要思路: adaboost组合的若干个弱分类器本身就是多分类的分类器。

  在训练的时候,样本权重空间的计算方法,仍然为:

  在解码的时候,选择一个最有可能的分类

  2、adaboost MH方法

  主要思路: 组合的弱分类器仍然是二分类的分类器,将分类label和分类样例组合,生成N个样本,在这个新的样本空间上训练分类器。

  可以用下图来表示其原理:

  3、对多分类输出进行二进制编码

  主要思路:对N个label进行二进制编码,例如用m位二进制数表示一个label。然后训练m个二分类分类器,在解码时生成m位的二进制数。从而对应到一个label上。

四、总结

  最后,我们可以总结下adaboost算法的一些实际可以使用的场景:

  1)用于二分类或多分类的应用场景

  2)用于做分类任务的baseline

  无脑化,简单,不会overfitting,不用调分类器

  3)用于特征选择(feature selection)

  4)Boosting框架用于对badcase的修正

  只需要增加新的分类器,不需要变动原有分类器

  由于adaboost算法是一种实现简单,应用也很简单的算法。Adaboost算法通过组合弱分类器而得到强分类器,同时具有分类错误率上界随着训练增加而稳定下降,不会过拟合等的性质,应该说是一种很适合于在各种分类场景下应用的算法。

 

另外,http://en.wikipedia.org/wiki/AdaBoost 可以帮助理解adaboost

机器学习(七):提升(boosting)方法 引言:     提升(boosting)方法是一族可将弱学习器提升为强学习器的算法。这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。     本文主要介绍提升方法... 阅读详情

相关推荐

[C++ & AdaBoost] 傻陈带你用C++实现AdaBoost

@[toc 前言 人工智能的算法需要许多预备知识,但情况特殊,这里我只做对最后算法实现有帮助的介绍,试着在不去完全了解的情况下将实验完成。

IcyLeaves的博客们 2281

Boosting算法简介

一、Boosting算法的发展历史   Boosting算法是一种把若干个分类器整合为一个分类器的方法,在boosting算法产生之前,还出现过两种比较重要的将多个分类器整合为一个分类器的方法,即boostrapping方法和bagging方法。我们先简要介绍一下bootstrapping方法和bagging方法。   1)bootstrapping方法的主要过程   ...

weixin_34249367的博客 1391

AdaBoost算法详细介绍

一、Boosting算法Boosting集成分类器包含多个非常简单的成员分类器,这些成员分类器的性能仅好于随机猜想,常被称为弱学习机。典型的弱学习机的例子就是单层决策树。Boosting算法主要针对难以区分的样本,弱学习机通过在分类错误的样本上进行学习来提高继承分类器的分类性能。Boosting与Bagging不同,在Boosting的初始化阶段采用的是无返回抽样从训练样本中随机抽取一个子集,而B...

修炼之路 2万+

boosting系列算法

boosting是一种集成学习算法,由一系列基本分类器按照不同的权重组合成为一个强分类器,这些基本分类器之间有依赖关系。包括Adaboost算法、提升树、GBDT算法。 一、Adaboost算法 1、基本思想 通过两个问题: 1)如何更新样本权重D? 提高被弱分类器错分样本的权值,降低正分样本的权值,作为下一轮基本分类器的训练样本。 2)如何将弱分类器组合成强分类器? 加权多数表决,误差率小的分...

jingshuiliushen_zj的博客 2万+

VCSA的vmware-updatemgr服务无法启动和vSAN界面报“certificate chain is not trusted and thumbprint doesn‘t match”处理

"Unable to update CM service info"和"Server certificate chain is not trusted and thumbprint doesn't match"问题处理

jetliu05的博客 1882

【人工智能】人工智能基础概念、流派、发展史

人工智能初衷就是让计算机能够像人类一样具有自我思考、自我学习、自我决策的能力。依据百度百科上对人工智能定义:人工智能是研究、开发用于模拟、扩展和延伸人的智能的理论、方法、技术及应用系统的一门新的技术学科。人工智能是研究使计算机来模拟人的某些思维过程和智能行为的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。

WEL测试 1879

Adaboost算法实现二

终于把这个Adaboost算法的源码看完了,基本了解了算法。对于一些地方还是存在疑问,不知道为啥要这样处理,如相似性度量。           测试了好几个例子,感觉Adaboost对样本分类的效果还不错,但是对于预测,正确率也就70%-80%,不是很高,感觉应该是比较低的了,应该有改进的措施,还没来得及看。           用主程序中的一段代码对adaboost算法做下自己的总结。

lskyne的专栏 4535

DETR系列文章之–Co-DETR

Co-DETR,并行训练多个辅助头,以一对多的标签分配方式进行监督从辅助头中提取正样本坐标,为解码器中的正样本的训练效率进行额外的定制化正样本query.一对一标签分配:每个GT框分配给一个特定的query(DETR),较少的正query导致低效训练,从编码器生成的潜在表示和解码器中的注意力学习分析这一问题。一对多标签分配:每个GT框分配给检测器输出的多个proposal/anchor,依赖NMS或者anchor生成(ATSS,RetinaNet,FCOS,PAA)。

weixin_43731232的博客 2098

Adaboost改进方法(AdaBoost_RT,AdaBoost_RT,AdaBoost_DBSCAN)

print('训练集数量:',X_train.shape,'测试集数量:',x_test.shape) #结果表明每次划分的数量。# #print('训练集数量:',X_train.shape,'测试集数量:',x_test.shape) #结果表明每次划分的数量。#print('训练集数量:',X_train.shape,'测试集数量:',x_test.shape) #结果表明每次划分的数量。

2403_87476434的博客 806

最优化问题——一维搜索(一)

最优化问题——一维搜索 1. 一维搜索的引入 1.1 从非线性规划问题到一维搜索 在前面的文章中,我们提到了基于迭代的非线性规划问题的求解思路。在求解过程中,我们提到了在每一步的迭代中都需要对计算步长因子,其计算公式为: λk=minλf(xk+λp)λ_k=min_{λ}f(x_k+λp)λk​=minλ​f(xk​+λp) 我们将f(xk+λp)f(x_k+λp)f(xk​+λp)视为λ的一元函数,我们的目标就是求这个一元函数的极小值。对于这个问题,我通常的求解方式为一维搜索。 1.2 一维搜索的基本形

hei653779919的博客 7358

MIKE水动力笔记17_MIKE文件转shp、统计每个单元格的面积

MIKE的工具箱中自带一个转shp的工具,然后可以拖进ArcGIS中很方便的统计每个单元格的面积和每个网格点的水深。

晏长街的博客 4150

AdaBoost算法

介绍了boosting集成学习思想的经典算法adaboost算法的实现

YIAN爱学习的博客 1170

【新版系统架构】系统架构设计师教程全篇知识点提炼

信息系统的5个基本功能:输入、存储、处理、输出和控制信息系统的发展:诺兰模型:初始阶段、传播阶段、控制阶段、集成阶段、数据管理阶段、成熟阶段信息系统的分类:传统的信息系统分为:业务(数据)处理系统、管理信息系统(MIS)、决策支持系统(DSS)、专家系统(ES)、办公自动化系统(OAS)等5类信息系统的生命周期:1、产生阶段2、开发阶段(总体规划、系统分析、系统设计、系统实施、系统验收阶段)3、运行阶段4、消亡阶段信息系统建设原则:1、高层管理人员介入原则。

分享技术干货和灵感、推荐新书和好玩的项目、分享Java面试题 1万+

【机器学习】Boosting 和 AdaBoost

AdaBoost自适应提升学习算法和Boosting考虑的点一样(观察下图)(1)不同的训练集--->调整样本权重(2)“关注”--->增加错分样本权重(3)“器重”--->好的分类器权重大(4) 样本权重间接影响分类器权重AdaBoost算法提高那些被前一轮基分类器错误分类样本的权值,而降低那些被正确分类样本的权值。从而使得那些没有得到正确分类的样本,由于权值的加大而受到后一轮基分类器的更大关注。AdaBoost采用加权多数表决的方法。分类误差率较小的弱分类器的权值大,在表决中起较大作用。

2301_76820214的博客 2412

【ITS模型】基于MATLAB的ITS宽带短波信道模型的建模和仿真

1.软件版本 MATLAB2010b 2.本算法理论知识 对短波信道建模具有里程碑意义的是沃特森在1970年发表的一篇文章,文章中提出了一种静态模型,并在大气中进行了实验验证。 此静态模型可以描述为高斯散射增益抽头延迟线模型,即Watterson模型。 Watterson信道模型是经典的窄带短波信道模型,在这个模型中,信道衰落是瑞利幅度分布,而在每种传播模式中多普勒扩展的功率谱满足高斯分布。Watterson模型没有定义延时扩展的形状,认为各个多径传输模式中不存在延时扩展。其...

FPGA/MATLAB学习教程/源码/项目合作开发 2757

python如何给声音增加回声效果

创建任何声音对象的回声效果。使用sndarray和numpy来创建原始声音的偏移和衰减副本。目前它只是使用硬编码的值来设置回声的数量和延迟。你可以根据自己的需要轻松地重新创建。这段注释说明了make_echo函数的用途和实现方式,即通过pygame的sndarray模块和numpy库来处理声音数据,生成具有回声效果的声音。函数中使用了固定的回声数量和延迟时间,但这些值可以根据用户的需求进行调整。

zhangzhechun的专栏 976

AdaBoost 详解

Boosting 是指,仅通过训练精度比随机猜想(50%)稍高的学习器,通过集成的方式过建出强学习器。其中boosting中最有名的是AdaBoost算法。AdaBoost是英文"Adaptive Boosting"(自适应增强)的缩写,它的自适应在于:前一个基本分类器被错误分类的样本的权值会增大,而正确分类的样本的权值会减小,并再次用来训练下一个基本分类器。同时,在每一轮迭代中,加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数才确定最终的强分类器。

Gowi的博客 1148

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ELM-Adaboost | Matlab实现基于ELM-Adaboost极限学习机结合Adaboost集成学习故障诊断

极限学习机 (Extreme Learning Machine, ELM) 凭借其优异的学习速度和泛化性能,在诸多领域展现出强大的应用前景。然而,ELM 也存在一些局限性,例如对噪声较为敏感,以及在处理复杂非线性问题时可能出现过拟合现象。为了克服这些不足,将ELM与Adaboost (Adaptive Boosting) 集成学习算法相结合,构成ELM-Adaboost 模型,成为一种有效的故障诊断方法,本文将详细探讨其原理、Matlab实现以及在故障诊断中的应用。一、 极限学习机 (ELM) 原理概述。

qq_59747472的博客 938

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Adaboost 详解

Adaboost (Adaptive Boosting) 详解本文会详细介绍 Adaboost 这一 ensemble 模型(属于 boosting类别)。从基本定义,详细实现到算法原理都会展开讲解。

段哥哥的博客 6795

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

什么是AdaBoost

AdaBoost全称为Adaptive Boosting(自适应提升),是提升(Boosting)算法家族中的一种,提升算法最早由Yoav Freund和Robert Schapire提出。Boosting的思想是将多个表现一般的“弱分类器”组合起来形成一个表现更强的“强分类器”。AdaBoost是该领域中最具代表性的一种算法。AdaBoost是一种经典的提升算法,通过加权组合多个弱分类器形成一个强分类器。其核心思想是通过样本权重的动态调整,使得弱分类器逐步关注难分类的样本。AdaBoost算法简单但高效,

彬彬侠的博客 1403

提升方法AdaBoost算法

提升方法是一种常用的统计学习方法,应用广泛且有效。在分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器线性组合,提高分类的性能。

qq_47190374的博客 1428

adaboost mh matlab,adaboost、adaboost.m1、adaboost.m2简介

集成学习常见的两种集成方案为bagging和boosting,其中bagging是一种基于投票的并行方案,boosting是一种基于改变原始数据集分布的迭代串行方案(某些环节也可并行)。bagging的代表算法为随机森林,boosting的代表算法有adaboost、gbdt、xgb等。bagging方案图:从训练集从进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终...

weixin_29100399的博客 862

Adaboost原理

Adaboost介绍 AdaBoost算法与Boosting算法不同,它是使用整个训练集来训练弱学习器,其中训练样本在每次迭代的过程中都会重新被赋予一个权重,在上一个弱学习器错误的基础上进行学习来构建一个更加强大的分类器。下面通过一个图来了解AdaBoost算法的工作过程。 Adaboost算法分析 从图1.1中,我们可以看到adaboost的一个详细的算法过程。Adaboost是一种比较有特点的算法,可以总结如下: 每次迭代改变的是样本的分布,而不是重复采样(re weight) 样本分布的改变取决

Grateful_Dead424的博客 2246
上一篇: 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
下一篇: 博士生传给硕士生的经验!
willian0621
博客等级 码龄17年 50粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值