本篇文章先介绍了提升放法和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. oc12--对象作为参数

    // main.m // 对象作为方法的参数传递 #import <Foundation/Foundation.h> /* 士兵 事物名称: 士兵(Soldier) 属性:姓名(name) ...

  2. 软件-集成开发环境:IDE

    ylbtech-软件-集成开发环境:IDE 集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器. ...

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

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

  4. ORA-03137 - ORA-12592 TNS:BAD PACKET OR ORA-3137 故障处理

    环境 操作系统:CentOS release 6.8 数据库:oracle 11.2.0.4.190115 说明:数据库psu 为19年1月份的补丁,可不间断运行,但是开发提示在执行一些批处理的时候, ...

  5. NOIP2011 D1T1 铺地毯

    P1692 铺地毯 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2011 day1 第一题 描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩 ...

  6. 9.13[XJOI] NOIP训练32

    今日9.13 洛谷打卡:小吉(今天心情不错,决定取消密码) (日常记流水账) 上午 今天听说是鏼鏼的题目,题面非常的清真啊,也没有当初以为的爆零啊 T1 排排坐 非常非常清真的模拟或是结论题,再次将难 ...

  7. maven使用杂记

    maven test使用记录 运行指定的测试类:     >mvn test -Dtest=[ClassName] 运行测试类中指定的方法:(这个需要maven-surefire-plugin: ...

  8. 《剑指offer 第二版》题解

    剑指Offer 按题号排序 面试题 3:数组中重复的数字 面试题 4:二维数组中的查找 面试题 5:替换空格 面试题 6:从头到尾打印链表 面试题 7:重建二叉树 面试题 8:二叉树的下一个节点 面试 ...

  9. poj3281 Dining 最大流(奇妙的构图)

    我是按照图论500题的文档来刷题的,看了这题怎么也不觉得这是最大流的题目.这应该是题目做得太少的缘故. 什么是最大流问题?最大流有什么特点? 最大流的特点我觉得有一下几点: 1.只有一个起点.一个终点 ...

  10. 【转】【Oracle 集群】Linux下Oracle RAC集群搭建之基本测试与使用(九)

    原文地址:http://www.cnblogs.com/baiboy/p/orc9.html   阅读目录 目录 检查RAC状态 检查创建的数据库 全部参考文献 相关文章 Oracle 11G RAC ...