模式识别算法实现
——K近邻法&最近邻法
程序<用MATLAB做的>
1. 用Iris数据集验证的程序
(1)用Iris数据集验证的M文件:
load ;
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);%%随机取第三类数据的25组
cc=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=4
for x=1:u
for y=1:i
result=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;
for n=1:k
if Ind(1,n)<=25
m1=m1+1;
elseif Ind(1,n)>25&&Ind(1,n)<=50
m2=m2+1;
else
m3=m3+1;
end
end
if m1>=m2&&m1>=m3
m=1;
elseif m2>=m1&&m2>=m3
m=2;
elseif m3>=m1&&m3>=m2
m=3;
end
if (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;
end
if (x<=25&&m==1)||(x>25&&x<=50&&m==2)||(x>50&&x<=75&&m==3)
sum=sum+1;
end
end
disp(sprintf('第一类分类正确率为%',sum1/25));
disp(sprintf('第二类分类正确率为%',sum2/25));
disp(sprintf('第三类分类正确率为%',sum3/25));
disp(sprintf('总分类正确率为%',sum/75));
(2)验证结果:
K近邻法:K=7 实验结果
表1.
类别
次数
第一类
第二类
第三类
总识别率
1
2
3
4
5
6
7
8
9
10
总识别率
最近邻法(即令K=1) 实验结果
表2.
类别
次数
第一类
第二类
第三类
总识别率
1
2
3
0.
模式识别中K均值与最近邻法matlab实现 来自淘豆网m.daumloan.com转载请标明出处.