本篇文章先介绍了提升放法和AdaBoost算法。已经了解的可以直接跳过。后面给出了AdaBoost算法的两个样例。附有详细计算过程。

1、提升方法(来源于统计学习方法)

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

提升算法基于这样一种思路:对于一个复杂任务来说,将多个专家的推断进行适当的综合所得出的推断。要比当中不论什么一个专家单独的推断好。

实际上。就是“三个臭皮匠顶个诸葛亮”的道理。 
  历史上,Kearns和Valiant首先提出了“强可学习(strongly learnable)”和“弱可学习(weakly learnable)”的概念。指出:在概率近似正确(probably approximately correct,PAC)学习框架中,一个概念(一个分类)。假设存在一个多项式的学习算法可以学习它,而且正确率非常高,那么就称这个概念是强可学习的。一个概念,假设存在一个多项式的学习算法可以学习它,学习的正确率仅比随机推測略好,那么就称这个概念是弱可学习的。非常有趣的是Schapire后来证明强可学习与弱可学习是等价的。也就是说。在PAC学习的框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的。 
  这样一来,问题便成为。在学习中。假设已经发现了“弱学习算法”,那么是否能将它提升(boost)为“强学习算法”。大家知道,发现弱学习算法通常要比发现强学习算法easy得多。那么怎样详细实施提升,便成为开发提升方法时所要解决的问题。

关于提升方法的研究非常多,有非常多算法被提出。最具代表性的是AdaBoost算法(AdaBoost algorithm)。 
  对于分类问题而言。给定一个训练样本集,求比較粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)easy得多。提升方法就是从弱学习算法出发,重复学习。得到一系列弱分类器。然后组合这些分类器,构成一个强分类器。 
  这样。对于提升算法来说。有两个问题须要回答:一是在每一轮怎样改变训练数据的权值分布。二是怎样将弱分类器组合成为一个强分类器。

2、AdaBoost算法

对于上一小节末尾提出的提升方法的两个问题。AdaBoost算法的做法是:1、提高那些被前一轮弱分类器错误分类样本的权值。而减少那些被正确分类样本的权值。

2、採用加权多数表决的方法。详细的。加大分类误差率小的弱分类器的权值。使其在表决中起较大的作用,减小分类误差大的弱分类器的权值,使其在表决中起较小的作用。

以下给出AdaBoost算法的公式:

输入:训练数据集T={(x1,y1),(x2,y2),...(xN,yN)},当中xi∈X⊆Rn,yi∈Y={−1,+1};弱学习算法。 
输出:终于分类器G(x)。

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

D1=(w11,...,w1i,...,w1N),w1i=1N,i=1,2,...,N

注:第一次训练弱分类器时各个样本的权值是相等的。

(2)对m=1,2。…,M     注:这里是个循环 
(a)使用具有权值分布Dm的训练数据集学习,得到基本分类器

Gm:X→{−1,+1}

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

em=P(Gm(xi)≠yi)=∑i=1nwmiI(Gm(xi)≠yi)

注:I(Gm(xi)≠yi):不等函数I值为1.相等函数值为0。 
(c)计算Gm(x)的系数

αm=12log1−emem

这里的对数是自然对数。注:显然αm是em的调单减函数。这里就解释了为什么对于没有正确分类的数据要加大权值。

(d)更新训练数据集的权值分布 

Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N)

wm+1,i=wmiZmexp(−αmyiGm(xi))i=1,2,...,N

这里,Zm是规范化因子 

Zm=∑i=1Nwmiexp(−αmyiGm(xi))

它使Dm+1成为一个概率分布。 
注:自已比較Zm与wm+1,i的表达式。会发现这里的Zm就是在对wm+1,i进行归一化工作。

(3)构建基本分类器的线性组合

f(x)=∑m=1MαmGm(x)

得到终于分类器

G(x)=sign(f(x))=sign(∑m=1MαmGm(x))

