AdaBoos算法Matlab实现

算法描述

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

D1=(w11,w12,,w1,n),w1,i=1n

2.对具有Dm权值分布的训练数据,执行下面的操作

  • 学习基本分类器Gm
  • 计算在Gm上的分类误差率
    em=P(Gm(xi)yi)=i=1NwmiI(Gm(xi)yi)
  • 计算Gm的系数

    αm=12log1emem

  • 更新权值分布

    Dm+1=(wm+1,1,wm+1,2,,wm+1,n)wm+1,i=wm,iZmexp(αmGm(xi)yi)Zm=i=1Nwm,iexp(αmGm(xi)yi)

3.构建基本分类器

f(x)=i=1MαmGm(x)

得到最准分类器
G(x)=sign(f(x))


## 代码实现 ##

  • 学习基本分类器的代码
    基本分类器用的是最简单的,用一个阈值来分类的方法
    输入是训练数据和权重数组
    输出为分类器的阈值和大于阈值时的标签,以及分类误差率
function [y,threshold,e]=classifierG(D,Dw)
[m,n]=size(D);
y=1;
e=1;
threshold=0.5;%大于阈值为y.小于为-y?怎么能写成自动判断大于还是小于
for j=1:n
    f=D(1,j)+0.5;%阈值取所有可能的值,遍历一遍
    er1=0; %y为1时误差率
    er2=0;%y为-1时误差率
    for k=1:n
        if((D(1,k)>f && D(2,k)==-1)||(D(1,k)<f && D(2,k)==1))
            er1=er1+Dw(1,k);
        end
    end
    for k=1:n
        if((D(1,k)>f && D(2,k)==1)||(D(1,k)<f && D(2,k)==-1))
            er2=er2+Dw(1,k);
        end
    end
    if(er1<er2)
        y=1;     
        if(er1<e)
            e=er1;
            threshold=f;
        end
    else
        y=-1;
        if(er2<e)
            e=er2;
            threshold=f;
        end
    end
end
  • 循环的学习分类器,知道分错的样本点个数为0
while(erro>0)    
    erro=10;%分类错误的样本点的个数
    %训练出分类器G ,误差率
    [y,t,e]=classifierG(D,Dw);
    %计算G的系数
    a=0.5*log((1-e)/e);
    G(:,g)=[
        t;
        y;
        a        
    ];
    g=g+1;
    %更新权Dw
    for i=1:10
        if(D(1,i)>t)
            gy=y;
        else
            gy=-y;
        end            
        Dw(1,i)=Dw(1,i)*exp(-a*D(2,i)*gy);
    end
    Z=sum(Dw(1,:));
    Dw=1/Z*Dw;
    %更新erro
    for j=1:10
        fy=0;
        for k=1:10
            if(D(1,j)>G(1,k))
                fy=fy+G(2,k)*G(3,k);
            else
                fy=fy-G(2,k)*G(3,k);
            end
        end
        if((fy>0&&D(2,j)==1)||(fy<0&&D(2,j)==-1))
            erro=erro-1;
        end
    end     
end

最后所得分类器

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值