美文网首页
通俗易懂的解释Adaboost

通俗易懂的解释Adaboost

作者: wzhixin | 来源:发表于2018-03-07 13:49 被阅读299次

    boosting是什么

    boost和bagging一样都是属于集成方法,就是通过使用多个弱分类器来构造成为一个强分类器,也就是三个臭皮匠顶个诸葛亮的原理。但是bagging和boosting也有差别
    随机森林 就是使用的bagging方法,在随机森林当中,会随机抽取特征空间当中的特征,构造样本集合,再训练出决策树,然后不断重复这一过程。最后我们对全部数据进行判定的时候,采用投票的方式,投票最多的为正确的分类。
    boosting翻译过来是提升的意思,意思就是我们每一次的训练是基于上一棵树的结果,我们在构造下一颗树时我们会着重考虑分类错误的例子,所以被称为提升,但是这样做的坏处就是对于离群点很敏感。
    adaboost基本原理:
    给定一个训练数据集T={(x1,y1), (x2,y2)…(xN,yN)},其中实例

    x \in \mathcal{X} ,而实例空间 \mathcal{X} \subset \mathbb{R}^n ,yi属于标记集合{-1,+1},Adaboost的目的就是从训练数据中学习一系列弱分类器或基本分类器,然后将这些弱分类器组合成一个强分类器。
    Adaboost的算法流程如下:
    *步骤1. ***首先,初始化训练数据的权值分布。每一个训练样本最开始时都被赋予相同的权值:1/N。

    步骤2.** 进行多轮迭代,用m = 1,2, ..., M表示迭代的第多少轮

    a. 使用具有权值分布Dm的训练数据集学习,得到基本分类器(选取让误差率最低的阈值来设计基本分类器):

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

    由上述式子可知,Gm(x)在训练数据集上的误差率em就是被Gm(x)误分类样本的权值之和。
    c. 计算Gm(x)的系数,am表示Gm(x)在最终分类器中的重要程度(目的:得到基本分类器在最终分类器中所占的权重):

    由上述式子可知,em <= 1/2时,am >= 0,且am随着em的减小而增大,意味着分类误差率越小的基本分类器在最终分类器中的作用越大。
    d. 更新训练数据集的权值分布(目的:得到样本的新的权值分布),用于下一轮迭代

    使得被基本分类器Gm(x)误分类样本的权值增大,而被正确分类样本的权值减小。就这样,通过这样的方式,AdaBoost方法能“重点关注”或“聚焦于”那些较难分的样本上。
    其中,Zm是规范化因子,使得Dm+1成为一个概率分布:


    **步骤3. **组合各个弱分类器

    从而得到最终分类器,如下:



    下面,给定下列训练样本,请用AdaBoost算法学习一个强分类器。


    求解过程:初始化训练数据的权值分布,令每个权值W1i = 1/N = 0.1,其中,N = 10,i = 1,2, ..., 10,然后分别对于m = 1,2,3, ...等值进行迭

    这里的权值代表着分类错误的权重,在上一次分类错误后,下一次分类,对于上次未分类正确的权重会提升。

    image.png

    拿到这10个数据的训练样本后,根据 X 和 Y 的对应关系,要把这10个数据分为两类,一类是“1”,一类是“-1”,根据数据的特点发现:“0 1 2”这3个数据对应的类是“1”,“3 4 5”这3个数据对应的类是“-1”,“6 7 8”这3个数据对应的类是“1”,9是比较孤独的,对应类“-1”。抛开孤独的9不讲,“0 1 2”、“3 4 5”、“6 7 8”这是3类不同的数据,分别对应的类是1、-1、1,直观上推测可知,可以找到对应的数据分界点,比如2.5、5.5、8.5 将那几类数据分成两类。当然,这只是主观臆测,下面实际计算下这个具体过程。

    迭代过程1
    对于m=1,在权值分布为D1(10个数据,每个数据的权值皆初始化为0.1)的训练数据上,经过计算可得:
    阈值v取2.5时误差率为0.3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.3),
    阈值v取5.5时误差率最低为0.4(x < 5.5时取1,x > 5.5时取-1,则3 4 5 6 7 8皆分错,误差率0.6大于0.5,不可取。故令x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.4),
    阈值v取8.5时误差率为0.3(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.3)。

    可以看到,无论阈值v取2.5,还是8.5,总得分错3个样本,故可任取其中任意一个如2.5,弄成第一个基本分类器为:


    上面说阈值v取2.5时则6 7 8分错,所以误差率为0.3,更加详细的解释是:因为样本集中
    0 1 2对应的类(Y)是1,因它们本身都小于2.5,所以被G1(x)分在了相应的类“1”中,分对了。
    3 4 5本身对应的类(Y)是-1,因它们本身都大于2.5,所以被G1(x)分在了相应的类“-1”中,分对了。
    但6 7 8本身对应类(Y)是1,却因它们本身大于2.5而被G1(x)分在了类"-1"中,所以这3个样本被分错了。
    9本身对应的类(Y)是-1,因它本身大于2.5,所以被G1(x)分在了相应的类“-1”中,分对了。

    从而得到G1(x)在训练数据集上的误差率(被G1(x)误分类样本“6 7 8”的权值之和)e1=P(G1(xi)≠yi) = 30.1 = 0.3*。
    然后根据误差率e1计算G1的系数:

    这个a1代表G1(x)在最终的分类函数中所占的权重,为0.4236。 接着更新训练数据的权值分布,用于下一轮迭代:

    值得一提的是,由权值更新的公式可知,每个样本的新权值是变大还是变小,取决于它是被分错还是被分正确。
    即如果某个样本被分错了,则yi * Gm(xi)为负,负负得正,结果使得整个式子变大(样本权值变大),否则变小。
    第一轮迭代后,最后得到各个数据的权值分布D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.1666, 0.1666, 0.1666, 0.0715)。由此可以看出,因为样本中是数据“6 7 8”被G1(x)分错了,所以它们的权值由之前的0.1增大到0.1666,反之,其它数据皆被分正确,所以它们的权值皆由之前的0.1减小到0.0715。
    分类函数f1(x)= a1
    G1(x) = 0.4236G1(x)。
    此时,得到的第一个基本分类器sign(f1(x))在训练数据集上有3个误分类点(即6 7 8)。
    从上述第一轮的整个迭代过程可以看出:
    被误分类样本的权值之和影响误差率,误差率影响基本分类器在最终分类器中所占的权重

    迭代过程2
    对于m=2,在权值分布为
    D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.1666, 0.1666, 0.1666, 0.0715)的训练数据上,经过计算可得:
    阈值v取2.5时误差率为0.1666
    3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.1666
    3),
    阈值v取5.5时误差率最低为0.0715
    4(x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.07153 + 0.0715),
    阈值v取8.5时误差率为0.0715
    3(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.0715*3)。

    所以,阈值v取8.5时误差率最低,故第二个基本分类器为:

    面对的还是下述样本:


    很明显,G2(x)把样本“3 4 5”分错了,根据D2可知它们的权值为0.0715, 0.0715, 0.0715,所以G2(x)在训练数据集上的误差率e2=P(G2(xi)≠yi) = 0.0715 * 3 = 0.2143。
    计算G2的系数:

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

    D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667, 0.01667, 0.1060, 0.1060, 0.1060, 0.0455)。被分错的样本“3 4 5”的权值变大,其它被分对的样本的权值变小。 f2(x)=0.4236G1(x) + 0.6496G2(x) 此时,得到的第二个基本分类器sign(f2(x))在训练数据集上有3个误分类点(即3 4 5)。
    迭代过程3
    对于m=3,在权值分布为
    D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667, 0.01667, 0.1060, 0.1060, 0.1060, 0.0455)的训练数据上,经过计算可得:
    阈值v取2.5时误差率为0.1060
    3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.1060
    3),
    阈值v取5.5时误差率最低为0.0455
    4(x > 5.5时取1,x < 5.5时取-1,
    则0 1 2 9分错,误差率为0.04553 + 0.0715),
    阈值v取8.5时误差率为0.16673(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.16673)。

    所以阈值v取5.5时误差率最低,故第三个基本分类器为:


    依然还是原样本:


    此时,被误分类的样本是:0 1 2 9,这4个样本所对应的权值皆为0.0455,
    所以G3(x)在训练数据集上的**误差率e3 *= P(G3(xi)≠yi) = 0.04554 = 0.1820。
    计算G3的系数:

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

    D4 = (0.125, 0.125, 0.125, 0.102, 0.102, 0.102, 0.065, 0.065, 0.065, 0.125)。被分错的样本“0 1 2 9”的权值变大,其它被分对的样本的权值变小。
    f3(x)=0.4236G1(x) + 0.6496G2(x)+0.7514G3(x)
    此时,得到的第三个基本分类器sign(f3(x))在训练数据集上有0个误分类点。至此,整个训练过程结束。
    现在,咱们来总结下3轮迭代下来,各个样本权值和误差率的变化,如下所示(其中,样本权值D中加了下划线的表示在上一轮中被分错的样本的新权值):
    训练之前,各个样本的权值被初始化为D1 = (0.1, 0.1,0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1);
    第一轮迭代中,样本“
    6 7 8”
    被分错,对应的误差率为e1=P(G1(xi)≠yi) = 30.1 = 0.3,此第一个基本分类器在最终的分类器中所占的权重为a1* = 0.4236。第一轮迭代过后,样本新的权值为D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.1666, 0.1666, 0.1666, 0.0715);
    第二轮迭代中,样本
    “3 4 5”
    被分错,对应的误差率为e2=P(G2(xi)≠yi) = 0.0715 * 3 = 0.2143,此第二个基本分类器在最终的分类器中所占的权重为a2 = 0.6496。第二轮迭代过后,样本新的权值为D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667, 0.01667, 0.1060, 0.1060, 0.1060, 0.0455);
    第三轮迭代中,样本
    “0 1 2 9”
    被分错,对应的误差率为e3 = P(G3(xi)≠yi) = 0.04554 = 0.1820,此第三个基本分类器在最终的分类器中所占的权重为a3* = 0.7514。第三轮迭代过后,样本新的权值为D4 = (0.125, 0.125, 0.125, 0.102, 0.102, 0.102, 0.065, 0.065, 0.065, 0.125)。
    从上述过程中可以发现,如果某些个样本被分错,它们在下一轮迭代中的权值将被增大,同时,其它被分对的样本在下一轮迭代中的权值将被减小。就这样,分错样本权值增大,分对样本权值变小,而在下一轮迭代中,总是选取让误差率最低的阈值来设计基本分类器,所以误差率e(所有被Gm(x)误分类样本的权值之和)不断降低。
    综上,将上面计算得到的a1、a2、a3各值代入G(x)中,G(x) = sign[f3(x)] = sign[ a1 * G1(x) + a2 * G2(x) + a3 * G3(x) ],得到
    最终的分类器
    为:
    G(x) = sign[f3(x)] = sign[ 0.4236G1(x) + 0.6496G2(x)+0.7514G3(x) ]。

    相关文章

      网友评论

          本文标题:通俗易懂的解释Adaboost

          本文链接:https://www.haomeiwen.com/subject/zxappxtx.html