注:对于增大分类错误数据的权值和分类误差计算的说明:

1、Gm(x)的系数

αm=12log1−emem

αm表示Gm(x)在终于分类器中的重要性。由αm的表达式可知。当em⩽12时,αm⩾0 ,而且αm随着em的减小而增大。所以分类误差越小的基本分类器在终于分类器中的作用越大。 
2、计算基本分类器Gm(x)在加权训练数据集上的分类误差率:

em=P(Gm(xi)≠yi)=∑Gm(xi)≠yiwmi

,这里。wmi表示第m轮中第i个实例的权值,∑Ni=1=1(由于权值利用Zm进行了归一化)。这表明,Gm(x)在加权的训练数据集上的分类误差是被Gm(x)误分类杨蓓的权值之和,由此可以看出数据权值分布Dm与基本分类器Gm(x)的分类误差率的关系。

3、AdaBoost算法实例

以下提供一个样例帮助大家理解上面的概念。

给定例如以下表所看到的的训练数据。

假设弱分类器由x<v或x>v产生,其阈值使该分类器在 训练数据集上分类误差率最低。试用AdaBoost算法学习一个强分类器

序号 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

解:初始化数据权值分布

D1=(w11,w12,...,w110)
w1i=0.1,i=1,2,...,10

对m=1。 
(a)在权值分布为D1的训练数据上,阈值v取2.5时分类误差率最低。故基本分类器为

