K均值聚类算法实验报告模式识别C

上传人:仙*** 文档编号:35091626 上传时间:2021-10-25 格式:DOC 页数:11 大小:392.50KB
收藏 版权申诉 举报 下载
K均值聚类算法实验报告模式识别C_第1页
第1页 / 共11页
K均值聚类算法实验报告模式识别C_第2页
第2页 / 共11页
K均值聚类算法实验报告模式识别C_第3页
第3页 / 共11页
资源描述:

《K均值聚类算法实验报告模式识别C》由会员分享,可在线阅读,更多相关《K均值聚类算法实验报告模式识别C(11页珍藏版)》请在装配图网上搜索。

1、 040930520 吴非 模式识别实验报告K-均值聚类算法实验报告试验目的通过对K-均值算法的编程实现,加强对该算法的理解和认识。提高自身的知识水平和编程能力,认识模式识别在生活中的应用。算法思想K-均值算法的主要思想是先在需要分类的数据中寻找K组数据作为初始聚类中心,然后计算其他数据距离这三个聚类中心的距离,将数据归入与其距离最近的聚类中心,之后再对这K个聚类的数据计算均值,作为新的聚类中心,继续以上步骤,直到新的聚类中心与上一次的聚类中心值相等时结束算法。子函数int judge(float i,float j,float k)judge用来判断元素属于哪个聚类,返回元素所在的聚类值(1

2、,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)re

3、turn 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.

4、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+)

5、/初始化聚类 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+

6、)/判断每个元素属于哪个聚类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=(Zd

7、ata2.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; Cz

8、0.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

9、.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

10、.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);

11、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.d

12、x;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;c

13、out*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个数据),聚类的产生次序变化了(这是显然的),但是迭代的次数变了,分别为11,12和8次。再改变输入数据的顺序,我把前50个数据放到了最后面,结果如下:发现迭代次数减少到了6次,而且数据的聚类结果也发生了一些细微的变化(比如第1个数据,即变化前的第51个数据)。实验心得初始的聚类中心的不同,对聚类结果没有很大的影响,而对迭代次数有显著的影响。数据的输入顺序不同,同样影响迭代次数,而对聚类结果没有太大的影响。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!