转自:原地址

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

本章首先介绍提升方法的思路和代表性的提升算法AdaBoost,然后通过训练误差分析探讨AdaBoost为什么能够提高学习精度,并且从前向分布加法模型的角度解释AdaBoost,最后叙述提升方法更具体的事例——提升术(boosting tree)。AdaBoost算法是1995年由Freund和Schapire提出的,提升树是2000年由Friedman等人提出的。(开头几段内容来自《统计学习方法》)

Adaboost算法基本原理

提升方法的基本思路

提升方法是基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。通俗点说,就是”三个臭皮匠顶个诸葛亮”。

Leslie Valiant首先提出了“强可学习(strongly learnable)”和”弱可学习(weakly learnable)”的概念,并且指出:在概率近似正确(probably approximately correct, PAC)学习的框架中,一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的,如果正确率不高,仅仅比随即猜测略好,那么就称这个概念是弱可学习的。2010年的图灵奖给了L. Valiant,以表彰他的PAC理论。非常有趣的是Schapire后来证明强可学习与弱可学习是等价的,也就是说,在PAC学习的框架下,一个概念是强可学习的充要条件是这个概念是可学习的。

这样一来,问题便成为,在学习中,如果已经发现了“弱学习算法”,那么能否将它提升(boost)为”强学习算法”。大家知道,发现弱学习算法通常比发现强学习算法容易得多。那么如何具体实施提升,便成为开发提升方法时所要解决的问题。关于提升方法的研究很多,有很多算法被提出。最具代表性的是AdaBoost算法(Adaptive Boosting Algorithm),可以说,AdaBoost实现了PAC的理想。

对于分类问题而言,给定一个训练数据,求一个比较粗糙的分类器(即弱分类器)要比求一个精确的分类器(即强分类器)容易得多。提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器,然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是改变训练数据的概率分布(训练数据中的各个数据点的权值分布),调用弱学习算法得到一个弱分类器,再改变训练数据的概率分布,再调用弱学习算法得到一个弱分类器,如此反复,得到一系列弱分类器。

这样,对于提升方法来说,有两个问题需要回答:一是在每一轮如何如何改变训练数据的概率分布;而是如何将多个弱分类器组合成一个强分类器。

关于第一个问题,AdaBoost的做法是,提高那些被前几轮弱分类器线性组成的分类器错误分类的的样本的权值。这样一来,那些没有得到正确分类的数据,由于权值加大而受到后一轮的弱分类器的更大关注。于是,分类问题被一系列的弱分类器”分而治之”。至于第二个问题,AdaBoost采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。

AdaBoost的巧妙之处就在于它将这些想法自然而然且有效地实现在一种算法里。

AdaBoost算法

输入:训练数据集T={(x1,y1),(x2,y2),…,(xN,yN)},其中xi∈X⊆Rn,表示输入数据,yi∈Y={-1,+1},表示类别标签;弱学习算法。

输出:最终分类器G(x)。

流程:

初始化训练数据的概率分布,刚开始为均匀分布

D1=(w11,w12,…,w1N), 其中w1i=

, i=1,2,..,N . Dm表示在第m轮迭代开始前,训练数据的概率分布(或权值分布),wmi表示在第i个样本的权值,

。对m=1,2,…,M,使用具有权值分布Dm的训练数据集进行学习(任意选一种模型都可以,例如朴素贝叶斯,决策树,SVM等,并且每一轮迭代都可以用不同的模型),得到一个弱分类器

计算Gm(x)在训练数据集上的分类误差率

计算弱分类器Gm(x)的系数

更新训练数据的权值分布

这里,Zm是规范化因子

这样

,它使Dm+1称为一个概率分布。将M个基本分类器进行线性组合

得到最终分类器

对AdaBoost算法作如下说明:

步骤(1) 初始时假设训练数据集具有均匀分布,即每个训练样本在弱分类器的学习中作用相同。

步骤(2) (c) αm表示Gm(x)在最终分类器中的重要性。由式(公式 2)可知,当em ≤1/2时,αm≥0,并且αm随着em的减小而增大,即意味着误差率越小的基本分类器在最终分类器中的作用越大。

(d) 式可以写成:

由此可知,被弱分类器Gm(x)误分类的样本的权值得以扩大,而被正确分类的样本的权值得以缩小。因此误分类样本在下一轮学习中起到更大的作用。不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同的作用,这是AdaBoost的一个特点。

