1、模式识别课程实验设计matlaab模式识别课程实验设计(matlaab)1 线性分类器设计1.1 ESM1.1.1 问题 对于twotwolarge.m文件里的数据,用最小二乘法进行两分类。1.1.2 思路及框图 1.1.3结果1.1.4程序代码%ESM代码,见ses_pct_svm.m文件y=ones(100,1);for i=46:100 y(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);hold on;%ES
2、M代码结束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);for i=1:45 xtemp= x(i,1),x(i,2),x(i,3) ; if (
3、wpct*xtemp0) deltJ=deltJ+0.5*xtemp; J=J+wpct*xtemp; endendwhile(Je) J=0; wpct=wpct-deltJ; for i=1:45 xtemp= x(i,1),x(i,2),x(i,3) ; if (wpct*xtemp0) deltJ=deltJ+0.5*xtemp; J=J+wpct*xtemp; end endendr5=-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);hold o
4、n;%单层感知机函数代码结束1.2.5讨论1.感知器相当于一个神经元的神经网络。2.能不能找到最优决策面与初始w选择有关,所以找到的w不一定是最优的。3.满足J的w有无穷多个,不能判断哪一个最好。1.3 SVM1.3.1问题 对于twotwolarge.m文件里的数据,用SVM进行两分类。1.3.2思路及框图 1.3.3结果1.3.4程序代码%SVM函数代码,见ses_pct_svm.m文件y=ones(100,1);for i=46:100 y(i)=-1;end;A=;b=;Aeq=;beq=;lb=;ub=;lbd0=ones(100,1);lbd=rands(100,1);%本来想用Q
5、uadprog实现,但可能设定的条件不正确,最终出现不收敛的情况lbd,fval,EXITFLAG=fmincon(myfun,lbd0,A,b,Aeq,beq,lb,ub,nonlcon);wsvm=zeros(2,1);for i=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;for i=1:100 if(lbd(i,1
6、)epsilon) lbdnozero=i; end;end;%找到的该支撑矢量必然位于后一类,故决策值度量为-1w3=-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);hold on;%ses_pct_svm.m代码结束%目标函数位于一个新的myfun.m文档function f=myfun(lbd)ft=-ones(100,1);y=ones(1
7、00,1);for i=46:100 y(i)=-1;end;%数据域xnew=zeros(100,2);for i=1:45 xnew(i,1)=x1(i,1) ;end;for i=1:45 xnew(i,2)=x1(i,2) ;end;for i=46:100 xnew(i,1)=x2(i-45),1) ;end;for i=46:100 xnew(i,2)=x2(i-45),2) ;end;f=ft*lbd;for i=1:100 for j=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
8、(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也是一样。如果两类不是线性可分的,那么需要增加一个对于浪不大的松弛变量,不过幸好此处线性可分。2 1_k近邻法2.1 问题 对于tw
9、otwolarge.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近邻法的错误分类率均为02.4 代码%twotwolarge近邻法代码;数据前略,见two
10、twolarge_1k.m文件xnewIndex=zeros(100,1);for i=1:100 xnewIndex(i,1)=i;end;xnrSize,xntSize,xnrIndex,xntIndex,xnr,xnt = sep(xnew,2,xnewIndex,0.5,100);Nt=0;Nr=0;for i=1:xntSize if(xntIndex(i,1)=45) Nt=Nt+1; end;end;for i=1:xnrSize if(xnrIndex(i,1)0) for i=1:FailCount r13(i)=xnt(FailIndex(i,1),1);end; for
11、i=1:FailCount r14(i)=xnt(FailIndex(i,1),2);end; figure(4); plot(r5,r6,*,r7,r8,o,r13,r14,bd); axis(0,12,0,8); grid on;end;%k=7Mk=7;MFailCount,MFailIndex=MulNear(Mk,Nr,Nt,xnr,xnt,xnrSize,xntSize,2,2);Mpe=MFailCount/xntSizeif(Mpe0) for i=1:MFailCount r15(i)=xnt(MFailIndex(i,1),1);end; for i=1:MFailCoun
12、t r16(i)=xnt(MFailIndex(i,1),2);end; figure(5); plot(r5,r6,*,r7,r8,o,r15,r16,bd); axis(0,12,0,8); grid on;end;%twotwolarge_1k.m代码结束%ultwotwo近邻法代码;数据前略,见ultwotwo_1k.m文件xnewIndex=zeros(210,1);for i=1:210 xnewIndex(i,1)=i;end;xnrSize,xntSize,xnrIndex,xntIndex,xnr,xnt = sep(xnew,2,xnewIndex,0.5,210);Nt=
13、0;Nr=0;for i=1:105 if(xntIndex(i,1)=100) Nt=Nt+1; end; if(xnrIndex(i,1)0) for i=1:FailCount r13(i)=xnt(FailIndex(i,1),1);end; for i=1:FailCount r14(i)=xnt(FailIndex(i,1),2);end; figure(4); plot(r5,r6,*,r7,r8,o,r13,r14,bd); axis(0,60,0,20); grid on;end;%k=7Mk=7;MFailCount,MFailIndex=MulNear(Mk,Nr,Nt,
14、xnr,xnt,xnrSize,xntSize,2,2);Mpe=MFailCount/xntSizeif(Mpe0) for i=1:MFailCount r15(i)=xnt(MFailIndex(i,1),1);end; for i=1:MFailCount r16(i)=xnt(MFailIndex(i,1),2);end; figure(5); plot(r5,r6,*,r7,r8,o,r15,r16,bd); axis(0,60,0,20); grid on; end;%ultwotwo_1k.m代码结束%threethree近邻法代码;数据前略,见threethree_1k.m文
15、件xnewIndex=zeros(270,1);for i=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;for i=1:xntSize if(xntIndex(i,1)=190) Nt1=Nt1+1; if(xntIndex(i,1)=100) Nt2=Nt2+1; end; end;end;for i=1:xnrSize if(xnrIndex(i,1)=190) Nr1=Nr1+1; i
16、f(xnrIndex(i,1)0) for k=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); grid on;end;%k=7Mk=7;MFailCount,MFailIndex=MulNear(Mk,Nr,Nt,xnr,xn
17、t,xnrSize,xntSize,3,3);Mpe=MFailCount/135if(Mpe0) for q=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); grid on;end;%threethree_1k.m代码
18、结束%随机分组函数sep.mfunction 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(r
19、and(1,1)*sizepre)+1),1); quitflag=1; for j=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;for i=1:xntSize while(xntIndex(i,1)=xIndex(j,1) j=j+1; end; xntIndexInx(i,1)=j;end;i=1;j=1;randex=
20、0;randpr=xntIndexInx(j,1);while(i1) xnrIndex(i,1)=xIndex(randpr-randdelt+1),1); randdelt=randdelt-1; i=i+1; end; j=j+1;end;if(dem=2) for i=1:xnrSize xnr(i,1)=x(xnrIndex(i,1),1); xnr(i,2)=x(xnrIndex(i,1),2); end; for i=1:xntSize xnt(i,1)=x(xntIndex(i,1),1); xnt(i,2)=x(xntIndex(i,1),2); end;end;if(dem
21、=3) for i=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; for i=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.mfunction FailCount,FailIndex=OneNear(xnrL,xntL,xn
22、r,xnt,xnrCount,xntCount,CountL,dem)FailCount=0; FailIndex=zeros(xntCount,1);k=1;for i=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; for j=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
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1