模式识别算法实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模式识别算法实现
——K近邻法&最近邻法
一.程序<用MATLAB做的> 1. 用Iris数据集验证的程序(1)用Iris数据集验证的M文件: load iris.mat;
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,bb,cc); 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('第一类分类正确率为%4.2f',sum1/25)); disp(sprintf('第二类分类正确率为%4.2f',sum2/25)); disp(sprintf('第三类分类正确率为%4.2f',sum3/25)); disp(sprintf('总分类正确率为%4.2f',sum/75)); (2)验证结果:
a)K近邻法:K=7 实验结果
(3) 数据分析
第一个表格是用K(k=7)近邻法得到的识别率,第二个表格是用最近邻法得到的识别率,可以看出对于Iris数据,两种方法的识别率都达到了95%左右。
2. 用Wine数据集验证的程序(1)用Wine数据集验证的M文件: load wine.mat;
A=randperm(59);B=randperm(71);C=randperm(48); a1=A(1,1:30); a2=A(1,31:59); a=win e(a1,1:14); aa=wine(a2,1:14);
b1=59*ones(1,36)+B(1,1:36); b2=59*ones(1,35)+B(1,37:71); b=wine(b1,1:14); bb=wine( b2,1:14);
c1=130*ones(1,24)+C(1,1:24); c2=130*ones(1,24)+C(1,25:48); c=wine(c1,1:14); cc=wine (c2,1:14);
train_sample=cat(1,a,b,c);%拼接成样本集 test_sample=cat(1,aa,bb,cc); k=7;%7近邻法 cha=zeros(1,90);
sum1=0;sum2=0;sum3=0;sum4=0; sum=0;
[i,j]=size(train_sample); [u,v]=size(test_sample); for x=1:u
for y=1:i
result=sqrt((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+(test_sample(x,5)-train_sample(y,5))^2+(test_sa mple(x,6)-train_sample(y,6))^2+(test_sample(x,7)-train_sample(y,7))^2+(test_sample(x,8)-tra in_sample(y,8))^2+(test_sample(x,9)-train_sample(y,9))^2+(test_sample(x,10)-train_sample(y