K-mean算法介绍.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-mean算法介绍

K-MEANS算法 .流程 输入:聚类个数k,以及包含 个数据对象的数据库。 输出:满足方差最小标准的k个聚类。 处理流程:? ? ? ? (1)??从 个数据对象任意选择 k 个对象作为初始聚类中心; (2)??循环(3)到(4)直到每个聚类不再发生变化为止 (3)??根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分; (4)??重新计算每个(有变化)聚类的均值(中心对象) k-means 算法接受输入量 k ;然后将个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”来进行计算的。k-means 算法的工作过程说明如下:首先从个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。 2 . ???聚类法的目的是希望每一中心的距平方差(square error)。?一般都采用均方差作为标准测度函数有一包含c的,其中第 k 可以用集合 Gk表示, Gk包含nk{x1, x2, …, xnk},此中心yk,的平方差 ek可以定: ???????????? ek = ? i |xi-yk|2 ,其中 xi是第 k 的。 ?而c个类的总的平方差E便是每的平方差和: E = ? k=1~c ek 我方法,就成是一最佳化的,我們要如何取 c ,使得 E 的值最小。 ?3. java 算法的实现说明 ? 1) 假设给一组 c 个点)数据 X = {x1, ..., xc} ,每一点都有 d 维;给定一个类(簇)的数目 k, 求其最好的聚类结果。 ? 2 ) BasicKMeans.java 主类 ??????? int pointCount = 250;// 原始的数据个 ??????? int dimensions = 100;// 每个数据的维度数目 ??????? double[][] points = new double[pointCount][dimensions]; 这里假设 c 点数据为 points 对象,其中 c 为 pointCount,d 为 dimensions 相应值。 ??????? int mk = 30; // 想要类(簇)的数目根据类(簇)数目定义 mk 个类(簇)类对象 ????? mProtoClusters = new ProtoCluster[mK];// 见 ProtoCluster 类说明 ?? // 首先随机选取 mk 个原始数据点作为类(簇)???? mProtoClusters[i]= new ProtoCluster (points[j] );//i 类索引,依此为 0 到 mk 的值; j 为 0 到 pointCount 的值 ? 定义一个变量用于记录和跟踪每个数据点属于哪个类(簇)类 ??? mClusterAssignments = new int[pointCount]; ??? mClusterAssignments[j]=i;// 表示第 j 个数据点对象属于第 i 个类(簇) ?? // 开始循环 ?? // 依次调用计算每个类(簇)类的均值 ?? mProtoClusters[i].updateCenter(mPoints);// 计算第 i 个聚类的均值 ?? // 依次计算每个数据点到中心点的距离,然后根据最小值划分到相应的群集类中;采用距离平方差来表示数据点到中心点的距离; ?? //定义一个变量,来表示数据点到中心点的距离 ?? mDistanceCache = new double[pointCount ][mk]; ??? //其中mDistanceCache[i][j]表示第i个数据点到第j个类(簇)对象中心点的距离; ??? //距离算法描述: ????// a)依次取出每个数据点对象double[] coord = points[i]; ????????b)再依次取出每个类(簇)类中的中心点对象double[] center = mProtoClusters[j].mCenter; ??????? c)计算coord对象与center对象之间的距离? ???? double distance(

文档评论(0)

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

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

1亿VIP精品文档

相关文档