《模式识别》课程实验设计matlaab.docx

上传人:b****4 文档编号:12101187 上传时间:2023-04-17 格式:DOCX 页数:64 大小:385.21KB
下载 相关 举报
《模式识别》课程实验设计matlaab.docx_第1页
第1页 / 共64页
《模式识别》课程实验设计matlaab.docx_第2页
第2页 / 共64页
《模式识别》课程实验设计matlaab.docx_第3页
第3页 / 共64页
《模式识别》课程实验设计matlaab.docx_第4页
第4页 / 共64页
《模式识别》课程实验设计matlaab.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

《模式识别》课程实验设计matlaab.docx

《《模式识别》课程实验设计matlaab.docx》由会员分享,可在线阅读,更多相关《《模式识别》课程实验设计matlaab.docx(64页珍藏版)》请在冰豆网上搜索。

《模式识别》课程实验设计matlaab.docx

《模式识别》课程实验设计matlaab

《模式识别》课程实验设计(matlaab)

 

1线性分类器设计

1.1ESM

1.1.1问题

对于twotwolarge.m文件里的数据,用最小二乘法进行两分类。

1.1.2思路及框图

1.1.3结果

1.1.4程序代码

%ESM代码,见ses_pct_svm.m文件

y=ones(100,1);

fori=46:

100y(i,1)=-1;end;

w=inv(x'*x)*(x')*y;

r5=[-w(3)/w

(1),0];

r6=[0,-w(3)/w

(2)];

figure

(1);

plot(r1,r2,'*',r3,r4,'o',r5,r6);

axis([0,12,0,8]);

holdon;

%ESM代码结束

1.1.5讨论

