模式识别算法实现——K近邻法&最近邻法程序<用MATLAB做的>(1)用Iris数据集验证的M文件:;A=randperm(50);B=randperm(50);C=randperm(50);a1=A(1,1:25);a2=A(1,26:50);a=Iris(a1,1:4);%%随机取第一类数据的25组aa=Iris(a2,1:4);b1=50*ones(1,25)+B(1,1:25);b2=50*ones(1,25)+B(1,26:50);b=Iris(b1,1:4);%%随机取第二类数据的25组bb=Iris(b2,1:4);c1=100*ones(1,25)+C(1,1:25);c2=100*ones(1,25)+C(1,26:50);c=Iris(c1,1:4);%%=Iris(c2,1:4);train_sample=cat(1,a,b,c);%拼接成包含75组数据的样本集test_sample=cat(1,aa,);k=7;%7近邻法cha=zeros(1,75);sum1=0;sum2=0;sum3=0;sum=0;[i,j]=size(train_sample);%i=75,j=4[u,v]=size(test_sample);%u=75,v=4forx=1:ufory=1:iresult=sqrt((test_sample(x,1)-train_sample(y,1))^2+(test_sample(x,2)-train_sample(y,2))^2+(test_sample(x,3)-train_sample(y,3))^2+(test_sample(x,4)-train_sample(y,4))^2);cha(1,y)=result;end;[z,Ind]=sort(cha);%Ind用来存储排序前在cha中的下标m1=0;m2=0;m3=0;forn=1:kifInd(1,n)<=25m1=m1+1;elseifInd(1,n)>25&&Ind(1,n)<=50m2=m2+1;elsem3=m3+1;endendifm1>=m2&&m1>=m3m=1;elseifm2>=m1&&m2>=m3m=2;elseifm3>=m1&&m3>=m2m=3;endif(x<=25&&m==1)sum1=sum1+1;elseif(x>25&&x<=50&&m==2)sum2=sum2+1;elseif(x>50&&x<=75&&m==3)sum3=sum3+1;endif(x<=25&&m==1)||(x>25&&x<=50&&m==2)||(x>50&&x<=75&&m==3)sum=sum+1;endenddisp(sprintf('第一类分类正确率为%',sum1/25));disp(sprintf('第二类分类正确率为%',sum2/25));disp(sprintf('第三类分类正确率为%',sum3/25));disp(sprintf('总分类正确率为%',sum/75));(2)验证结果:K近邻法:K=(即令K=1)(3)数据分析第一个表格是用K(k=7)近邻法得到的识别率,第二个表格是用最近邻法得到的识别率,可以看出对于Iris数据,两种方法的识别率都达到了95%左右。(1)用Wine数据集验证的M文件:;A=randperm(59);B=randperm(71);C=randperm(48);a1=A(1,1:30);a2=A(1,31:59);a=wine(a1,1:14);aa=wine(a2,1:14
模式识别中K均值与最近邻法matlab实现 来自淘豆网m.daumloan.com转载请标明出处.