资源描述:
《模式识别实验二》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验二势函数算法的迭代训练0840501104刘悦一.实验目的通过本实验的学习,使学生了解或掌握模式识别中利用势函数的方法,能够实现模式的分类。学会运用以学习的先导课程如数据结构和算法设计知识,选用合适的数据结构完成算法的设计和程序的实现。并通过测试数据来检查其正确性。通过选用此种分类方法进行分类器设计实验,从而强化学生对两类别决策甚至多类别决策问题的了解和应用,为模式识别课程的后续内容的学习打下坚实的基础。二.实验内容假定对病人3项主要指标检查得到正常(类)和非正常(类)的数据如下:类:(1,2,5),(1,
2、1,2),(3,3,6);类:(5,6,10),(7,6,11),(8,7,12).三.实验步骤1、选定势函数(3个中选1,或做成多选的,实用中由人工自动选1);2、确定合适数据结构,以便分别完成势函数和判别函数的正确表示;3、编写分类决策程序;4、输入样本加以训练,使其满足分类要求,建立判别函数;5、输出你的判别函数的表达形式(注意:表达形式要求便于阅读理解)。四.测试1、先测试已有样本的正确性。2、用待测数据加以分类。这里,对样本:(2,3,5),(6,7,10)分别测试,检查它们是否能得到分别属于类和类的
3、结果,从而确认所设计的分类器是正确的。程序代码如下:n=6;%n表示样本总数。这里n=6,前3个样本属于第一类,后三个样本属于第二类m=30;%最大可能的项数d=3;%d表示维长%structsample{%intx[d];%intcl;%};%structfunc{%intsymbol;%intindex;//用于记录样本号,即对应的样本的下标号%};%structfuncftbl[m];%intkr=0;tag=1;%i,j;g=0;temp=0;s=[1,2,5,1;%1表示属于第1类1,1,2,1;%1
4、表示属于第1类3,3,6,1;%1表示属于第1类5,6,10,2;%2表示属于第2类7,6,11,2;%2表示属于第2类8,7,12,2];%2表示属于第2类%main()%{while(tag==1)tag=0;fork=1;nif(r==0)r=r+1;%r指向到目前为止所得到的势函数的最后一项ftbl(r).symbol=1;%该项的符号。1--正;-1--负ftbl(r).index=1;%该项对应的样本下标号continue;elseg=0;fori=1:rtemp=0;forj=1:d%d表示维长t
5、emp=temp+(s(k,j)-s(ftbl(i).index,j))*(s(k,j)-s(ftbl(i).index,j));endg=g+ftbl(i).symbol*exp(-temp);%g+=ftbl[i].symbol*exp(-temp);共r项,每项都是一指数形式endif((g>0&s(k,4)==1)
6、(g<0&s(k,4)==2))continue;%正确分类时,不修改判别函数elser=r+1;ftbl(r).index=k;tag=1;if(g>0&s(k,4)==2)ftbl(r)
7、.symbol=-1;elseif(g<0&ss(k,4)==1)ftbl(r).symbol=1;endendendendend%endofforend%endofwhiledisp('')disp('输出判别函数的表达式')fori=1:rif(ftbl(i).symbol==1)if(i==1)fprintf('exp{-[(x1')elsefprintf('+exp{-[(x1')endelsefprintf('-exp{-[(x1')endif(s(ftbl(i).index,1)>0)f
8、printf('-'),s(ftbl(i).index,1),fprintf(')^2+(x2')elseif(s(ftbl(i).index,1)<0)fprintf('+'),-s(ftbl(i).index,1),fprintf(')^2+(x2')else%s[ftbl[i].index].x[0]==0fprintf(')^2+(x2')endendif(s(ftbl(i).index,2)>0)fprintf('-'),s(ftbl(i).index,2),fprintf(')^2+(x3')els
9、eif(s(ftbl(i).index,2)<0)fprintf('+'),-s(ftbl(i).index,2),fprintf(')^2+(x3')elsefprintf(')^2+(x3')endendif(s(ftbl(i).index,3)>0)fprintf('-'),s(ftbl(i).index,3),fprintf(')^2+(x4')elseif(s(ftbl(i)