k-means聚类算法的java实现描述.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
k-means聚类算法的java实现描述.doc

k-means聚类算法的java实现描述 2008年04月09日 星期三 14:02 1. 什么是 k-means 聚类算法? ??? 从网上找到了很多定义,这里选取比较典型的几个; ??? K-Mean 分群法是一种分割式分群方法,其主要目标是要在大量高纬的资料点中找出 ???????具有代表性的资料点;这些资料点可以称为群中心,代表点;然后再根据这些 ????????群中心,进行后续的处理,这些处理可以包含 ???? 1 )资料压缩:以少数的资料点来代表大量的资料,达到资料压缩的功能; ???? 2 )资料分类:以少数代表点来代表特点类别的资料,可以降低资料量及计算量; ?? ???????分割式分群法的目的是希望尽量减小每个群聚中,每一点与群中心的距离平方差(square error)。?? 假设我们现在有一组包含c个群聚的数据,其中第 k 个群聚可以用集合 Gk来表示,假设 Gk包含nk笔 资料 {x1, x2, …, xnk),此群聚中心为yk,则该群聚的平方差 ek可以定义为: ?????????????ek = S i |xi-yk|2 ,其中 xi是属于第 k 群的资料点。 而这c个群聚的总和平方差E便是每个群聚的平方差总和: E = S k=1~c ek 我们分群的方法,就变成是一个最佳化的问题,换句话说,我们要如何选取 c 个群聚以及相关的群中心, 使得 E 的值为最小。 2 .处理流程 ( 1 ) ??从 c 个数据对象任意选择 k 个对象作为初始聚类中心; ( 2 ) ??循环( 3 )到( 4 )直到每个聚类不再发生变化为止; ( 3 ) ??根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分; ( 4 ) ??重新计算每个(有变化)聚类的均值(中心对象) 3. java 算法的实现说明 1) 假设给点一组 c 点资料 X = {x1, ..., xc} ,每一点都有 d 维;给定一个群聚的数目 k, 求其 ?????最好的聚类结果。 ??? 2 ) BasicKMeans.java 主类 ????????? int coordCount = 250;// 原始的资料个树 ????????? int dimensions = 100;// 每个资料的纬度数目 ????????? double[][] coordinates = new double[coordCount][dimensions]; ??? 这里假设 c 点资料为 coordinates 对象,其中 c 为 coordCount,d 为 dimensions 相应值。 ????????? int mk = 30; // 想要群聚的数目 ???? 根据群聚数目定义 mk 个群聚类对象 ??????? mProtoClusters = new ProtoCluster[mK];// 见 ProtoCluster 类说明 ???? // 首先随机选取 mk 个原始资料点作为群聚类 ?????? mProtoClusters[i]= new ProtoCluster (coordinates[j] );//i 依此为 0 到 mk 的值; j 为 0 到 coordCount 的值 ??? 定义一个变量用于记录和跟踪每个资料点属于哪个群聚类 ????? mClusterAssignments = new int[coordCount]; ????? mClusterAssignments[j]=i;// 表示第 j 个资料点对象属于第 i 个群聚类 ???? // 开始循环 ???? // 依次调用计算每个群聚类的均值 ???? mProtoClusters[i].updateCenter(mCoordinates);// 计算第 i 个聚类对象的均值 ???? // 依次计算每个资料点到中心点的距离,然后根据最小值划分到相应的群集类中; ??? 采用距离平方差来表示资料点到中心点的距离; ???? //定义一个变量,来表示资料点到中心点的距离 ???? mDistanceCache = new double[coordCount ][mk]; ????? //其中mDistanceCache[i][j]表示第i个资料点到第j个群聚对象中心点的距离; ????? //距离算法描述(): ?????? a)依次取出每个资料点对象double[] coord = coordinates[i]; ????????? b)再依次取出每个群聚类中的中心点对象double[] center = mProtoClusters[j].mCenter; ????????? c)计算coo

文档评论(0)

ziyouzizai + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档