K-均值聚类算法实验报告-模式识别-C.doc_第1页
K-均值聚类算法实验报告-模式识别-C.doc_第2页
K-均值聚类算法实验报告-模式识别-C.doc_第3页
K-均值聚类算法实验报告-模式识别-C.doc_第4页
K-均值聚类算法实验报告-模式识别-C.doc_第5页
免费预览已结束,剩余6页可下载查看

下载本文档

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

文档简介

040930520 吴非 模式识别实验报告K-均值聚类算法实验报告试验目的通过对K-均值算法的编程实现,加强对该算法的理解和认识。提高自身的知识水平和编程能力,认识模式识别在生活中的应用。算法思想K-均值算法的主要思想是先在需要分类的数据中寻找K组数据作为初始聚类中心,然后计算其他数据距离这三个聚类中心的距离,将数据归入与其距离最近的聚类中心,之后再对这K个聚类的数据计算均值,作为新的聚类中心,继续以上步骤,直到新的聚类中心与上一次的聚类中心值相等时结束算法。子函数int judge(float i,float j,float k)judge用来判断元素属于哪个聚类,返回元素所在的聚类值(1,2,3).算法流程图开 始读入要分类的数据设置初始聚类中心计算数据到K个聚类中心的距离将数据分入与其距离最小的聚类计算新的聚类中心聚类中心是否收敛?否输出K个分类好的聚类结 束是实验代码#include#include#include#define COUNT 150 /数据个数struct data float dx;float dy;float dz;float dm;int symbol;/标号data150,Zdata3,Cz3;int time=0;/记录迭代次数int judge(float i,float j,float k)/判断数据属于哪个分类if(i=j)&(i=k)return 1; else if(ji)&(j=k)return 2; elsereturn 3;void main()int z1=0,z2=0,z3=0;/ 存放每个聚类的元素个数 float a=0,b=0,c=0,d=0,e3,t12; float sum=1; int count; fstream outputFile; outputFile.open(Iris.txt,ios:in); /cout文件中的数据如下endl; if(!outputFile) coutCant open the File!endl; exit(0); for(count=0;countdatacount.dx; outputFiledatacount.dy; outputFiledatacount.dz; outputFiledatacount.dm; datacount.symbol=0; /* for(count=0;countCOUNT;count+)/输出文件中的数据 cout.setf(ios:showpoint); coutdatacount.dx ; coutdatacount.dy ; coutdatacount.dz ; coutdatacount.dm ; coutendl; */ outputFile.close(); for(count=0;count3;count+)/初始化聚类 Zdatacount.dx=datacount.dx; Zdatacount.dy=datacount.dy; Zdatacount.dz=datacount.dz; Zdatacount.dm=datacount.dm; Zdatacount.symbol=datacount.symbol; do Cz0.dx=0;/初始化Cz0.dy=0;Cz0.dz=0;Cz0.dm=0;Cz1.dx=0;Cz1.dy=0;Cz1.dz=0;Cz1.dm=0;Cz2.dx=0;Cz2.dy=0;Cz2.dz=0;Cz2.dm=0; for(count=0;countCOUNT;count+)/判断每个元素属于哪个聚类a=(Zdata0.dx-datacount.dx);b=(Zdata0.dy-datacount.dy);c=(Zdata0.dz-datacount.dz);d=(Zdata0.dm-datacount.dm);e0=a*a+b*b+c*c+d*d;a=(Zdata1.dx-datacount.dx);b=(Zdata1.dy-datacount.dy);c=(Zdata1.dz-datacount.dz);d=(Zdata1.dm-datacount.dm);e1=a*a+b*b+c*c+d*d;a=(Zdata2.dx-datacount.dx);b=(Zdata2.dy-datacount.dy);c=(Zdata2.dz-datacount.dz);d=(Zdata2.dm-datacount.dm);e2=a*a+b*b+c*c+d*d;datacount.symbol=judge(e0,e1,e2);/coutdatacount.symbol;z1=0;z2=0;z3=0; for(count=0;countCOUNT;count+)/计算每个聚类的元素个数 if(datacount.symbol=1) Cz0.dx+=datacount.dx; Cz0.dy+=datacount.dy; Cz0.dz+=datacount.dz; Cz0.dm+=datacount.dm; z1+; else if(datacount.symbol=2) Cz1.dx+=datacount.dx; Cz1.dy+=datacount.dy; Cz1.dz+=datacount.dz; Cz1.dm+=datacount.dm; z2+; else Cz2.dx+=datacount.dx; Cz2.dy+=datacount.dy; Cz2.dz+=datacount.dz; Cz2.dm+=datacount.dm; z3+; /coutz1 z2 z3 endl;/计算新的聚类中心 Cz0.dx=Cz0.dx/z1;Cz0.dy=Cz0.dy/z1;Cz0.dz=Cz0.dz/z1;Cz0.dm=Cz0.dm/z1;Cz1.dx=Cz1.dx/z2;Cz1.dy=Cz1.dy/z2;Cz1.dz=Cz1.dz/z2;Cz1.dm=Cz1.dm/z2;Cz2.dx=Cz2.dx/z3;Cz2.dy=Cz2.dy/z3;Cz2.dz=Cz2.dz/z3;Cz2.dm=Cz2.dm/z3;+time;sum=0;t0=(Zdata0.dx-Cz0.dx)*(Zdata0.dx-Cz0.dx);t1=(Zdata0.dy-Cz0.dy)*(Zdata0.dy-Cz0.dy);t2=(Zdata0.dz-Cz0.dz)*(Zdata0.dz-Cz0.dz);t3=(Zdata0.dm-Cz0.dm)*(Zdata0.dm-Cz0.dm); t4=(Zdata1.dx-Cz1.dx)*(Zdata1.dx-Cz1.dx);t5=(Zdata1.dy-Cz1.dy)*(Zdata1.dy-Cz1.dy);t6=(Zdata1.dz-Cz1.dz)*(Zdata1.dz-Cz1.dz);t7=(Zdata1.dm-Cz1.dm)*(Zdata1.dm-Cz1.dm);t8=(Zdata2.dx-Cz2.dx)*(Zdata2.dx-Cz2.dx);t9=(Zdata2.dy-Cz2.dy)*(Zdata2.dy-Cz2.dy);t10=(Zdata2.dz-Cz2.dz)*(Zdata2.dz-Cz2.dz);t11=(Zdata2.dm-Cz2.dm)*(Zdata2.dm-Cz2.dm);for(count=0;count12;count+)sum+=tcount;/coutendlsumendl;/迭代的判定sumZdata0.dx=Cz0.dx;Zdata0.dy=Cz0.dy;Zdata0.dz=Cz0.dz;Zdata0.dm=Cz0.dm;Zdata1.dx=Cz1.dx;Zdata1.dy=Cz1.dy;Zdata1.dz=Cz1.dz;Zdata1.dm=Cz1.dm;Zdata2.dx=Cz2.dx;Zdata2.dy=Cz2.dy;Zdata2.dz=Cz2.dz;Zdata2.dm=Cz2.dm; while(sum!=0);cout(下标从1到150)endl;cout分类成功!endl;cout*endl;for(count=0;countCOUNT;count+)if(datacount.symbol=1)coutcount+1 ;coutendl共z1个元素属于第一类endl;cout*endl;for(count=0;countCOUNT;count+)if(datacount.symbol=2)coutcount+1 ;coutendl共z2个元素属于第二类endl;cout*endl;for(count=0;countCOUNT;count+)if(datacount.symbol=3)coutcount+1 ;coutendl共z3个元素属于第三类endl;cout*endl;coutendl迭代次数为 time 次endlendl; 实验过程执行程序结果如下令前三个数据作为初始聚类中心以第2,3,4个数据作为初始聚类中心以第100,101,102组数据为初始聚类中心发现聚类的结果基本一样,只是有很少数的数据的聚类会发生变化(如第51个数据

温馨提示

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

评论

0/150

提交评论