您好,欢迎访问三七文档
模式识别导论大作业(2014-2015第一学期)南京航空航天大学2014年10月22日南京航空航天大学-1-一、K均值聚类(20分)1.功能描述:将给定文件里的数据样本按照k均值聚类的思想分为3类,将第一、二、三类的数据编号分别输出并统计各类别模式向量的总个数。K均值聚类通过不断调整类心和各模式的类别,最终使各模式到类心距离平方和最小,故此聚类算法将数据非常有效地进行了划分。2.源代码#includestdio.h#includestdlib.h#includemath.h#defineSIZE150//宏定义,表示模式样本的总量intfx(doublecen[6][4]);//判断前后聚类中心是否相等,全相等,return1;否则return0;intmain(){FILE*fp;inti=0,j=0,t=0,p=0,q=0,x=0;//t、p、q分别记录类别123中样本个数inta[SIZE]={0},b[SIZE]={0},c[SIZE]={0};doublesum1=0,sum2=0,sum3=0;//以二维数组表示向量,array[i]是第i个样本,center[6][4]存放第k次和第k+1次初始聚类中心doublearr[SIZE][4],center[6][4]={0};if((fp=fopen(Iris.txt,r))==NULL)//打开文件操作{printf(cannotopenfile\n);exit(0);}for(i=0;iSIZE;i++)//为数组赋值,共150个向量{for(j=0;j4;j++){fscanf(fp,%lf,&arr[i][j]);}}fclose(fp);//关闭文件南京航空航天大学-2-for(i=0;i3;i++)//为center[6][4]赋初值,将总体前三个向量作为初始聚类中心。{for(j=0;j4;j++){center[i][j]=arr[i][j];center[i+3][j]=arr[i][j];}}do{t=0;p=0;q=0;for(i=3;i6;i++){for(j=0;j4;j++){center[i-3][j]=center[i][j];//将第k+1次的聚类中心取代第k次放进//center前三行center[i][j]=0;//后三行置0}}for(i=0;iSIZE;i++){sum1=0;sum2=0;sum3=0;for(j=0;j4;j++){sum1+=pow(arr[i][j]-center[0][j],2);//sum用于计算欧氏距离sum2+=pow(arr[i][j]-center[1][j],2);sum3+=pow(arr[i][j]-center[2][j],2);}if(sum1sum2&&sum1sum3)//按距离来为样本点分类{a[t]=i;t++;for(x=0;x4;x++){center[3][x]+=arr[i][x];//将某一聚类中样本的和全加起来,}//注意向量各项都要累加}if(sum2sum3&&sum2sum1){南京航空航天大学-3-b[p]=i;p++;for(x=0;x4;x++){center[4][x]+=arr[i][x];}}if(sum3sum2&&sum3sum1){c[q]=i;q++;for(x=0;x4;x++){center[5][x]+=arr[i][x];}}}for(i=0;i4;i++)//求出新聚类中心放进center后三行{center[3][i]=center[3][i]/t;//tpq分别是类别123中样本的个数center[4][i]=center[4][i]/p;center[5][i]=center[5][i]/q;}}while(!fx(center));printf(类别1中的数据共计%d个,编号为:\n,t);//输出结果for(i=0;it;i++){printf(%d,a[i]+1);}printf(\n类别2中的数据共计%d个,编号为:\n,p);for(i=0;ip;i++){printf(%d,b[i]+1);}printf(\n类别3中的数据共计%d个,编号为:\n,q);for(i=0;iq;i++){printf(%d,c[i]+1);}printf(\n);if((fp=fopen(sort_result.txt,w))==NULL){printf(cannotopenfile\n);南京航空航天大学-4-exit(0);}for(i=0;it;i++)//将数据全部格式化写到sort_result.txt里{x=a[i];fprintf(fp,%lf%lf%lf%lf\n,arr[x][0],arr[x][1],arr[x][2],arr[x][3]);}for(i=0;ip;i++){x=b[i];fprintf(fp,%lf%lf%lf%lf\n,arr[x][0],arr[x][1],arr[x][2],arr[x][3]);}for(i=0;iq;i++){x=c[i];fprintf(fp,%lf%lf%lf%lf\n,arr[x][0],arr[x][1],arr[x][2],arr[x][3]);}fclose(fp);return0;}//判断前后聚类中心是否相等,全相等,return1;否则return0;intfx(doublecen[6][4]){inti,j;for(i=0;i3;i++){for(j=0;j4;j++){if(cen[i][j]!=cen[i+3][j]){return0;}}}return1;}南京航空航天大学-5-3.分类结果4.算法分析(1)k均值算法对于初始聚类中心的选择是随机和任意的,本次代码实现选择的是样本中前3个样本作为初始聚类中心。(2)优点:宏定义了样本的总量,当换个样本时算法仍有效;模块化设计,将判别前后聚类中心是否一致单独写成一个函数调用,使代码结构更加清晰,逻辑化更强;(3)缺点:只能对样本做3个类别分类,未实现多个类别分类;模式样本的特征只能是4个,未定义成可以改变的变量。二、线性分类器设计(20分)1.选取的训练集与测试集(训练集大概是整体样本的2/3)比例:训练集:测试集=3:1南京航空航天大学-6-第一类第二类第三类总计训练集26413490测试集13201660总计396150150训练集:(样本编号1-150)第一类:515378101103104105106108109110111112113116117118119121123125126129130131132,共26个第二类:7374757677798081828384858687888990919293949596979899100102107114115120122124127128134139143147150,共41个第三类:12345678910111213141516171819202122232425262728293031323334,共34个测试集:(样本编号1-150)第一类:133135136137138140141142144145146148149,共13个第二类:5254555657585960616263646566676869707172,共20个第三类:35363738394041424344454647484950,共16个2.分类决策与分类器(写出判别函数,并给出图示)采用一对一方式的线性判别函数即wi/wj两分法(1)判别函数的计算与参数%求均值,注意为列向量X1=mean(A)';X2=mean(B)';X3=mean(C)';%求类内离散度矩阵S1、S2、S3S1=zeros(4,4);fori=1:N1S1=S1+([A(i,1),A(i,2),A(i,3),A(i,4)]'-X1)*...([A(i,1),A(i,2),A(i,3),A(i,4)]'-X1)';endS2=zeros(4,4);fori=1:N2S2=S2+([B(i,1),B(i,2),B(i,3),B(i,4)]'-X2)*...([B(i,1),B(i,2),B(i,3),B(i,4)]'-X2)';endS3=zeros(4,4);fori=1:N3S3=S3+([C(i,1),C(i,2),C(i,3),C(i,4)]'-X3)*...([C(i,1),C(i,2),C(i,3),C(i,4)]'-X3)';endW12=(inv(S1+S2))*(X1-X2);w012=(W12'*X1+W12'*X2)/2;W23=(inv(S2+S3))*(X2-X3);南京航空航天大学-7-w023=(W23'*X2+W23'*X3)/2;W13=(inv(S1+S3))*(X1-X3);w013=(W13'*X1+W13'*X3)/2;X1=[6.9615;3.0731;5.8077;1.9923]X2=[5.8854;2.7390;4.4976;1.4829]X3=[5.0500;3.4794;1.4765;0.2441]S1=6.12150.95315.08770.02230.95312.53120.34540.61465.08770.34548.27851.94150.02230.61461.94151.9785S2=7.19121.51344.32851.11981.51342.55761.12390.70734.32851.123911.28985.34831.11980.70735.34834.1580S3=4.44503.43500.47000.48503.43504.6356-0.03650.44090.4700-0.03651.02120.16530.48500.44090.16530.3438W12=[0.05790.02040.02200.0416]W13=[0.0808-0.20090.29820.5560]W23=[0.0452-0.17190.23760.0118]w012=0.6171w013=1.5348w023=0.4331第1、2类判别函数:g12(X)=W12’*X-w012第1、3类判别函数:g13(X)=W13’*X-w013第2、3类判别函数:g23(X)=W23’*X-w023(2)样本分类的规则因为采用一对一方式的线性判别函数即wi/wj两分法,所以:g12(X)0且g13(X)0,则X属于第一类;g21(X)0且g23(X)0,则X属于第二类;g31(X)0且g32(X)0,则X属于第三类;3.在测试集上的测试结果(给出图示,正确分类的样本点与错误分类的样本点用不同标志标出,给出正确率)训练集:第1类正确率:92.31%南京航空航天大学-8-第2类正确率100%第3类正确率:100%三、贝叶斯决策(20分)1.选取的训练集与测试集(训练集大概是整体样本的2/3)训练集:(样本编号-150)第一类:515378101103104105106108109110111112113116117118119121123125126129130131132,共26个第二类:7374757677798081828384858687888990919293949596979899100102107114115120122124127128134139143147150,共41个第三类:12345678910111213141516171819202122232425262728293031323334,共34个测试集:(样本编号1-150)第一类:133135136137138140141142144145146148149,共13个第二类:5254555657585960616263646566676869707172,共20个第三类
本文标题:模式识别大作业
链接地址:https://www.777doc.com/doc-2304565 .html