用C语言对k近邻法进行的模式识别

M_wenjun 贡献于2012-02-01

作者 Administrator  创建于2007-12-08 13:20:00   修改者Administrator  修改于2007-12-13 10:13:00字数2571

文档摘要:近邻法的基本思想是在测试样本x的k个近邻中,按出现的样本类别来作为x的类别,即先对x的k个近邻一一找出它们的类别,然后对x类别进行判别,即在N个训练样本中,找出x的k个近邻。
关键词:

K近邻法 近邻法的基本思想是在测试样本x的k个近邻中,按出现的样本类别来作为x的类别,即先对x的k个近邻一一找出它们的类别,然后对x类别进行判别,即在N个训练样本中,找出x的k个近邻。 设N个样本中,来自w1类的样本有N1个,来自w2类的样本有N2个,……..,来自wc类的样本有Nc个;k1,k2,……,kc是k个近邻中分别属于w1,w2,…….,wc类的样本数。定义判别函数为:gi(x)=ki,i=1,2,…..,c;决策规则为:若gj(x)=maxki,则决策x属于wj类。 输入:A[100]为100个训练样本在空间中的坐标,k=9为近邻数。 输出:x所属的类别。 取A[0]~A[9]作为x的9个初始近邻,计算与测试样本x间的欧式距离d(x,A[i]),i=0,1,……,k;按d(x,A[i])升序排序,计算最远样本与x间的距离D——max{d(x,A[j]) | j=0,1,….k}; for(i=k+1;i<=n:i++) 计算A[i]与x间的距离d(x,A[i]); if d(x,A[i])fabs(x-A[j])) { t=A[i]; A[i]=A[j]; A[j]=t; } } int compare(float A[],float B[10]) {int i,j,t=0; for(i=0;i<10;i++) {for(j=0;j<9;j++) {if(B[i]==A[j]) { t++; break; } } } return(t); } void main() {float A[100],B[100],C[10],D[10],x,t,m,d,f; int flag,i,j,n=100,k=9,u; srand((int)time(0)); for(i=0;i(-50))) {printf("%6.2f",A[i]); if((i+1)%10==0) {printf("\n"); } break; } else continue; } } for (i=1;i<=10;i++) { switch(i) {case 1: printf("第1-10个数为A1类:\n"); break; case 2: printf("第11-20个数为A2类:\n"); break; case 3: printf("第21-30个数为A3类:\n"); break; case 4: printf("第31-40个数为A4类:\n"); break; case 5: printf("第41-50个数为A5类:\n"); break; case 6: printf("第51-60个数为A6类:\n"); break; case 7: printf("第61-70个数为A7类:\n"); break; case 8: printf("第71-80个数为A8类:\n"); break; case 9: printf("第81-90个数为A9类:\n"); break; case 10: printf("第91-100个数为A10类:\n"); break; others: break; } } for(i=0;i<100;i++) {B[i]=A[i]; } while(1) { x= rand()-9.16; if((x<50)&&(x>(-10))) {printf("测试样本x=%f\n",x); break; } else continue; } knn(x,A); for(i=k;i=D[j]) { flag=1; continue; } else {flag=0; break; } } if(flag==1) {printf("x属于A%d类",(i+1)); } } } 首先产生100个-50到50之间的随机浮点数,将这一百个数按每十个一类分类。然后产生一个-10到50之间的随机测试样本数。将A[O]~A[8]作为测试样本x的初始近邻,Knn(x,A)负责将A[0]~A[8]依次按与测试样本x间的欧式距离按升序排列。将最远样本与x间的距离记为f=fabs(x-a[8]),然后i从9开始与f循环比较,如果d=fabs(x-A[i])

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 3 人已下载

下载文档