《模式识别》课程实验设计matlaabWord格式文档下载.docx
- 文档编号:4815308
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:64
- 大小:385.21KB
《模式识别》课程实验设计matlaabWord格式文档下载.docx
《《模式识别》课程实验设计matlaabWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《《模式识别》课程实验设计matlaabWord格式文档下载.docx(64页珍藏版)》请在冰点文库上搜索。
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'
end
end
100
>
deltJ=deltJ+0.5*xtemp'
J=J+wpct'
while(J>
e)
wpct=wpct-deltJ;
fori=1:
fori=46:
r5=[-wpct(3)/wpct
(1),0];
r6=[0,-wpct(3)/wpct
(2)];
figure
(2);
%单层感知机函数代码结束
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文件
100
y(i)=-1;
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);
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));
%在实验数据中,可能是由于精度的原因,浪不大不可能迭代到真实的0,该变量作为0偏
epsilon=1e-5;
if(lbd(i,1)>
epsilon)
lbdnozero=i;
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);
%ses_pct_svm.m代码结束
%目标函数位于一个新的myfun.m文档
functionf=myfun(lbd)
ft=-ones(100,1);
%数据域
xnew=zeros(100,2);
45xnew(i,1)=x1(i,1);
45xnew(i,2)=x1(i,2);
100xnew(i,1)=x2((i-45),1);
100xnew(i,2)=x2((i-45),2);
f=ft'
*lbd;
forj=1:
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)));
%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);
xnewIndex(i,1)=i;
[xnrSize,xntSize,xnrIndex,xntIndex,xnr,xnt]=sep(xnew,2,xnewIndex,0.5,100);
Nt=0;
Nr=0;
xntSize
if(xntIndex(i,1)<
=45)
Nt=Nt+1;
xnrSize
if(xnrIndex(i,1)<
Nr=Nr+1;
Ntr5(i)=xnt(i,1);
Ntr6(i)=xnt(i,2);
fori=1+Nt:
50r7(i)=xnt(i,1);
50r8(i)=xnt(i,2);
Nrr9(i)=xnr(i,1);
Nrr10(i)=xnr(i,2);
fori=1+Nr:
50r11(i)=xnr(i,1);
50r12(i)=xnr(i,2);
plot(r5,r6,'
r7,r8,'
);
gridon;
plot(r9,r10,'
r11,r12,'
[FailCount,FailIndex]=OneNear(Nr,Nt,xnr,xnt,xnrSize,xntSize,2,2);
pe=FailCount/xntSize
if(pe>
FailCountr13(i)=xnt(FailIndex(i,1),1);
FailCountr14(i)=xnt(FailIndex(i,1),2);
figure(4);
plot(r5,r6,'
r13,r14,'
bd'
axis([0,12,0,8]);
gridon;
%k=7
Mk=7;
[MFailCount,MFailIndex]=MulNear(Mk,Nr,Nt,xnr,xnt,xnrSize,xntSize,2,2);
Mpe=MFailCount/xntSize
if(Mpe>
MFailCountr15(i)=xnt(MFailIndex(i,1),1);
MFailCountr16(i)=xnt(MFailIndex(i,1),2);
figure(5);
r15,r16,'
%twotwolarge_1k.m代码结束
%ultwotwo近邻法代码;
数据前略,见ultwotwo_1k.m文件
xnewIndex=zeros(210,1);
210
[xnrSize,xntSize,xnrIndex,xntIndex,xnr,xnt]=sep(xnew,2,xnewIndex,0.5,210);
105
=100)
105r7(i)=xnt(i,1);
105r8(i)=xnt(i,2);
105r11(i)=xnr(i,1);
105r12(i)=xnr(i,2);
axis([0,60,0,20]);
axis([0,60,0,20]);
%ultwotwo_1k.m代码结束
%threethree近邻法代码;
数据前略,见threethree_1k.m文件
xnewIndex=zeros(270,1);
270
[xnrSize,xntSize,xnrIndex,xntIndex,xnr,xnt]=sep(xnew,3,xnewIndex,0.5,270);
Nt1=0;
Nr1=0;
Nt2=0;
Nr2=0;
=190)
Nt1=Nt1+1;
Nt2=Nt2+1;
Nr1=Nr1+1;
Nr2=Nr2+1;
Nt2
r10(i)=xnt(i,1);
r11(i)=xnt(i,2);
r12(i)=xnt(i,3);
fori=Nt2+1:
Nt1
r13(i)=xnt(i,1);
r14(i)=xnt(i,2);
r15(i)=xnt(i,3);
fori=Nt1+1:
135
r16(i)=xnt(i,1);
r17(i)=xnt(i,2);
r18(i)=xnt(i,3);
plot3(r10,r11,r12,'
r13,r14,r15,'
r16,r17,r18,'
.'
axis([-5,15,-10,30,-10,30]);
Nr2
r19(i)=xnr(i,1);
r20(i)=xnr(i,2);
r21(i)=xnr(i,3);
fori=Nr2+1:
Nr1
r22(i)=xnr(i,1);
r23(i)=xnr(i,2);
r24(i)=xnr(i,3);
fori=Nr1+1:
r25(i)=xnr(i,1);
r26(i)=xnr(i,2);
r27(i)=xnr(i,3);
plot3(r19,r20,r21,'
r22,r23,r24,'
r25,r26,r27,'
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);
fork=1:
FailCount
r28(k)=xnt(FailIndex(k,1),1);
r29(k)=xnt(FailIndex(k,1),2);
r30(k)=xnt(FailIndex(k,1),3);
plot3(r10,r11,r12,'
r28,r29,r30,'
axis([-5,15,-10,30,-10,30]);
[MFailCount,MFailIndex]=MulNear(Mk,Nr,Nt,xnr,xnt,xnrSize,xntSize,3,3);
Mpe=MFailCount/135
forq=1:
MFailCount
r31(q)=xnt(MFailIndex(q,1),1);
r32(q)=xnt(MFailIndex(q,1),2);
r33(q)=xnt(MFailIndex(q,1),3);
r31,r32,r33,'
%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;
i
if(xntIndex(j,1)==rmn)
quitflag=0;
break;
if(quitflag)
xntIndex(i,1)=rmn;
i=i+1;
xntIndex=sort(xntIndex);
xntIndexInx=zeros(xntSize,1);
j=1;
while(xntIndex(i,1)~=xIndex(j,1))
j=j+1;
xntIndexInx(i,1)=j;
i=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;
randdelt=randpr-randex;
while(randdelt>
1)
xnrIndex(i,1)=xIndex((randpr-randdelt+1),1);
randdelt=randdelt-1;
if(dem==2)
xnrSize
xnr(i,1)=x((xnrIndex(i,1)),1);
xnr(i,2)=x((xnrIndex(i,1)),2);
xnt(i,1)=x((xntIndex(i,1)),1);
xnt(i,2)=x((xntIndex(i,1)),2);
if(dem==3)
xnr(i,1)=x(xnrIndex(i,1),1);
xnr(i,2)=x(xnrIndex(i,1),2);
xnr(i,3)=x(xnrIndex(i,1),3);
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);
%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;
xntCount
MinIndex=1;
if(dem==2)
MinOdis=(xnr(1,1)-xnt(i,1))^2+(xnr(1,2)-xnt(i,2))^2;
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;
xnrCount
OdisTemp=(xnr(j,1)-xnt(i,1))^2+(xnr(j,2)-xnt(i,2))^2;
OdisTemp=(xnr(j,1)-xnt(i,1))^2+(xnr(j,2)-xnt(i,2))^2+(xnr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模式识别 课程 实验设计 matlaab
![提示](https://static.bingdoc.com/images/bang_tan.gif)