数据挖掘实验报告聚类分析1_第1页
数据挖掘实验报告聚类分析1_第2页
数据挖掘实验报告聚类分析1_第3页
数据挖掘实验报告聚类分析1_第4页
已阅读5页,还剩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 个对象作为初始聚类中心,而对于所剩下的其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类。然后,再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值),不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数,具体定义如下:21=-=ki iie c p m p (1)其中e 为数据库中所有对象的均方差之和,p

3、为代表对象的空间中的一个点,m i 为聚类c i 的均值(p 和m i 均是多维的)。公式(1)所示的聚类标准,旨在使所获得的k 个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。四、实验步骤step 1.读取数据组,从n 个数据对象任意选择k 个对象作为初始聚类中心; step 2.循环step 3到step 4直到每个聚类不再发生变化为止; step 3.根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离,并根据最小距离重新对相应对象进行划分;step 4.重新计算每个(有变化)聚类的均值(中心对象)。 代码#include #include #inc

4、lude #include int k,vectordim,datasize,seed=1; float *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(f loat);for(i=1; ireturn p;/*释放二维数组所占用的内存*/void freearray(float* p)free

5、(*p); free(p);void loaddata()file * fp;int i,j;if(fp=fopen(data.txt,r)=n ull)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,&da tasize)!=3)printf(load error!n);fclose(fp);exit(0);data=arr

6、ay(datasize,vectordim+1) ;for(i=0;idataivectordim=0;for(j=0;jif(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;isum+=pow(ai-bi,2);return sqrt(sum);void getmaxmin(float *a)int i,j;max_c

7、olumn=(float*)malloc(sizeof(float)*vectordim );min_column=(float *)malloc(sizeof(float)*vectordim ); for(i=0;imax_columni=a0i;min_columni=a0i;for(i=0;ifor(j=1;jif(ajimax_columni)max_col umni=aji;if(aji/*printf(max_column%d=%f, min_column%d=%fn,i,max_columni,i,min_columni);*/void initializerandom()se

8、ed+;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 initialized as follows:n); for(i=0;iinitializerandom();kmatrixivectordim=

9、(float)(i+ 1);printf(location-%d: ,i+1); for(j=0;jkmatrixij=randomreal(min_co lumni,max_columni);printf(% f, ,kmatrixij);printf(n);int existemptyclass()int *empty,i,j,ef;empty=(int*)malloc(sizeof(int)*k);for(i=0;ifor(i=0;ifor(j=1;jif(j=(int)dataivectordim) emptyj-1+;for(i=0,ef=0;iif(0=emptyi) ef=1;r

10、eturn ef;int cluster()int i,j,flag,eflag=1;double closest,d;for(i=0;i closest=euclid_distance(datai, kmatrix0,vectordim); flag=1;for(j=1;jd=euclid_distance(datai,kmatrixj,vectordim);if(dclosest=d;flag=j+1;if(dataivectordim!=(float )flag) eflag=0;dataivectordim=(float)fla g;return eflag;void update_k

11、_location()int i,j,number,m;float *temp;temp=(float*)malloc(sizeof(float)*(vectordi m);for(m=0;mtempm=0;for(number=0,i=1;ifor(m=0;mtempm=0;for(j=0;jif(datajvectordim=i)number+;for(m=0;mtempm+=datajm;for(m=0;mkmatrixi-1m=tempm/numbe r;/*printf(%fn,kmatrixi-1 m);*/free(temp);void output()int i,j,m;/*f

12、or(m=0;m/*printf(data%dvectordim=%f n,m,datamvectordim);*/for(i=1;iprintf(the following data are clusterd as class %d:n,i); for(j=0;jif(datajvectordim=(float)i) for(m=0;mprintf(n);void freememory()freearray(kmatrix);freearray(data);free(max_column);free(min_column); main() int end_flag,empty_flag=0;

13、long int time;loaddata();getmaxmin(data);while(1)k_locations_random();end_flag=cluster();if(existemptyclass()printf(there is a empty class!nsorestart!n);continue;time=0;while(!end_flag)if(time1000)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.3431.2 -14.4 2332.02 -23 24.44-25.35 36.3 -33.3

温馨提示

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

评论

0/150

提交评论