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

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据挖掘实验报告聚类分析

数据挖掘实验报告(三) 聚类分析 姓名:李圣杰 班级:计算机1304 学号:1311610602 一、实验目的 掌握k-means聚类方法; 通过自行编程,对三维空间内的点用k-means方法聚类。 二、实验设备 PC一台,dev-c++5.11 三、实验内容 1.问题描述: 立体空间三维点的聚类. 说明:数据放在数据文件中(不得放在程序中),第一行是数据的个数,以后各行是各个点的x,y,z坐标。 2.设计要求 读取文本文件数据,并用K-means方法输出聚类中心 3. 需求分析 k-means 算法接受输入量k;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。 k-means算法的工作过程说明如下:首先从n个数据对象任意选择k个对象作为初始聚类中心,而对于所剩下的其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类。然后,再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值),不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数,具体定义如下: (1) 其中E为数据库中所有对象的均方差之和,p为代表对象的空间中的一个点,mi为聚类Ci的均值(p和mi均是多维的)。公式(1)所示的聚类标准,旨在使所获得的k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。 四、实验步骤 Step 1.读取数据组,从N个数据对象任意选择k个对象作为初始聚类中心; Step 2.循环Step 3到Step 4直到每个聚类不再发生变化为止; Step 3.根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离,并根据最小距离重新对相应对象进行划分; Step 4.重新计算每个(有变化)聚类的均值(中心对象)。 代码 #include stdlib.h #include stdio.h #include math.h #include time.h int K,Vectordim,datasize,seed=1; float **data,**kmatrix; float *max_column,*min_column; /*创建维数可指定的二维动态数组array[m][n]*/ float** array(int m, int n) { float **p; int i; p=(float**)malloc(m*sizeof(float*)); p[0]=(float*)malloc(m*n*sizeof(float)); for(i=1; im; ++i) p[i]=p[i-1]+n; return p; } /*释放二维数组所占用的内存*/ void freearray(float** p) { free(*p); free(p); } void loaddata() { FILE * 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=%d\n,K,Vectordim,datasize)!=3) { printf(load error!\n); fclose(fp); exit(0); } data=array(datasize,Vectordim+1); for(i=0;idatasize;i++) { data[i][Vectordim]=0; for(j=0;jVectordim;j++) { if(j==(Vectordim-1)) fscanf(fp,%f\n,data[i][j]); else fscanf(fp,%f ,data[i][j]); /*printf(%f ,data[i][j]);*/ } } } double euclid_distance(float a[],float b

文档评论(0)

zyg_2930102 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档