iris数据的kmeans和knn算法代码.doc_第1页
iris数据的kmeans和knn算法代码.doc_第2页
iris数据的kmeans和knn算法代码.doc_第3页
iris数据的kmeans和knn算法代码.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

clearclcload data.txt; a=data(1:30,1:4);%取第一类的前三十组aa=data(31:50,1:4);%第一类的后二十组b=data(51:80,1:4);%第二类的前三十组bb=data(81:100,1:4);%第二类的后二十组c=data(101:130,1:4);%取第三类的前三十组cc=data(131:150,1:4); %第三类的后二十组train=cat(1,a,b,c);%组成训练样本(90*4)test=cat(1,aa,bb,cc); %组成测试样本(60*4)c=3; %c均值c=3z1=train(1,:); z2=train(45,:);z3=train(90,:); %初始聚类中心z1,z2,z3m=0;t=0; %迭代步数while m=0 samp1=;samp2=;samp3=; %定义空样本:第一类为samp1,第二类为samp2,第三类为samp3 n1=1;n2=1;n3=1; t=t+1; for i=1:90 if (pdist(train(i,:);z1)pdist(train(i,:);z2)&(pdist(train(i,:);z1)pdist(train(i,:);z3)%距离 %若训练样本与聚类z1的距离小于与z2,z3的距离,则赋值于samp1. samp1(n1,:)=train(i,:); n1=n1+1; elseif (pdist(train(i,:);z2)pdist(train(i,:);z1)&(pdist(train(i,:);z2)pdist(train(i,:);z3) %若训练样本与聚类z2的距离小于与z1,z3的距离,则赋值于samp2. samp2(n2,:)=train(i,:); n2=n2+1; else%其他则赋值于samp3 samp3(n3,:)=train(i,:); n3=n3+1; end end %for c1=mean(samp1,1); c2=mean(samp2,1); c3=mean(samp3,1); %求出新的均值,产生新的聚类中心 if isequal(c1,z1)&isequal(c2,z2)&isequal(c3,z3) %判断新旧聚类中心是否相等。若相等则结束m=1 m=1; end z1=c1; %新旧聚类中心若不相等,新聚类中心赋值于旧聚类中心。继续循环 z2=c2; z3=c3;end %while %聚类中心z1=5.0267 3.45 1.4733 0.24667,z2=5.9703 2.7459 4.44051.4676,z3=6.9 3.0478 5.8174 2.0217%kmeans算法结束后分三类samp1(30*4),samp2(37*4),samp3(23*4)共90行,迭代次数t=5sum=0;u,v=size(test);%返回测试样本行列,u=60,v=4test1=;test2=;test3=;m1=1;m2=1;m3=1;for x=1:u d1=pdist(test(x,:);z1);%测试样本与聚类中心z1的距离 d2=pdist(test(x,:);z2);%测试样本与聚类中心z2的距离 d3=pdist(test(x,:);z3);%测试样本与聚类中心z3的距离 if d1d2&d1d3%若d1最小则测试样本赋值于test1 test1(m1,:)=test(x,:); m1=m1+1;m=1; elseif d2d1&d2d3%若d2最小则测试样本赋值于test2 test2(m2,:)=test(x,:); m2=m2+1;m=2; else test3(m3,:)=test(x,:);%若d3最小则测试样本赋值于test3 m3=m3+1;m=3; end%分类结果为test1(20*4),test2(25*4),test3(15*4)共60组 if x20&x40&x=60 disp(sprintf(第%d组数据分类后为第%d类,x+90,m); end if (x20&x40&x=60&m=3) sum=sum+1; %正确的个数 end end disp(sprintf(分类正确率为%4.2f,sum/60);%正确率clearclcload data.txt; a=data(1:30,1:4);%取第一类的前三十组aa=data(31:50,1:4);%第一类的后二十组b=data(51:80,1:4);%第二类的前三十组bb=data(81:100,1:4);%第二类的后二十组c=data(101:130,1:4);%取第三类的前三十组cc=data(131:150,1:4); %第三类的后二十组train_sample=cat(1,a,b,c);%组成训练样本test_sample=cat(1,aa,bb,cc); %组成测试样本k=5;%k近邻k取5cha=zeros(1,90);sum=0;i,j=size(train_sample);%i=90,j=4u,v=size(test_sample);%u=60,v=4for 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中的下标90 m1=0; m2=0; m3=0; for n=1:k if Ind(1,n)30&Ind(1,n)=60 m2=m2+1; %前五个中下标小于60大于30的个数 else m3=m3+1; %前五个中下标小于90大于60的个数 end end L=m1 m2 m3; if m1=max(L) m=1; %若m1最大则属于第一类 elseif m2=max(L) m=2; %若m2最大则属于第二类 elseif m3=max(L) m=3; %若m3最大则属

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论