数据挖掘实验报告-聚类分析

上传人:hs****ma 文档编号:565047435 上传时间:2022-10-09 格式:DOC 页数:7 大小:89.01KB
返回 下载 相关 举报
数据挖掘实验报告-聚类分析_第1页
第1页 / 共7页
数据挖掘实验报告-聚类分析_第2页
第2页 / 共7页
数据挖掘实验报告-聚类分析_第3页
第3页 / 共7页
数据挖掘实验报告-聚类分析_第4页
第4页 / 共7页
数据挖掘实验报告-聚类分析_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《数据挖掘实验报告-聚类分析》由会员分享,可在线阅读,更多相关《数据挖掘实验报告-聚类分析(7页珍藏版)》请在金锄头文库上搜索。

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.重新计算每个(有变化)聚类的均值(中心对象)。代码#include #include #include #include int K,Vectordim,datasize,seed=1;float *d

4、ata,*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() FILE

5、 * 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); f

6、or(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 *a)i

7、nt 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%d=

8、%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 initialize

9、d 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;i+

10、) 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(datai,

11、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;mV

12、ectordim;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=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;mVectordim;m+) printf(%f ,datajm); printf(n); void freememory()freearray(kmatrix);fre

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号