步骤(3) 这里,αm之和并不等于1。f(x)的符号决定实例x的类别,f(x)的绝对值表示分类的确信度。利用基本分类器进行线性组合得到最终分类器是AdaBoost的另一个特点。

AdaBoost的例子

例 1 给定如表 1所示训练数据。假设弱分类器由G(x)=sign(x-v)产生,其中v为常量,表示阀值。试用AdaBoost算法学习一个强分类器。

表 1 训练数据样本

序号 1 2 3 4 5 6 7 8 9 10

x 0 1 2 3 4 5 6 7 8 9

y 1 1 1 -1 -1 -1 1 1 1 -1

初始化训练数据的权值分布

当m=1,进行第一轮迭代

在权值分布为D1的情况下,用一根垂直扫描线从左到右扫描,会发现,阀值v取2.5时分类误差率最低,故基本分类器G1(x)=sign(x-2.5)。

G1(x)在训练数据集上的误差率

,第7,8,9个实例被误分类。

计算G1(x)的系数:

=0.4236。

更新训练数据的权值分布:

分类器sign[f1(x)]在训练数据集上有3个误分类点,因此,继续迭代。

当m=2,进行第二轮迭代

在权值分布为D2的情况下,阀值v取8.5时分类误差率最低,故基本分类器G2(x)=sign(x-8.5)。

G2(x)在训练数据集上的误差率e2=0.07143+0.07143+0.07143+0.07143,第4,5,6个实例被错误分类。

计算G2(x)的系数:α2=0.6496。

更新训练数据的权值分布:

分类器sign[f2(x)]在训练数据集上有3个误分类点,因此,继续迭代。

当m=3,进行第三轮迭代

在权值分布为D3的情况下,阀值v取5.5时分类误差率最低,故基本分类器G3(x)=-sign(x-5.5),注意,这里符号反向了。

G3(x)在训练数据集上的误差率e3=0.0455+0.0455+0.0455+0.0455=0.1820,第1,2,3,10个实例被误分类。

计算G3(x)的系数:α2=0.7514。

更新训练数据的权值分布:

分类器sign[f3(x)]在训练数据集上的误分类点个数为0,因此,终止迭代。

于是,最终分类器为

注意,G1(x),G2(x)和G3(x),是一个sign函数,从图像看是一个方波图,而最终分类器G(x)也是一个方波图,由三个波形图叠加合成。从信号的角度看,这是振幅叠加。G1(x),G2(x)和G3(x)都是弱分类器,分类正确率仅大于0.5,但线性组合而成的分类器G(x)正确率是100%,是一个强分类器。

AdaBoost算法的训练误差分析

AdaBoost最基本的性质是它能在学习过程中不断减少训练误差,关于这个问题有下面的两个定理:

**定理 1 (AdaBoost的训练误差界****) **AdaBoost算法的最终分类器的训练误差界为

(公式 8)

这里,G(x),f(x)和Zm分别由(公式 7)、(公式 6)和(公式 5)给出。

证明当G(xi) ≠yi时,I(G(xi) ≠yi)=1,yif(xi) < 0,因而exp(-yif(xi)) ≥1,所以

成立;

当G(xi) =yi时,I(G(xi) ≠yi)=0,又因为exp(-yif(xi)) ≥0,所以

成立;

可见,

恒成立。

所以

成立。

不等式的后半部分推导要用到Zm的定义式(公式 5)及(公式 4)的变形:

先推导如下:

(定理**** 1的证明@特级飞行员舒克有很大贡献)

这一定理说明,可以在每一轮选取最适当的Gm使得Zm最小,从而使训练误差下降最快。对二类分类问题,有如下结果:

定理 2 (二类分类问题AdaBoost的训练误差界)

(公式 9)

在这里,

证明由Zm的定义式(公式 5)得

因此等式

成立。

接下来要证明不等式

,两边平方,即

。(这个思路由@liyong3forever贡献,李航书中的那个泰勒展开式的思路并不好)

因为

,em∈[0,1],所以

,令

,问题变成了证明在闭区间[0,1]上不等式1-x≤e-x成立。这里,可以利用函数的单调性,导数等性质来证明,也可以用MATLAB画出图像来实际看看。

推论**** 1如果存在γ>0,对所有m有γm≥γ,则

(公式 10)

这表明在此条件下,AdaBoost的训练误差是以指数速率下降的。这一性质当然是很有吸引力的。

注意,AdaBoost算法不需要知道下界γ。这正是Freund与Schapire设计AdaBoost时所考虑的。与一些早期的提升方法不同,AdaBoost具有适应性,即它能适应弱分类器各自的训练误差率。这也是它的名称的由来,Ada是Adaptive的简写。

