Adaboost算法原理分析和实例

一、集成方法
集成方法(ensemble method)通过组合多个学习器来完成学习任务。基分类器一般采用的是弱可学习(weakly learnable)分类器,通过集成方法,组合成一个强可学习(strongly learnable)分类器。所谓弱可学习,是指学习的正确率仅略优于随机猜测的多项式学习算法;强可学习指正确率较高的多项式学习算法。集成学习的泛化能力一般比单一的基分类器要好,这是因为大部分基分类器都分类错误的概率远低于单一基分类器的。

集成方法主要包括Bagging和Boosting两种方法,Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法,即将弱分类器组装成强分类器的方法。
1 Bagging
 自举汇聚法(bootstrap aggregating),也称为bagging方法,是在从原始数据集选择n次后得到n个新数据集的一种技术。新数据集和原数据集的大小相等。每个数据集都是通过在原始数据集中随机选择一个样本来进行替换而得到的。这里的替换就意味着可以多次地选择同一样本。这一性质就允许新数据集中可以有重复的值,而原始数据集的某些值在新集合中则不再出现。
具体为:

  • 从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取m个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行n轮抽取,得到n个训练集。(n个训练集之间是相互独立的)
  • 每次使用一个训练集得到一个模型,n个训练集共得到n个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
  • 对分类问题:将上步得到的n个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同
    2 Boosting

Boosting是一种与Bagging很类似的技术。Boosting的思路则是采用重(re-weighting)法迭代地训练基分类器,主要思想:

  • 每一轮的训练数据样本赋予一个权重,并且每一轮样本的权值分布依赖上一轮的分类结果。

  • 基分类器之间采用序列式的线性加权方式进行组合。
    3 Bagging、Boosting二者之间的区别

样本选择上:

Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

样例权重:

Bagging:使用均匀取样,每个样例的权重相等。
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

预测函数:

Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

并行计算:

Bagging:各个预测函数可以并行生成。
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

这两种方法都是把若干个分类器整合为一个分类器的方法,只是整合的方式不一样,最终得到不一样的效果,将不同的分类算法套入到此类算法框架中一定程度上会提高了原单一分类器的分类效果,但是也增大了计算量。
下面是将决策树与这些算法框架进行结合所得到的新的算法:

Bagging + 决策树 = 随机森林
AdaBoost + 决策树 = 提升树
Gradient Boosting + 决策树 = GBDT

二、AdaBoost算法过程
AdaBoost是英文"Adaptive Boosting"(自适应增强)的缩写,它的自适应在于:前一个基本分类器被错误分类的样本的权值会增大,而正确分类的样本的权值会减小,并再次用来训练下一个基本分类器。同时,在每一轮迭代中,加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数才确定最终的强分类器。
Adaboost算法可以简述为三个步骤:
(1)首先,是初始化训练数据的权值分布D1。假设有N个训练样本数据,则每一个训练样本最开始时,都被赋予相同的权值:w1=1/N。
(2)然后,训练弱分类器hi。具体训练过程中是:如果某个训练样本点,被弱分类器hi准确地分类,那么在构造下一个训练集中,它对应的权值要减小;相反,如果某个训练样本点被错误分类,那么它的权值就应该增大。权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
(3)最后,将各个训练得到的弱分类器组合成一个强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。
换而言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。

给定训练数据集在这里插入图片描述,其中在这里插入图片描述用于表示训练样本的类别标签,i=1,…,N。Adaboost的目的就是从训练数据中学习一系列弱分类器或基本分类器,然后将这些弱分类器组合成一个强分类器。
其中会用到的符号有:
在这里插入图片描述
Adaboost的算法流程如下:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述综合上面的推导,可得样本分错与分对时,其权值更新的公式为:
在这里插入图片描述

归一化常数Zt的推导过程;
在这里插入图片描述三、AdaBoost实例讲解
例:给定如图所示的训练样本,弱分类器采用平行于坐标轴的直线,用Adaboost算法的实现强分类过程。
在这里插入图片描述在这里插入图片描述数据分析:

将这10个样本作为训练数据,根据 X 和Y 的对应关系,可把这10个数据分为两类,图中用“+”表示类别1,用“O”表示类别-1。本例使用水平或者垂直的直线作为分类器,图中已经给出了三个弱分类器,即:
在这里插入图片描述初始化:

