adaboost简单分类案例附MATLAB源码.docx
《adaboost简单分类案例附MATLAB源码.docx》由会员分享,可在线阅读,更多相关《adaboost简单分类案例附MATLAB源码.docx(11页珍藏版)》请在冰豆网上搜索。
adaboost简单分类案例附MATLAB源码
算法介绍
算法分析
举例说明
依次循环
总结
该方法只是adaboost入门案例,里面的分类效果不好,需要进一步改进,但是可以作为入门学习的资料。
MATLAB源码
clc;
clearall;
closeall;
%绘制给出的点数
x=[0,1,2,3,4,5,6,7,8,9];
y=[1,1,1,-1,-1,-1,1,1,1,-1];
z=[x;y];
subplot(2,1,1)
fori=1:
1:
size(x,2)
ify(i)==1
plot(x(i),y(i),'+r');
else
plot(x(i),y(i),'o');
end
holdon
end
axis([-1,10,-2,2]);%设置坐标轴
%进行线性弱分类器分类
num=4;%循环次数
wSample=1/size(x,2)*ones(size(x,2),1);%样例的权重
wClass=zeros(num,1);%存放权重值
h=zeros(num,1);%存放分类器
be=ones(num,1);%为下面循环取得最小误差提供变量
fori1=1:
1:
num
forj=0:
0.1:
9
e0=0;%判断错误的
e1=0;%判断正确的
fork=1:
10%线两边同时判别,以最小误差率为准则进行取值
ifz(1,k)>j
ifz(2,k)==1
e0=e0+wSample(k);
else
e1=e1+wSample(k);
end
else
ifz(2,k)==-1
e0=e0+wSample(k);
else
e1=e1+wSample(k);
end
end
end
ifbe(i1)>e0
be(i1)=e0;
h(i1)=j;
end
end
%画出该弱直线分类器
line([h(i1)h(i1)],[-22],'color','c','LineWidth',4)%[][][x前x后]][y前y后]([]内空格隔开,无逗号)
sumclass=sum(wSample(:
1));%计算上一次各个权重分布和
%如此我已经找到了最好的值,下面计算分类器权重
we=be(i1)/sumclass;
wClass(i1)=0.5*log((1-we)/we);
%计算各个的权重分布
fork1=1:
10
ifz(1,k1)>h(i1)
ifz(2,k1)==1
wSample(k1)=exp(wClass(i1))*wSample(k1);
else
wSample(k1)=exp(-wClass(i1))*wSample(k1);
end
else
ifz(2,k1)==-1
wSample(k1)=exp(wClass(i1))*wSample(k1);
else
wSample(k1)=exp(-wClass(i1))*wSample(k1);
end
end
end
end
holdoff
%测试得到的强分类器
subplot(2,1,2)
G=zeros(901,1);
abak=0:
0.01:
9;
forq=1:
1:
901
forabai=1:
num
ifabak(q)>h(abai)
G(q)=G(q)+wClass(abai)*(-1);
else
G(q)=G(q)+wClass(abai)*
(1);
end
end
end
plot(abak,G,'r','LineWidth',4)
holdon
SG=zeros(901,1);%绘制sign函数图形
fori=1:
1:
901
SG(i)=sign(G(i));
end
plot(abak,SG,'Color',[010],'LineWidth',4)