adaboost算法的matlab实现,Adaboost算法相关推荐

  1. 【老生谈算法】matlab实现LMS算法源码——LMS算法

    matlab的LMS算法详解 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab的LMS算法.doc 2.算法详解: ...

  2. fcm算法的MATLAB实现,FCM算法的matlab程序(初步)

    FCM算法的matlab程序 1.采用iris数据库 iris_data.txt 5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0 ...

  3. fdtd算法的matlab程序,FDTD算法的Matlab程序

    <FDTD算法的Matlab程序>由会员分享,可在线阅读,更多相关<FDTD算法的Matlab程序(6页珍藏版)>请在人人文库网上搜索. 1.* 5= T$h;O % 3-D ...

  4. 【老生谈算法】matlab实现RSA算法源码——RSA算法

    RSA算法的matlab实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]RSA算法的matlab实现-doc 2.算法详 ...

  5. 【老生谈算法】matlab实现Chan算法及其验证源码——Chan算法

    Chan算法及其验证 matlab程序 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]chan算法定位-matlab.doc ...

  6. 【老生谈算法】matlab实现匈牙利算法源码——匈牙利算法

    matlab匈牙利算法代码实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab匈牙利算法.doc 2.算法详解: ...

  7. lms算法的matlab实现,LMS算法的MATLAB实现

    LMS算法的MATLAB实现 用MATLAB实现LMS算法,将输入和输出信号对比,并给出均方误差曲线.假设滤波器抽头个数为K,数据长度为N. >> g=100; N=1024; k=128 ...

  8. 图像分形的matlab算法,基于MATLAB的图像分割算法研究

    内容介绍 原文档由会员 花季永驻 发布 基于MATLAB的图像分割算法研究 全文54页 约28000字 论述翔实 摘 要 本文从原理和应用效果上对经典的图像分割方法如边缘检测.阈值分割技术和区域增长等 ...

  9. 秦九韶算法的matlab表示,秦九韶算法中的v带变啥意思?例如1+5x+10x∧2+10x∧3+5x∧4+x∧5在...-秦九韶-数学-罗平始同学...

    概述:本道作业题是罗平始同学的课后练习,分享的知识点是秦九韶,指导老师为邵老师,涉及到的知识点涵盖:秦九韶算法中的v带变啥意思?例如1+5x+10x∧2+10x∧3+5x∧4+x∧5在...-秦九韶- ...

最新文章

  1. 生活问题 | 对华为畅玩手机5X进行升级
  2. 整数行hdu 1244 Max Sum Plus Plus Plus(dp)
  3. jsp文件上传_猿蜕变系列7——也说说springMVC上传姿势
  4. winged edge翼边
  5. Python ord 函数 - Python零基础入门教程
  6. 【Sonarqube】编程规范-Sonarqube安装与IDEA下使用
  7. Spark的存储管理
  8. matlab多边形减面算法_matlab考前复习
  9. VBA读取word中的内容到Excel中
  10. 【ZooKeeper Notes 6】客户端对zookeeper的操作是不可回退的 [OK]
  11. 老程序员应该记住的 5 件事
  12. 较完整的 bean生命周期
  13. JavaScript代码收集
  14. 韩国NF功放芯片在音频音响领域的应用
  15. windows家庭版关闭windows defender
  16. 新概念英语第三册51-60课(转)
  17. win7无法信息服务器安装程序,主编为你win7系统纯净版安装程序提示“microsoft注册服务器已停止工作”的解决方法...
  18. jxls-1.0支持excel2003及excel2007版本
  19. 我的世界java1.13下_Minecraft我的世界Java版1.13-pre3更新内容
  20. 解决在iOS9上安装的软件显示未受信任的企业级开发者

热门文章

  1. 网站建设中提高用户体验的重要性和方法
  2. OpenVR设备位置获取的两种方法
  3. 小明打联盟 牛客(背包dp,多重背包)
  4. oracle dml commit,Oracle dml开始到commit期间的流程
  5. NC65开发单据用户自定义项问题处理
  6. 【PowerBI/PBI】PBI DAX之CALCULATE,IF 和 Excel VBA之COUNTIFS
  7. GNSS时间时区转换
  8. 用socket实现聊天
  9. 前端打包工具Esbuild--模块化、ESM、esbuild-loader、
  10. python是什么?他的特点是什么?