首先需要初始化训练样本数据的权值分布,每一个训练样本最开始时都被赋予相同的权值:wi=1/N,这样训练样本集的初始权值分布D1(i):

令每个权值w1i = 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的情况下,取已知的三个弱分类器h1、h2和h3中误差率最小的分类器作为第1个基本分类器H1(x)(三个弱分类器的误差率都是0.3,那就取第1个吧)
在这里插入图片描述在分类器H1(x)=h1情况下,样本点“5 7 8”被错分,因此基本分类器H1(x)的误差率为:
在这里插入图片描述
可见,被误分类样本的权值之和影响误差率e,误差率e影响基本分类器在最终分类器中所占的权重α。
在这里插入图片描述然后,更新训练样本数据的权值分布,用于下一轮迭代,对于正确分类的训练样本“1 2 3 4 6 9 10”(共7个)的权值更新为:
在这里插入图片描述
这样,第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”被H1(x)分错了,所以它们的权值由之前的0.1增大到1/6;反之,其它数据皆被分正确,所以它们的权值皆由之前的0.1减小到1/14,下表给出了权值分布的变换情况:
在这里插入图片描述
可得分类函数:f1(x)= α1H1(x) = 0.4236H1(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个基本分类器H2(x)
在这里插入图片描述显然,H2(x)把样本“3 4 6”分错了,根据D2可知它们的权值为D2(3)=1/14,D2(4)=1/14, D2(6)=1/14,所以H2(x)在训练数据集上的误差率:
在这里插入图片描述 这样,第2轮迭代后,最后得到各个样本数据新的权值分布:

                                       D3=[1/22,1/22,1/6,1/6,7/66,1/6,7/66,7/66,1/22,1/22]

下表给出了权值分布的变换情况:
在这里插入图片描述可得分类函数:f2(x)=0.4236H1(x) + 0.6496H2(x)。此时,组合两个基本分类器sign(f2(x))作为强分类器在训练数据集上有3个误分类点(即3 4 6),此时强分类器的训练错误为:0.3
第三次迭代t=3:
在权值分布D3的情况下,再取三个弱分类器h1、h2和h3中误差率最小的分类器作为第3个基本分类器H3(x):
① 当取弱分类器h1=X1=2.5时,此时被错分的样本点为“5 7 8”:
误差率e=7/66+7/66+7/66=7/22;
② 当取弱分类器h2=X1=8.5时,此时被错分的样本点为“3 4 6”:
误差率e=1/6+1/6+1/6=1/2=0.5;
③ 当取弱分类器h3=X2=6.5时,此时被错分的样本点为“1 2 9”:
误差率e=1/22+1/22+1/22=3/22;
在这里插入图片描述 因此,取当前最小的分类器h3作为第3个基本分类器H3(x):
在这里插入图片描述这样,第3轮迭代后,得到各个样本数据新的权值分布为:

D4=[1/6,1/6,11/114,11/114,7/114,11/114,7/114,7/114,1/6,1/38]
下表给出了权值分布的变换情况:
在这里插入图片描述 可得分类函数:f3(x)=0.4236H1(x) + 0.6496H2(x)+0.9229H3(x)。此时,组合三个基本分类器sign(f3(x))作为强分类器,在训练数据集上有0个误分类点。至此,整个训练过程结束。

整合所有分类器,可得最终的强分类器为:
在这里插入图片描述 这个强分类器Hfinal对训练样本的错误率为0!
四、AdaBoost实例讲解
首先对一些符号进行约定:
在这里插入图片描述接下来,给定下边的数据集D,我们用AdaBoost算法来学习得到一个强分类器
在这里插入图片描述
数据集D共有10条数据,根据x的输入得到的y可以分类两类,即y=1与y=-1。我们每一轮使用最简单的决策树桩来构建基分类器,即每轮设定一个阈值θ,只要x<θ,就判定为正类(y=1),x>θ就判定为负类(y=-1)。
第一轮

  • D1(x)
    因为是第一轮,故所有样本的权重相同:
    在这里插入图片描述
  • θ
    因为是离散数据,所以θ可以依次取0.5,1.5,2.5,…,8.5来对x进行分类,这里可以有两种分类方法:
    x<θ时分为正类,x>θ时分为负类,分类错误率对应ϵ1t
    x>θ时分为正类,x<θ时分为负类,分类错误率对应ϵ2t
    最终要选择一个令ϵ1取得最小值的θ与分类方法,这9个值在两种分类方法下,此层h1的错误率ϵ1→分别为:

ϵ1t ={0.5,0.4,0.3,0.4,0.5,0.6,0.5,0.4,0.3}
ϵ2t ={0.5,0.6,0.7,0.6,0.5,0.4,0.5,0.6,0.7}
可以看到ϵ11→中的0.3为最小值。对应的,我们取θ为2.5(θ为8.5亦可),使用第一种分类方法。则x为0,1,2的样本分为正类,都分对了;而之后的样本都被分为负类,分错了3个,所以总错误率为0.3。故此轮弱分类器的阈值θ取2.5,分类方法取第一种。

  • α1
    第一层基分类器h1的权重α1的计算推到方法后面的推导部分再细说,此处只要知道通过如下的公式来计算即可:
    在这里插入图片描述

  • H(x),PA(D)
    根据如下公式计算H(x),此时T为1:
    在这里插入图片描述整个模型(现在只有一个基分类器)的准确率为:

在这里插入图片描述
至此第一轮的工作就结束了,可以看出被误分类样本的权值之和影响误差率,误差率影响基分类器在最终分类器中所占的权重。
第二轮

  • D2(x)
    第一轮训练完成后对D1(x)进行更新得到D2(x),更新公式的推导过程也是等到后边的推到部分再说,此处还是只要知道通过下边的公式来计算更新即可:
    D2(x)=D1(x)e−α1y(x)h1(x)Z1上一轮中x=6、7、8的点分错了,可以看到这三个点在D2中的权重变大了,而其余分类正确的点权重变小了。

  • θ
    我们依然对θ依次取0.5, 1.5, … , 8.5来对x进行分类,注意我们刚才已经得到了D2(x),样本权重的分布不再是第一轮全部相等的110了,如当θ取0.5按第一种分类方法进行分类时,ϵ12计算方法如下:
    ϵ12(θ=0.5)=0∗0.071+1∗0.071+1∗0.071+0∗0.071+
    0∗0.071+0∗0.071+1∗0.167+1∗0.167+1∗0.167+0∗0.071=0.643
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述几种常见的其他情况对基分类器的训练过程进行简单介绍

  • 分类问题

    决策树桩
    见上例
    决策树:每一个节点的选择过程都需要将Dt(x)考虑进去,即在定义损失函数的时候,考虑每一个样本被分错的代价(权重)
    逻辑回归:阈值θ的选取需令本层ϵt取得最小值

  • 回归问题

    按照Dt(x)的分布对原始数据集进行重新采样,利用采样后得到的新数据集再进行训练推导
    五、AdaBoost的优点和缺点

优点

(1)Adaboost提供一种框架,在框架内可以使用各种方法构建子分类器。可以使用简单的弱分类器,不用对特征进行筛选,也不存在过拟合的现象。

(2)Adaboost算法不需要弱分类器的先验知识,最后得到的强分类器的分类精度依赖于所有弱分类器。无论是应用于人造数据还是真实数据,Adaboost都能显著的提高学习精度。

(3)Adaboost算法不需要预先知道弱分类器的错误率上限,且最后得到的强分类器的分类精度依赖于所有弱分类器的分类精度,可以深挖分类器的能力。Adaboost可以根据弱分类器的反馈,自适应地调整假定的错误率,执行的效率高。

(4)Adaboost对同一个训练样本集训练不同的弱分类器,按照一定的方法把这些弱分类器集合起来,构造一个分类能力很强的强分类器,即“三个臭皮匠赛过一个诸葛亮”。

缺点:

在Adaboost训练过程中,Adaboost会使得难于分类样本的权值呈指数增长,训练将会过于偏向这类困难的样本,导致Adaboost算法易受噪声干扰。此外,Adaboost依赖于弱分类器,而弱分类器的训练时间往往很长。
http://www.cnblogs.com/willnote/p/6801496.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值