“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 22天,点击查看活动详情” 前言
-
本文参考众多技术文章,选取个人认为比较易于理解的例子以及数学公式原理来解读集成学习相关的一些算法原理,作为学习笔记。
-
集成学习文章将会根据算法提出时间的顺序进行依次总结,最主要的是算法原理会越来越复杂,所以个人能力有限可能有些地方考虑不全面或者理解错了,所以总结文章仅供参考。
-
每篇文章单独介绍时候会尽可能提出更多围绕本篇算法相关的问题,但是实际需要用到才会理解更深,所以不全面的地方还望提出问题,共同进步。
-
Adaboost原理还是较为简单易懂的,配合实例说明应该容易理解。
-
本文只能理解Adaboost是怎么一个流程,是如何实现的,知道是怎么一回事的程度,具体如何实现可以看参考资料有的带实现代码,等Adaboost代码篇会更深入的解释该算法(应该是很久以后了)。
Adaboost篇
1 AdaBoost简介:
-
boosting,也被成为增强学习或者提升法,是一种重要的集成学习技术,能够将预测精度仅比随即猜测略高的弱学习器增强为预测精度高的强学习器,这在直接构造强学习器非常困难的情况下,为学习算法的设计提供了一种有效的新思路和新方法。
-
AdaBoost是英文"Adaptive Boosting"(自适应增强)的缩写,它的自适应在于:前一个基本分类器被错误分类的样本的权值会增大,而正确分类的样本的权值会减小,并再次用来训练下一个基本分类器。同时,在每一轮迭代中,加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数才确定最终的强分类器。
-
注:弱分类器可以是不同种的分类器组合也可以是同种分类器组合
2 Adaboost算法三步实现:
-
首先,是初始化训练数据的权值分布D1。假设有N个训练样本数据,则每一个训练样本最开始时,都被赋予相同的权值:w1=1/N。
-
然后,训练弱分类器hi。具体训练过程中是:如果某个训练样本点,被弱分类器hi准确地分类,那么在构造下一个训练集中,它对应的权值要减小(分类错的后面迭代的时候重点训练);相反,如果某个训练样本点被错误分类,那么它的权值就应该增大。权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
-
最后,将各个训练得到的弱分类器组合成一个强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。
-
换而言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小
3 Adaboost算法过程:
-
daboost的目的就是从训练数据中学习一系列弱分类器或基本分类器,然后将这些弱分类器组合成一个强分类器。其中弱分类器不用一样,要的就是博采众长,组合成一个强分类器
-
首先,初始化训练数据的权重值分布,每一个训练样本最开始时都是被赋予相同的权重值的,即Wi = 1 / N,这样训练样本集的初始权重值分布我们用Dt(i):(这里的t也可以代表迭代次数,D就是迭代t次的训练样本集的权重值分布)
-
开始迭代t = 1,.... , T
-
第一轮:选取一个当前误差率最低的弱分类器h作为第1个基本分类器H1,并根据弱分类器分类结果标签(如:1表示正,0表示负)计算弱分类器在第一轮训练集分布D1上的误差:
-
(1)式为个人理解写出的伪公式,仅辅助理解,即误差的值就是H1基本分类器误分类样本的权重值的和;
-
计算该弱分类器在最终分类器中所占的权重(弱分类器的权重值用α表示)
-
更新训练样本的权值分布D2:
- 注1:上述更新权重值公式为化简后的结果,方便使用,原公式为:
-
注2:Zt为归一化常数,(3)中yi即表示分类器的结果,Ht是对应基本分类器的,化简时yi*Ht就是分类器实际分类后的结果(如分错的-1或者分对的+1)
-
注3:从(3)式如何化简成单独的分错和分对的更新表达式,其实就是将注2中说的分类结果为-1或者+1带进去化简即可,此处不再详叙化简过程
-
迭代一轮后,如果不再迭代,那么按照弱分类器的权重α组合各个弱分类器,即
- 最终通过符号函数sign的作用得到一个强分类器
4 AdaBoost实例讲解
-
例:给定如图所示的训练样本,弱分类器采用平行于坐标轴的直线,用Adaboost算法的实现强分类过程。
-
将这10个样本作为训练数据,根据 X1与X2的对应关系,可把这10个数据分为两类,图中用“+”表示类别1,用“O”表示类别-1。本例使用水平或者垂直的直线作为分类器,图中已经给出了三个弱分类器(图只作为样例,并非三个分类器真实的分类结果),即
-
首先需要初始化训练样本数据的权值分布,每一个训练样本最开始时都被赋予相同的权值:wi=1/N,这样训练样本集的初始权值分布_D_1(i):令每个权值_w_1_i_ = 1/N = 0.1,其中,N = 10,i = 1,2, ..., 10,然后分别对于_t_= 1,2,3, ...等值进行迭代(_t_表示迭代次数,表示第_t_轮),下表已经给出训练样本的权值分布情况:
-
第1次迭代t=1:
-
初试的权值分布_D1_为1/N(10个数据,每个数据的权值皆初始化为0.1)
-
D1=[0.1, 0.1, 0.1, 0.1, 0.1, 0.1,0.1, 0.1, 0.1, 0.1]
-
在权值分布_D1_的情况下,取已知的三个弱分类器_h_1、_h_2和_h_3中误差率最小的分类器作为第1个基本分类器_H_1(x)(三个弱分类器的误差率都是0.3(即分错样本的权重之和),那就取第1个吧),即用公式(h1)
-
在分类器_H_1(x)=_h_1情况下,样本点“5 7 8”被错分,因此基本分类器_H_1(x)的误差率为:(比对例图)
-
那么根据公式(1)计算e1
- 根据公式(2)计算弱分类器的权重值(即这个α1代表的H1分类器在最终的分类函数中所占比重为0.4236)
-
可见,被误分类样本的权值之和影响误差率_e_,误差率_e_影响基本分类器在最终分类器中所占的权重_α_
-
然后,根据公式(3)更新训练样本数据的权值分布,用于下一轮迭代
-
对于正确分类的训练样本“1 2 3 4 6 9 10”(共7个)的权值更新为:**显然分类正确的样本权重降低了
- 对于错误分类的训练样本“5 7 8”(共3个)的权值更新为:显然分类错误的样本权重升高了
-
这样,第1轮迭代后,最后得到各个样本数据新的权值分布:
-
D2=[1/14,1/14,1/14,1/14,1/6,1/14,1/6,1/6,1/14,1/14]
-
由于样本数据“5 7 8”被_H_1(x)分错了,所以它们的权值由之前的0.1增大到1/6;反之,其它数据皆被分正确,所以它们的权值皆由之前的0.1减小到1/14,下表给出了权值分布的变换情况:
-
可得分类函数:f_1(_x)= α_1_H_1(x) = 0.4236_H_1(x)。此时,组合一个基本分类器_sign(f1(x))作为强分类器在训练数据集上有3个误分类点(即5 7 8),此时强分类器的训练错误为:0.3
-
第二次迭代*t*=2
-
在权值分布D2的情况下,再取三个弱分类器h1、h2和h3中误差率最小的分类器作为第2个基本分类器H2(x):
① 当取弱分类器h1=X1=2.5时,此时被错分的样本点为“5 7 8”:
误差率e=1/6+1/6+1/6=3/6=1/2;
② 当取弱分类器h2=X1=8.5时,此时被错分的样本点为“3 4 6”:
误差率e=1/14+1/14+1/14=3/14;
③ 当取弱分类器h3=X2=6.5时,此时被错分的样本点为“1 2 9”:
误差率e=1/14+1/14+1/14=3/14;
-
显然误差率当前最小的分类器h2作为第2个基本分类器
-
显然,_H_2(x)把样本“3 4 6”分错了,根据_D_2可知它们的权值为_D_2(3)=1/14,_D_2(4)=1/14, _D_2(6)=1/14,所以_H_2(x)在训练数据集上的误差率:
-
同样的方法计算e2,alpha2,以及更新后的D3
-
这样,第2轮迭代后,最后得到各个样本数据新的权值分布:
D3=[1/22,1/22,1/6,1/6,7/66,1/6,7/66,7/66,1/22,1/22]
-
可得**分类函数:__f_2(x)=0.4236_H_1(x) + 0.6496_H_2(x)。此时,组合两个基本分类器_sign(_f_2(x))作为强分类器在训练数据集上有3个误分类点(即3 4 6),此时强分类器的训练错误为:0.3
-
同理迭代第三次,得到各个样本数据新的权值分布为:
D4=[1/6,1/6,11/114,11/114,7/114,11/114,7/114,7/114,1/6,1/38]
-
可得**分类函数:___f_3(x)=0.4236_H_1(x) + 0.6496_H_2(x)+0.9229_H_3(x)。此时,组合三个基本分类器 sign(_f_3(x)) 作为强分类器,在训练数据集上有0个误分类点。至此,整个训练过程结束。
-
整合所有分类器,可得最终的强分类器为:
- 后续内容由于篇幅限制,所以... 集成学习:Adaboost(原理篇)-CSDN博客