欢迎来到天天文库
浏览记录
ID:56759451
大小:89.50 KB
页数:7页
时间:2020-07-07
《数据挖掘实验报告-聚类分析.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
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为聚类
3、Ci的均值(p和mi均是多维的)。公式(1)所示的聚类标准,旨在使所获得的k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。四、实验步骤Step1.读取数据组,从N个数据对象任意选择k个对象作为初始聚类中心;Step2.循环Step3到Step4直到每个聚类不再发生变化为止;Step3.根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离,并根据最小距离重新对相应对象进行划分;Step4.重新计算每个(有变化)聚类的均值(中心对象)。代码#include#include#include4、ath.h>#includeintK,Vectordim,datasize,seed=1;float**data,**kmatrix;float*max_column,*min_column;/*创建维数可指定的二维动态数组array[m][n]*/float**array(intm,intn){float**p;inti;p=(float**)malloc(m*sizeof(float*));p[0]=(float*)malloc(m*n*sizeof(float));for(i=1;i5、/*释放二维数组所占用的内存*/voidfreearray(float**p){free(*p);free(p);}voidloaddata(){FILE*fp;inti,j;if((fp=fopen("data.txt","r"))==NULL){printf("Cannotopenfile!");exit(0);}if(feof(fp)){printf("data.txtisaemptyfile!");fclose(fp);exit(0);}if(fscanf(fp,"K=%d,Vectordim=%d,datasize=%d",&K,&Vecto6、rdim,&datasize)!=3){printf("loaderror!");fclose(fp);exit(0);}data=array(datasize,Vectordim+1);for(i=0;i7、euclid_distance(floata[],floatb[],intdim){inti;doublesum=0;for(i=0;i8、i]=a[
4、ath.h>#includeintK,Vectordim,datasize,seed=1;float**data,**kmatrix;float*max_column,*min_column;/*创建维数可指定的二维动态数组array[m][n]*/float**array(intm,intn){float**p;inti;p=(float**)malloc(m*sizeof(float*));p[0]=(float*)malloc(m*n*sizeof(float));for(i=1;i5、/*释放二维数组所占用的内存*/voidfreearray(float**p){free(*p);free(p);}voidloaddata(){FILE*fp;inti,j;if((fp=fopen("data.txt","r"))==NULL){printf("Cannotopenfile!");exit(0);}if(feof(fp)){printf("data.txtisaemptyfile!");fclose(fp);exit(0);}if(fscanf(fp,"K=%d,Vectordim=%d,datasize=%d",&K,&Vecto6、rdim,&datasize)!=3){printf("loaderror!");fclose(fp);exit(0);}data=array(datasize,Vectordim+1);for(i=0;i7、euclid_distance(floata[],floatb[],intdim){inti;doublesum=0;for(i=0;i8、i]=a[
5、/*释放二维数组所占用的内存*/voidfreearray(float**p){free(*p);free(p);}voidloaddata(){FILE*fp;inti,j;if((fp=fopen("data.txt","r"))==NULL){printf("Cannotopenfile!");exit(0);}if(feof(fp)){printf("data.txtisaemptyfile!");fclose(fp);exit(0);}if(fscanf(fp,"K=%d,Vectordim=%d,datasize=%d",&K,&Vecto
6、rdim,&datasize)!=3){printf("loaderror!");fclose(fp);exit(0);}data=array(datasize,Vectordim+1);for(i=0;i7、euclid_distance(floata[],floatb[],intdim){inti;doublesum=0;for(i=0;i8、i]=a[
7、euclid_distance(floata[],floatb[],intdim){inti;doublesum=0;for(i=0;i8、i]=a[
8、i]=a[
此文档下载收益归作者所有