欢迎来到天天文库
浏览记录
ID:34417411
大小:41.50 KB
页数:3页
时间:2019-03-05
《k-means聚类算法的java实现描述》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、k-means聚类算法的java实现描述2008年04月09日星期三14:021.什么是k-means聚类算法? 从网上找到了很多定义,这里选取比较典型的几个; K-Mean分群法是一种分割式分群方法,其主要目标是要在大量高纬的资料点中找出 具有代表性的资料点;这些资料点可以称为群中心,代表点;然后再根据这些 群中心,进行后续的处理,这些处理可以包含 1)资料压缩:以少数的资料点来代表大量的资料,达到资料压缩的功能; 2)资料分类:以少数代表点来代表特点类别的
2、资料,可以降低资料量及计算量; 分割式分群法的目的是希望尽量减小每个群聚中,每一点与群中心的距离平方差(squareerror)。 假设我们现在有一组包含c个群聚的数据,其中第k个群聚可以用集合Gk来表示,假设Gk包含nk笔资料{x1,x2,…,xnk),此群聚中心为yk,则该群聚的平方差ek可以定义为: ek=Si
3、xi-yk
4、2,其中xi是属于第k群的资料点。而这c个群聚的总和平方差E便是每个群聚的平方差总和:E=Sk=1~cek我们分群的方法,就变成是一个最
5、佳化的问题,换句话说,我们要如何选取c个群聚以及相关的群中心,使得E的值为最小。2.处理流程(1) 从c个数据对象任意选择k个对象作为初始聚类中心;(2) 循环(3)到(4)直到每个聚类不再发生变化为止;(3) 根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;(4) 重新计算每个(有变化)聚类的均值(中心对象)3.java算法的实现说明1)假设给点一组c点资料X={x1,...,xc},每一点都有d维;给定一个群聚的数目k,求其
6、最好的聚类结果。 2)BasicKMeans.java主类 intcoordCount=250;//原始的资料个树 intdimensions=100;//每个资料的纬度数目 double[][]coordinates=newdouble[coordCount][dimensions]; 这里假设c点资料为coordinates对象,其中c为coordCount,d为dimensions相应值。 intmk=30;//想要群聚的数目
7、 根据群聚数目定义mk个群聚类对象 mProtoClusters=newProtoCluster[mK];//见ProtoCluster类说明 //首先随机选取mk个原始资料点作为群聚类 mProtoClusters[i]=newProtoCluster(coordinates[j]);//i依此为0到mk的值;j为0到coordCount的值 定义一个变量用于记录和跟踪每个资料点属于哪个群聚类 mClusterAssignments=newint[coordC
8、ount]; mClusterAssignments[j]=i;//表示第j个资料点对象属于第i个群聚类 //开始循环 //依次调用计算每个群聚类的均值 mProtoClusters[i].updateCenter(mCoordinates);//计算第i个聚类对象的均值 //依次计算每个资料点到中心点的距离,然后根据最小值划分到相应的群集类中; 采用距离平方差来表示资料点到中心点的距离; //定义一个变量,来表示资料点到中心点的距离 mDistanceCa
9、che=newdouble[coordCount][mk]; //其中mDistanceCache[i][j]表示第i个资料点到第j个群聚对象中心点的距离; //距离算法描述(): a)依次取出每个资料点对象double[]coord=coordinates[i]; b)再依次取出每个群聚类中的中心点对象double[]center=mProtoClusters[j].mCenter; c)计算coord对象与center对象之间的距离
10、 doubledistance(double[]coord,double[]center){ intlen=coord.length; doublesumSquared=0.0; for(inti=0;i
此文档下载收益归作者所有