1.当训练样本较大的时候,(inv(X'*X))*X'计算很复杂,可以采用梯度下降法求解。

2.Y的选取可以利用样本在两类里的数目进行比例取值,对于样本数较多的类,先验知识较多,yi可以取小。

1.2单层感知器

1.2.1问题

对于twotwolarge.m文件里的数据,用单层感知器进行两分类。

1.2.2思路及框图

1.2.3结果

1.2.4程序代码

%单层感知机函数代码,见ses_pct_svm.m文件

e=0.001;wpct=rands(3,1);J=0;deltJ=zeros(3,1);

fori=1:

45

xtemp=[x(i,1),x(i,2),x(i,3)];

if(wpct'*xtemp'<0)

deltJ=deltJ+0.5*(-1)*xtemp';

J=J+(-1)*wpct'*xtemp';

end

end

fori=46:

100

xtemp=[x(i,1),x(i,2),x(i,3)];

if(wpct'*xtemp'>0)

deltJ=deltJ+0.5*xtemp';

J=J+wpct'*xtemp';

end

end

while(J>e)

J=0;

wpct=wpct-deltJ;

fori=1:

45

xtemp=[x(i,1),x(i,2),x(i,3)];

if(wpct'*xtemp'<0)

deltJ=deltJ+0.5*(-1)*xtemp';

J=J+(-1)*wpct'*xtemp';

end

end

fori=46:

100

xtemp=[x(i,1),x(i,2),x(i,3)];

if(wpct'*xtemp'>0)

deltJ=deltJ+0.5*xtemp';

J=J+wpct'*xtemp';

end

end

end

r5=[-wpct(3)/wpct

(1),0];

r6=[0,-wpct(3)/wpct

(2)];

figure

(2);

plot(r1,r2,'*',r3,r4,'o',r5,r6);

axis([0,12,0,8]);

holdon;

%单层感知机函数代码结束

1.2.5讨论

1.感知器相当于一个神经元的神经网络。

2.能不能找到最优决策面与初始w选择有关,所以找到的w不一定是最优的。

3.满足J的w有无穷多个,不能判断哪一个最好。

1.3SVM

1.3.1问题

对于twotwolarge.m文件里的数据,用SVM进行两分类。

1.3.2思路及框图

1.3.3结果

1.3.4程序代码

%SVM函数代码,见ses_pct_svm.m文件

y=ones(100,1);

fori=46:

100

y(i)=-1;

end;

A=[];b=[];Aeq=[];beq=[];lb=[];ub=[];lbd0=ones(100,1);lbd=rands(100,1);

%本来想用Quadprog实现,但可能设定的条件不正确,最终出现不收敛的情况

[lbd,fval,EXITFLAG]=fmincon('myfun',lbd0,A,b,Aeq,beq,lb,ub,@nonlcon);

wsvm=zeros(2,1);

fori=1:

100

wsvm(1,1)=wsvm(1,1)+xnew(i,1)*(lbd(i,1)*y(i,1));

wsvm(2,1)=wsvm(2,1)+xnew(i,2)*(lbd(i,1)*y(i,1));

end;

%在实验数据中,可能是由于精度的原因,浪不大不可能迭代到真实的0,该变量作为0偏

epsilon=1e-5;

fori=1:

100

if(lbd(i,1)>epsilon)

lbdnozero=i;

end;

end;

%找到的该支撑矢量必然位于后一类,故决策值度量为-1

w3=-1-(wsvm(1,1)*xnew(lbdnozero,1)+wsvm(2,1)*xnew(lbdnozero,2));

r5=[-w3/wsvm

(1),0];

r6=[0,-w3/wsvm

(2)];

figure(3);

plot(r1,r2,'*',r3,r4,'o',r5,r6);

axis([0,12,0,8]);

holdon;

%ses_pct_svm.m代码结束

%目标函数位于一个新的myfun.m文档

functionf=myfun(lbd)

ft=-ones(100,1);

y=ones(100,1);

fori=46:

100

y(i)=-1;

end;

%数据域

xnew=zeros(100,2);

fori=1:

45xnew(i,1)=x1(i,1);end;

fori=1:

45xnew(i,2)=x1(i,2);end;

fori=46:

100xnew(i,1)=x2((i-45),1);end;

fori=46:

100xnew(i,2)=x2((i-45),2);end;

f=ft'*lbd;

fori=1:

100

forj=1:

100

f=f+0.5*(lbd(i,1)*lbd(j,1)*y(i,1)*y(j,1)*(xnew(i,1)*xnew(j,1)+xnew(i,2)*xnew(j,2)));

end;

end;

%myfun.m代码结束

%约束函数位于一个新的nonlcon.m文档

function[c,ceq]=nonlcon(lbd)

Y1=ones(45,1);

Y2=-ones(55,1);

Y=[Y1;Y2];

c=-lbd;

ceq=lbd'*Y;

%nonlcon.m代码结束

1.3.5讨论

对于fmincon函数里面的第一个参数要求是二次函数,该参数必须写到一个子程序里面然后引用该函数才可以使用。

同理,参数nonlcon也是一样。

如果两类不是线性可分的,那么需要增加一个对于浪不大的松弛变量,不过幸好此处线性可分。

21_k近邻法

2.1问题

对于twotwolarge.m、ultwotwo.m、threethree.m的数据进行分类

2.2思路

将数据随机分成两组,一组作为参考集,一组作为测试集,进行分类。

2.3结果

Twotwolarge结果:

前图是参考集,后图是测试集,是twotwolarge的随机等分组,砖石形为错误分类的点。

1近邻法的分类率为2%;k近邻法的错误分类率为0。

Ultwotwo随机分组得到的参考集

砖石形为错误分类的点。

1近邻法的分类率为7.62%;k近邻法的错误分类率为2.86%。

Threethree随机分组得到的参考集。

1和k近邻法的错误分类率均为0

2.4代码

%twotwolarge近邻法代码;数据前略,见twotwolarge_1k.m文件

xnewIndex=zeros(100,1);

fori=1:

100

xnewIndex(i,1)=i;

end;

[xnrSize,xntSize,xnrIndex,xntIndex,xnr,xnt]=sep(xnew,2,xnewIndex,0.5,100);

Nt=0;Nr=0;

fori=1:

xntSize

if(xntIndex(i,1)<=45)

Nt=Nt+1;

end;

end;

fori=1:

xnrSize

if(xnrIndex(i,1)<=45)

Nr=Nr+1;

end;

end;

fori=1:

Ntr5(i)=xnt(i,1);end;

fori=1:

Ntr6(i)=xnt(i,2);end;

fori=1+Nt:

50r7(i)=xnt(i,1);end;

fori=1+Nt:

50r8(i)=xnt(i,2);end;

fori=1:

Nrr9(i)=xnr(i,1);end;

fori=1:

Nrr10(i)=xnr(i,2);end;

fori=1+Nr:

50r11(i)=xnr(i,1);end;

fori=1+Nr:

50r12(i)=xnr(i,2);end;

figure

(2);

plot(r5,r6,'*',r7,r8,'o');

axis([0,12,0,8]);

gridon;

figure(3);

plot(r9,r10,'*',r11,r12,'o');

axis([0,12,0,8]);

gridon;

[FailCount,FailIndex]=OneNear(Nr,Nt,xnr,xnt,xnrSize,xntSize,2,2);

pe=FailCount/xntSize

if(pe>0)

fori=1:

FailCountr13(i)=xnt(FailIndex(i,1),1);end;

fori=1:

FailCountr14(i)=xnt(FailIndex(i,1),2);end;

figure(4);

plot(r5,r6,'*',r7,r8,'o',r13,r14,'bd');

axis([0,12,0,8]);

gridon;

end;

%k=7

Mk=7;

[MFailCount,MFailIndex]=MulNear(Mk,Nr,Nt,xnr,xnt,xnrSize,xntSize,2,2);

Mpe=MFailCount/xntSize

if(Mpe>0)

fori=1:

MFailCountr15(i)=xnt(MFailIndex(i,1),1);end;

fori=1:

MFailCountr16(i)=xnt(MFailIndex(i,1),2);end;

figure(5);

plot(r5,r6,'*',r7,r8,'o',r15,r16,'bd');

axis([0,12,0,8]);

gridon;

end;

%twotwolarge_1k.m代码结束

%ultwotwo近邻法代码;数据前略,见ultwotwo_1k.m文件

xnewIndex=zeros(210,1);

fori=1:

210

xnewIndex(i,1)=i;

end;

[xnrSize,xntSize,xnrIndex,xntIndex,xnr,xnt]=sep(xnew,2,xnewIndex,0.5,210);

Nt=0;Nr=0;

fori=1:

105

if(xntIndex(i,1)<=100)

Nt=Nt+1;

end;

if(xnrIndex(i,1)<=100)

Nr=Nr+1;

end;

end;

fori=1:

Ntr5(i)=xnt(i,1);end;

fori=1:

Ntr6(i)=xnt(i,2);end;

fori=1+Nt:

105r7(i)=xnt(i,1);end;

fori=1+Nt:

105r8(i)=xnt(i,2);end;

fori=1:

Nrr9(i)=xnr(i,1);end;

fori=1:

Nrr10(i)=xnr(i,2);end;

fori=1+Nr:

105r11(i)=xnr(i,1);end;

fori=1+Nr:

105r12(i)=xnr(i,2);end;

figure

(2);

plot(r5,r6,'*',r7,r8,'o');

axis([0,60,0,20]);

gridon;

figure(3);

plot(r9,r10,'*',r11,r12,'o');

axis([0,60,0,20]);

gridon;

[FailCount,FailIndex]=OneNear(Nr,Nt,xnr,xnt,xnrSize,xntSize,2,2);

pe=FailCount/xntSize

if(pe>0)

fori=1:

FailCountr13(i)=xnt(FailIndex(i,1),1);end;

fori=1:

FailCountr14(i)=xnt(FailIndex(i,1),2);end;

figure(4);

plot(r5,r6,'*',r7,r8,'o',r13,r14,'bd');

axis([0,60,0,20]);

gridon;

end;

%k=7

Mk=7;

[MFailCount,MFailIndex]=MulNear(Mk,Nr,Nt,xnr,xnt,xnrSize,xntSize,2,2);

Mpe=MFailCount/xntSize

if(Mpe>0)

fori=1:

MFailCountr15(i)=xnt(MFailIndex(i,1),1);end;

fori=1:

MFailCountr16(i)=xnt(MFailIndex(i,1),2);end;

figure(5);

plot(r5,r6,'*',r7,r8,'o',r15,r16,'bd');

axis([0,60,0,20]);

gridon;

end;

%ultwotwo_1k.m代码结束

%threethree近邻法代码;数据前略,见threethree_1k.m文件

xnewIndex=zeros(270,1);

fori=1:

270

xnewIndex(i,1)=i;

end;

[xnrSize,xntSize,xnrIndex,xntIndex,xnr,xnt]=sep(xnew,3,xnewIndex,0.5,270);

Nt1=0;Nr1=0;Nt2=0;Nr2=0;

fori=1:

xntSize

if(xntIndex(i,1)<=190)

Nt1=Nt1+1;

if(xntIndex(i,1)<=100)

Nt2=Nt2+1;

end;

end;

end;

fori=1:

xnrSize

if(xnrIndex(i,1)<=190)

Nr1=Nr1+1;

if(xnrIndex(i,1)<=100)

Nr2=Nr2+1;

end;

end;

end;

fori=1:

Nt2

r10(i)=xnt(i,1);r11(i)=xnt(i,2);r12(i)=xnt(i,3);

end;

fori=Nt2+1:

Nt1

r13(i)=xnt(i,1);r14(i)=xnt(i,2);r15(i)=xnt(i,3);

end;

fori=Nt1+1:

135

r16(i)=xnt(i,1);r17(i)=xnt(i,2);r18(i)=xnt(i,3);

end;

figure

(2);

plot3(r10,r11,r12,'*',r13,r14,r15,'o',r16,r17,r18,'.');

axis([-5,15,-10,30,-10,30]);

gridon;

fori=1:

Nr2

r19(i)=xnr(i,1);r20(i)=xnr(i,2);r21(i)=xnr(i,3);

end;

fori=Nr2+1:

Nr1

r22(i)=xnr(i,1);r23(i)=xnr(i,2);r24(i)=xnr(i,3);

end;

fori=Nr1+1:

135

r25(i)=xnr(i,1);r26(i)=xnr(i,2);r27(i)=xnr(i,3);

end;

figure(3);

plot3(r19,r20,r21,'*',r22,r23,r24,'o',r25,r26,r27,'.');

axis([-5,15,-10,30,-10,30]);

gridon;

Nr(1,1)=Nr2;Nr(2,1)=Nr1;Nt(1,1)=Nt2;Nt(2,1)=Nt1;

[FailCount,FailIndex]=OneNear(Nr,Nt,xnr,xnt,xnrSize,xntSize,3,3);

pe=FailCount/xntSize

if(pe>0)

fork=1:

FailCount

r28(k)=xnt(FailIndex(k,1),1);

r29(k)=xnt(FailIndex(k,1),2);

r30(k)=xnt(FailIndex(k,1),3);

end;

figure(4);

plot3(r10,r11,r12,'*',r13,r14,r15,'o',r16,r17,r18,'.',r28,r29,r30,'bd');

axis([-5,15,-10,30,-10,30]);

gridon;

end;

%k=7

Mk=7;

[MFailCount,MFailIndex]=MulNear(Mk,Nr,Nt,xnr,xnt,xnrSize,xntSize,3,3);

Mpe=MFailCount/135

if(Mpe>0)

forq=1:

MFailCount

r31(q)=xnt(MFailIndex(q,1),1);

r32(q)=xnt(MFailIndex(q,1),2);

r33(q)=xnt(MFailIndex(q,1),3);

end;

figure(5);

plot3(r10,r11,r12,'*',r13,r14,r15,'o',r16,r17,r18,'.',r31,r32,r33,'bd');

axis([-5,15,-10,30,-10,30]);

gridon;

end;

%threethree_1k.m代码结束

%随机分组函数sep.m

function[xnrSize,xntSize,xnrIndex,xntIndex,xnr,xnt]=sep(x,dem,xIndex,rfa,sizepre)

xntSize=double(int16(sizepre*rfa));xnrSize=sizepre-xntSize;

xnt=zeros(xntSize,dem);xnr=zeros(xnrSize,dem);

xntIndex=zeros(xntSize,1);xnrIndex=zeros(xnrSize,1);

i=1;

while(i<=xntSize)

rmn=xIndex(uint16((rand(1,1)*sizepre)+1),1);

quitflag=1;

forj=1:

i

if(xntIndex(j,1)==rmn)

quitflag=0;

break;

end;

end;

if(quitflag)

xntIndex(i,1)=rmn;

i=i+1;

end;

end;

xntIndex=sort(xntIndex);

xntIndexInx=zeros(xntSize,1);j=1;

fori=1:

xntSize

while(xntIndex(i,1)~=xIndex(j,1))

j=j+1;

end;

xntIndexInx(i,1)=j;

end;

i=1;j=1;randex=0;randpr=xntIndexInx(j,1);

while(i<=xnrSize)

if(j~=1)

randex=randpr;

if(j~=xntSize+1)

randpr=xntIndexInx(j,1);

else

randpr=sizepre+1;

end;

end;

randdelt=randpr-randex;

while(randdelt>1)

xnrIndex(i,1)=xIndex((randpr-randdelt+1),1);

randdelt=randdelt-1;

i=i+1;

end;

j=j+1;

end;

if(dem==2)

fori=1:

xnrSize

xnr(i,1)=x((xnrIndex(i,1)),1);xnr(i,2)=x((xnrIndex(i,1)),2);

end;

fori=1:

xntSize

xnt(i,1)=x((xntIndex(i,1)),1);xnt(i,2)=x((xntIndex(i,1)),2);

end;

end;

if(dem==3)

fori=1:

xnrSize

xnr(i,1)=x(xnrIndex(i,1),1);xnr(i,2)=x(xnrIndex(i,1),2);xnr(i,3)=x(xnrIndex(i,1),3);

end;

fori=1:

xntSize

xnt(i,1)=x(xntIndex(i,1),1);xnt(i,2)=x(xntIndex(i,1),2);xnt(i,3)=x(xntIndex(i,1),3);

end;

end;

%sep.m代码结束

%1近邻法分类函数OneNear.m

function[FailCount,FailIndex]=OneNear(xnrL,xntL,xnr,xnt,xnrCount,xntCount,CountL,dem)

FailCount=0;FailIndex=zeros(xntCount,1);

k=1;

fori=1:

xntCount

MinIndex=1;

if(dem==2)

MinOdis=(xnr(1,1)-xnt(i,1))^2+(xnr(1,2)-xnt(i,2))^2;

end;

if(dem==3)

MinOdis=(xnr(1,1)-xnt(i,1))^2+(xnr(1,2)-xnt(i,2))^2+(xnr(1,3)-xnt(i,3))^2;

end;

forj=1:

xnrCount

if(dem==2)

OdisTemp=(xnr(j,1)-xnt(i,1))^2+(xnr(j,2)-xnt(i,2))^2;

end;

if(dem==3)

OdisTemp=(xnr(j,1)-xnt(i,1))^2+(xnr(j,2)-xnt(i,2))^2+(xnr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1