Adaboost算法

来源:互联网 发布:java iterator 实现类 编辑:程序博客网 时间:2024/06/05 16:24

AdaBoost是一种“集成方法”,通过将同一个弱分类器串行训练后,得到一个强分类器,进而实现较高精度的分辨能力。

算法流程:

假定给定一个二元分类的训练数据集
T={(x1,y1),(x2,y2),...(xN,yN)} 
其中,y{1,1}

  1. 初始化训练数据的权值分布

    D1=(w11,,w12,...,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=1Nwmi 

    (c)计算Gm(x)的系数
    αm=12log1emem

    这里的对数是自然对数
    (d)更新数据集的权值分布
    Dm+1=(wm+1,1,,wm+1,2,...,wm+1,N) 

    wm+1,1=wmiZmexp(αmyiGm(xi)),i=1,2,...,N

    其中,Zm 是规范化因子
    Zm=i=1Nwmiexp(αmyiGm(xi))

  3. 构建基本分类器的线性组合,也即是最终的强分类器
    f(x)=m=1MαmGm(x)

    G(x)=sign(f(x)) 

补充说明:

AdaBoost解决了两个问题:

一.如何在每一轮中改变训练的数据的权值分布
二.如何将弱分类器组合成一个强分类器,使得精度升高

对于一,是在每次的训练中,提高那些前一轮训练中被分类错误的样本的权值,降低前一轮训练中被分类正确的样本的权值,具体做法在算法里面的 2.(d)里面

对于二,解决方法是加大分类误差小的弱分类器的权值,减小分类误差大的弱分类器的权值,具体做法是在αm里调控,当em<=0.5,αm>=0并且αm随着em的减小而增大,所以误差率越小的弱分类器在最终的分类器中的作用会越来越大。

0 0
原创粉丝点击