浅谈AdaBoost算法--附有详细示例解析
来源:互联网 发布:南昌市网络教研 编辑:程序博客网 时间:2024/05/16 08:39
本篇文章先介绍了提升放法和AdaBoost算法。已经了解的可以直接跳过。后面给出了AdaBoost算法的两个例子,附有详细计算过程。
1、提升方法(来源于统计学习方法)
提升方法是一种常用的统计学习方法,应用十分广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。提升算法基于这样一种思路:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理。
历史上,Kearns和Valiant首先提出了“强可学习(strongly learnable)”和“弱可学习(weakly learnable)”的概念。指出:在概率近似正确(probably approximately correct,PAC)学习框架中,一个概念(一个分类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的;一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么就称这个概念是弱可学习的。非常有趣的是Schapire后来证明强可学习与弱可学习是等价的,也就是说,在PAC学习的框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的。
这样一来,问题便成为,在学习中,如果已经发现了“弱学习算法”,那么能否将它提升(boost)为“强学习算法”。大家知道,发现弱学习算法通常要比发现强学习算法容易得多。那么如何具体实施提升,便成为开发提升方法时所要解决的问题。关于提升方法的研究很多,有很多算法被提出。最具代表性的是AdaBoost算法(AdaBoost algorithm)。
对于分类问题而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易得多。提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器,然后组合这些分类器,构成一个强分类器。
这样。对于提升算法来说,有两个问题需要回答:一是在每一轮如何改变训练数据的权值分布;二是如何将弱分类器组合成为一个强分类器。
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算法实例
下面提供一个例子帮助大家理解上面的概念。
给定如下表所示的训练数据。假设弱分类器由
解:初始化数据权值分布
对m=1,
(a)在权值分布为
(b)显然序号为7、8、9数据产生了错误。
注:
(c)计算
(d)更新训练数据的权值分布:
对m=2,
(a)在权值分布为
(b)显然序号为4、5、6数据产生了错误。
注:
(c)计算
(d)更新训练数据的权值分布:
对m=3,
(a)在权值分布为
(b)显然序号为1、2、3、10的数据产生了错误。
注:
(c)计算
(d)更新训练数据的权值分布:
于是最终分类器为:
- 浅谈AdaBoost算法--附有详细示例解析
- 浅谈 Adaboost 算法
- 浅谈 Adaboost 算法
- 浅谈 Adaboost 算法
- 浅谈 Adaboost 算法
- 浅谈 Adaboost 算法
- 浅谈 Adaboost 算法
- 浅谈 Adaboost 算法
- 浅谈 Adaboost 算法
- 浅谈Adaboost算法
- 浅谈 Adaboost 算法
- 浅谈 Adaboost 算法
- 浅谈Adaboost算法
- 浅谈 Adaboost 算法
- 浅谈 Adaboost 算法
- 浅谈 Adaboost 算法
- 浅谈 Adaboost 算法
- AdaBoost 算法解析
- Application received signal SIGSEGV通过崩溃trace来查找问题原因
- PHP文件上传详解
- 无领导小组讨论面试真题解析(八)—— 海上救援
- java环境变量设置
- c++ 数组操作
- 浅谈AdaBoost算法--附有详细示例解析
- 实习笔记
- 用U盘给MacBook安装Win7的方法
- stl之heap、stack的用法
- CentOS 7下的思维导图
- oracle lob clob字段读写
- VS2008中error PRJ0003 : 生成 cmd.exe 时出错
- oracle中的进制转换
- C# DisplayWaveform 显示飞行器的各个参数(加速度值,陀螺仪值等等)