G1(x)={1,x<2.5−1,x>2.5

(b)显然序号为7、8、9数据产生了错误。G1(x)在训练数据集上的误差率等于将这3个数据的权值相加,即

e1=P(G1(xi)≠yi)=∑i=1nw1iI(G1(xi)≠yi)=0.3

注:I(G1(xi)≠yi)表示当G1(xi)不等于yi时 函数I()的值为1,等于时值为0。

这里仅仅有i=7,8,9时函数I值为1。其余为0。 
(c)计算G1(x)的系数

α1=12log1−e1e1=12log1−e1e1=0.4236

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

D2=(w21,...,w2i,...,w210)
w2i=w1iZ1exp(−α1yiG1(xi)),i=1,2,...,10
Z1=∑i=1Nw1iexp(−α1yiG1(xi))=∑i=11−6,10110exp(−0.4236∗1)+∑i=79110exp(−0.4236∗−1)=0.4583+0.4582=0.9165
w2i=w1iZ1exp(−α1yiG1(xi))=1100.9165exp(−0.4236∗1)=0.07143,i=1,2,...,6,10
w2i=w1iZ1exp(−α1yiG1(xi))=1100.9165exp(−0.4236∗−1)=0.16667,i=7,8,9
D2=(w21,...,w2i,...,w210)=(0.07143,0.07143,0.07143,0.07143,0.07143,0.07143,0.16667,0.16667,0.16667,0.07143,)
f1(x)=α1G1(x)=0.4236G1(x)

分类器sign[f1(x)]在训练数据集上有3个误分点。 
对m=2, 
(a)在权值分布为D2的训练数据上,阈值v取8.5时分类误差率最低。故基本分类器为

G2(x)={1,x<8.5−1,x>8.5

(b)显然序号为4、5、6数据产生了错误。

G2(x)在训练数据集上的误差率等于将这3个数据的权值相加,即

e2=P(G2(xi)≠yi)=∑i=1nw2iI(G2(xi)≠yi)=0.07143∗3=0.2143

注:I(G2(xi)≠yi)表示当G2(xi)不等于yi时 函数I()的值为1,等于时值为0。

这里仅仅有i=4,5,6时函数I值为1,其余为0。 
(c)计算G2(x)的系数

α2=12log1−e2e2=12log1−e2e2=0.6496

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

D3=(w31,...,w3i,...,w310)
w3i=w2iZ2exp(−α2yiG2(xi)),i=1,2,...,10
Z2=∑i=1Nw2iexp(−α2yiG2(xi))=∑i=11−3,100.07143exp(−0.6496∗1)+∑i=790.16667exp(−0.4236∗1)+∑i=460.07143exp(−0.4236∗−1)=0.14922+0.26113+0.41032=0.82067
w3i=w2iZ2exp(−α2yiG2(xi))=0.071430.82067exp(−0.6496∗1)=0.0455,i=1,2,3,10
w3i=w2iZ2exp(−α2yiG2(xi))=0.071430.82067exp(−0.6496∗−1)=0.1667,i=4,5,6
w3i=w2iZ2exp(−α2yiG2(xi))=0.166670.82067exp(−0.6496∗1)=0.1060,i=7,8,9
D3=(w31,...,w3i,...,w310)=(0.0455,0.0455,0.0455,0.1667,0.1667,0.1667,0.1060,0.1060,0.1060,0.0455)
f2(x)=α1G1(x)+α2G2(x)=0.4236G1(x)+0.6496G2(x)

分类器sign[f2(x)]在训练数据集上有3个误分点。 
对m=3, 
(a)在权值分布为D3的训练数据上。阈值v取5.5时分类误差率最低,故基本分类器为

G3(x)={1,x>5.5−1,x<5.5

(b)显然序号为1、2、3、10的数据产生了错误。

G3(x)在训练数据集上的误差率等于将这4个数据的权值相加,即

e3=P(G3(xi)≠yi)=∑i=1nw3iI(G2(xi)≠yi)=0.0445∗4=0.1820

注:I(G3(xi)≠yi)表示当G3(xi)不等于yi时 函数I()的值为1,等于时值为0。这里仅仅有i=1,2,3,10时函数I值为1。其余为0。 
(c)计算G3(x)的系数

α3=12log1−e3e3=12log1−e3e3=0.7514

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

D4=(w41,...,w4i,...,w410)
w4i=w3iZ3exp(−α3yiG3(xi)),i=1,2,...,10
Z3=∑i=1Nw3iexp(−α3yiG3(xi))=∑i=11−3,100.0455exp(−0.7514∗−1)+∑i=790.1060exp(−0.7514∗1)+∑i=460.1667exp(−0.7514∗1)=0.38593+0.15000+0.23590=0.77183
w4i=w3iZ3exp(−α3yiG3(xi))=0.04550.77183exp(−0.7514∗−1)=0.125,i=1,2,3,10
w4i=w3iZ3exp(−α3yiG3(xi))=0.16670.77183exp(−0.7514∗1)=0.102,i=4,5,6
w4i=w3iZ3exp(−α3yiG3(xi))=0.10600.77183exp(−0.7514∗1)=0.065,i=7,8。9
D4=(w41,...,w4i,...,w410)=(0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,0.065,0.125)
f3(x)=α1G1(x)+α2G2(x)+α3G3(x)=0.4236G1(x)+0.6496G2(x)+0.7514G3(x)

分类器sign[f3(x)]在训练数据集上有0个误分点。 
于是终于分类器为:

G(x)=sign[f3(x)]=sign[0.4236G1(x)+0.6496G2(x)+0.7514G3(x)]

图像算法研究---Adaboost算法具体解释的更多相关文章

  1. 机器学习理论提升方法AdaBoost算法第一卷

    AdaBoost算法内容来自<统计学习与方法>李航,<机器学习>周志华,以及<机器学习实战>Peter HarringTon,相互学习,不足之处请大家多多指教! 提 ...

  2. Adaboost 算法实例解析

    Adaboost 算法实例解析 1 Adaboost的原理 1.1 Adaboost基本介绍 AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由 ...

  3. Machine Learning in Action(6) AdaBoost算法

    Adaboost也是一种原理简单,但很实用的有监督机器学习算法,它是daptive boosting的简称.说到boosting算法,就不得提一提bagging算法,他们两个都是把一些弱分类器组合起来 ...

  4. 集成学习之Adaboost算法原理小结

    在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系.前者的代表算法就是是boostin ...

  5. Adaboost 算法

    一 Boosting 算法的起源 boost 算法系列的起源来自于PAC Learnability(PAC 可学习性).这套理论主要研究的是什么时候一个问题是可被学习的,当然也会探讨针对可学习的问题的 ...

  6. Adaboost 算法的原理与推导

    0 引言 一直想写Adaboost来着,但迟迟未能动笔.其算法思想虽然简单“听取多人意见,最后综合决策”,但一般书上对其算法的流程描述实在是过于晦涩.昨日11月1日下午,邹博在我组织的机器学习班第8次 ...

  7. 前向分步算法 && AdaBoost算法 && 提升树(GBDT)算法 && XGBoost算法

    1. 提升方法 提升(boosting)方法是一种常用的统计学方法,在分类问题中,它通过逐轮不断改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能 0x1: 提升方法的基本 ...

  8. 集成学习值Adaboost算法原理和代码小结(转载)

    在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类: 第一个是个体学习器之间存在强依赖关系: 另一类是个体学习器之间不存在强依赖关系. 前者的代表算法就是提升(bo ...

  9. 浅谈 Adaboost 算法

    http://blog.csdn.net/haidao2009/article/details/7514787 菜鸟最近开始学习machine learning.发现adaboost 挺有趣,就把自己 ...

随机推荐

  1. c14---排序,查找

    // // main.c // 冒泡排序 // // Created by xiaomage on 15/6/10. // Copyright (c) 2015年 xiaomage. All righ ...

  2. [JavaEE] IBM - Spring 系列: Spring 框架简介

    Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级的.强壮的 J2EE 应用程序.develop ...

  3. js设计模式-享元模式

    享元模式实际上是一种优化模式,目的在于提高系统的性能和代码的效率. 使用享元模式的条件:最重要的条件是网页中必须使用了大量资源密集型对象,如果只会用到了少许这类对象,那么这种优化并不划算.第二个条件是 ...

  4. Java常见面试题02-方法重写和方法重载的区别?方法重载能改变返回值类型吗?

    方法重写和方法重载的区别?方法重载能改变返回值类型吗?       A:Override方法重写和Overload方法重载的区别? Overload是否可以改变返回值类型?可以 方法重写 •  子类中 ...

  5. 如何用ajax写分页查询(以留言信息为例)-----2017-05-17

    要写分页,首先你得清楚,一页你想显示多少条信息?如何计算总共显示的页数? 先说一下思路: (1)从数据库读取数据,以chenai表为例,读取所有留言信息.并能够实现输入发送者,可以查询该发送者的留言总 ...

  6. C - Ilya and Sticks(贪心)

    Problem description In the evening, after the contest Ilya was bored, and he really felt like maximi ...

  7. Several Ideas on Perl List Context

    According to Beginning Perl Book published by Tsinghua Pub., the list context appears when you are t ...

  8. Javascript Proxy对象 简介

    Javascript Proxy对象 简介 Javascript Proxy对象 改变你操作对象的方式 Proxies 是Javasript对象的中间件 ...或者说至少是那种很早的版本. ES6 中 ...

  9. EditPlus代码自动完成的设置

    EditPlus代码自动完成的设置保存在 *.acp 文件中,可以在“工具”->“首选项”->“文件”->“文件类型及语法”中(如下图) 其中“语法文件”保存着进行语法高亮的关键词, ...

  10. Java 实时论坛 - Sym 1.3.0 发布

    简介 Sym 是一个用 Java 写的实时论坛,欢迎来体验! 初衷 Sym 的诞生是有如下几点原因: 我们想实现一种新的网络社区体验,独立博客+社区互动 大多数论坛用户体验不够现代化,想做一个和聊 Q ...