




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据挖掘实验报告(三)聚类分析姓名:李圣杰班级:计算机1304学号:1311610602 一、实验目的1、 掌握k-means聚类方法;2、 通过自行编程,对三维空间内的点用k-means方法聚类。二、实验设备 pc一台,dev-c+5.11三、实验内容 1.问题描述:立体空间三维点的聚类.说明:数据放在数据文件中(不得放在程序中),第一行是数据的个数,以后各行是各个点的x,y,z坐标。2.设计要求读取文本文件数据,并用k-means方法输出聚类中心3. 需求分析k-means 算法接受输入量k;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类
2、中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。k-means算法的工作过程说明如下:首先从n个数据对象任意选择k个对象作为初始聚类中心,而对于所剩下的其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类。然后,再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值),不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数,具体定义如下: (1)其中e为数据库中所有对象的均方差之和,p为代表对象的空间中的一个点,mi为聚类ci的均值(p和mi均是多维的)。公式(1)
3、所示的聚类标准,旨在使所获得的k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。四、实验步骤step 1.读取数据组,从n个数据对象任意选择k个对象作为初始聚类中心;step 2.循环step 3到step 4直到每个聚类不再发生变化为止;step 3.根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离,并根据最小距离重新对相应对象进行划分;step 4.重新计算每个(有变化)聚类的均值(中心对象)。代码图表b#include #include #include #include int k,vectordim,datasize,seed=1;float
4、 *data,*kmatrix;float *max_column,*min_column;/*创建维数可指定的二维动态数组arraymn*/float* array(int m, int n) float *p; int i; p=(float*)malloc(m*sizeof(float*); p0=(float*)malloc(m*n*sizeof(float); for(i=1; im; +i) pi=pi-1+n; return p;/*释放二维数组所占用的内存*/void freearray(float* p) free(*p); free(p);void loaddata() f
5、ile * fp; int i,j; if(fp=fopen(data.txt,r)=null) printf(cannot open file!n);exit(0); if(feof(fp) printf(data.txt is a empty file!n); fclose(fp);exit(0); if(fscanf(fp,k=%d,vectordim=%d,datasize=%dn,&k,&vectordim,&datasize)!=3) printf(load error!n); fclose(fp);exit(0); data=array(datasize,vectordim+1)
6、; for(i=0;idatasize;i+) dataivectordim=0; for(j=0;jvectordim;j+) if(j=(vectordim-1) fscanf(fp,%fn,&dataij); else fscanf(fp,%f ,&dataij); /*printf(%f ,dataij);*/ double euclid_distance(float a,float b,int dim)int i;double sum=0;for(i=0;idim;i+)sum+=pow(ai-bi,2);return sqrt(sum);void getmaxmin(float *
7、a)int i,j;max_column=(float *)malloc(sizeof(float)*vectordim);min_column=(float *)malloc(sizeof(float)*vectordim);for(i=0;ivectordim;i+)max_columni=a0i;min_columni=a0i;for(i=0;ivectordim;i+) for(j=1;jmax_columni)max_columni=aji; if(ajimin_columni)min_columni=aji; /*printf(max_column%d=%f, min_column
8、%d=%fn,i,max_columni,i,min_columni);*/ void initializerandom()seed+;srand(unsigned) time(null)+seed);float randomreal(float low, float high) return (float) rand() / rand_max) * (high-low) + low; void k_locations_random()int i,j;kmatrix=array(k,vectordim+1);printf(randomly the k-locations are initial
9、ized as follows:n);for(i=0;ik;i+) initializerandom(); kmatrixivectordim=(float)(i+1); printf(location-%d: ,i+1); for(j=0;jvectordim;j+) kmatrixij=randomreal(min_columni,max_columni);printf(%f, ,kmatrixij); printf(n);int existemptyclass()int *empty,i,j,ef;empty=(int *)malloc(sizeof(int)*k);for(i=0;ik
10、;i+) emptyi=0;for(i=0;idatasize;i+)for(j=1;j=k;j+)if(j=(int)dataivectordim) emptyj-1+;for(i=0,ef=0;ik;i+) if(0=emptyi) ef=1;return ef;int cluster()int i,j,flag,eflag=1;double closest,d;for(i=0;idatasize;i+)closest=euclid_distance(datai,kmatrix0,vectordim);flag=1; for(j=1;jk;j+) d=euclid_distance(dat
11、ai,kmatrixj,vectordim); if(dclosest) closest=d;flag=j+1; if(dataivectordim!=(float)flag) eflag=0;dataivectordim=(float)flag;return eflag;void update_k_location()int i,j,number,m;float *temp;temp=(float *)malloc(sizeof(float)*(vectordim);for(m=0;mvectordim;m+) tempm=0;for(number=0,i=1;i=k;i+) for(m=0
12、;mvectordim;m+) tempm=0;for(j=0;jdatasize;j+)if(datajvectordim=i) number+;for(m=0;mvectordim;m+)tempm+=datajm; for(m=0;mvectordim;m+)kmatrixi-1m=tempm/number;/*printf(%fn,kmatrixi-1m);*/free(temp);void output()int i,j,m;/*for(m=0;mdatasize;m+)*/*printf(data%dvectordim=%fn,m,datamvectordim);*/ for(i=
13、1;i=k;i+) printf(the following data are clusterd as class %d:n,i); for(j=0;jdatasize;j+) if(datajvectordim=(float)i) for(m=0;m1000)break; time+; update_k_location(); end_flag=cluster();empty_flag=existemptyclass();if(empty_flag) printf(there is a empty class!nso restart!n);continue;else break;printf(nafter %ld times calculationn,time);output();freememory();实验数据文件:data.txt用空格分开k=3,vectordim=3,datasize=15-25 22.2 -35.34 31.2 -14.4 2332.02 -23 24.44 -25.35 36.3 -
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课件间律动操
- 裱花培训基础知识潍坊课件
- KUKA基础培训之3投入运行
- 中国脱盐乳清粉项目商业计划书
- 2025年中国塑料薄型载带项目投资计划书
- 钢铁安全试题题库及答案
- 2025年全球海洋酸化的生物适应策略
- 2025年丽水护士考试题目及答案
- 绍兴小学数学真题及答案
- 中国蔗渣浆项目投资计划书
- CT维保服务投标方案(技术方案)
- 小学体育六年级上册教案(全册)
- “上外杯”上海市高中英语竞赛初赛模拟试卷
- DB32T3916-2020建筑地基基础检测规程
- TB-T 3356-2021铁路隧道锚杆-PDF解密
- 创新创业教程(第四版)大学生创新创业全套教学课件
- 设备部新员工入职培训
- 飞机维护的常见工具
- 民兵伪装教学方案
- 广告策划之大白兔奶糖
- 高考语文一轮专题复习:诗化小说阅读专练
评论
0/150
提交评论