Hadoop的Kmeans实现分析和总结.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
并行 KMeans聚类实现 姓名:赵振凯 学号: 132202005 一.设计思路 对于一般的执行一次 MapReduce非常简单,但是这里的 Kmeans是一种需 要不断迭代的算法, 因此并不是和之前的程序非常相似, 而是牵扯到产生的数据 结果重新被使用的不断循环和迭代。 在前期编程的时候, 因为局限于前面几个程 序的编写, 非常想通过之前的程序的编写来拓展这个程序。 但是没有成功, 没有 成功的原因是我对 Java 操作 HDFS文件系统不熟悉,甚至之前都不知道可以对 HDFS进行各种操作。 只是单纯的知道 MapReduce阶段会有一个 TextInputFormat 类,可以读取 HDFS上的文件。在阅读了网上的一些程序之后,学习并且模仿。 最终有了我自己的设计思路。我的设计思路非常简单。一个输入,一个输出,输 入用来存放数据集, 输出文件夹用来输出聚类后的质心特征。 一个文件用来存放 质心点的特征值, 一次迭代完成后, 复制输出的结果到这个文件, 相当于进行覆 盖。那么下次迭代的时候, 我们不需要改变质心的输入路径, 而是原来的路径中 已经放了我们更新后的质心。这样就可以实现循环。只要小于我们的给定次数, 我们就可以继续迭代, 否则停止。 在做完这个程序后, 我发现也可以有一些其他 的一些设计思路, 也非常简单, 比如设置不同的输出路径, 动态的改变质心的输 入路径也可以。这只是解决问题的不同方法。最后的效果都是一样的。 二.算法分析与步骤 这里给出保存质心特征文件的一种结构: 1,0,170,66 2,0,150,40 这里的 1 表示下标, 0 表示聚类的个数,即聚到 1 这个质心的坐标的个数是 0,后面的两个表示对应聚类中心的特征值,这里是两维特征,我们编写的程序 会给出参数, 确定或者说明确特征维数。 这里的格式主要根据实际的数据自己设 置,一般来说简单方便易用最好。 而输入的数据集格式是: 1,177,80 2,166,60 3,155,40 …. 其中 1,2,3,表示下标,后面的两个数表示对应的特征维数。 在 Map 阶段我们主要做两件事: 1. 通过 Setup 函数获取质心 2. 对于每一个 Mao读取的数据,计算其到每一个质心的距离,记录对应距 离最小的质心类别,最终以 classID,feature1,feature2 形式输出。 在 reduce 阶段,对于相同类别的特征计算其平均值, 作为新的聚类质心, 输出。 一次迭代执行完毕后, 判断两次质心的聚类是否小于某个阈值, 或者是否达到迭 代的最大次数,如果没有,继续执行。 三.程序源代码 Kemans 数据源程序 这里给出程序的源代码,以文件包的形式给出: 四.运行结果与分析 如图所示为程序的运行结果: 这里给出我们测试的三个例子, 分别是我们自己模拟出的数据, 四个点,分成两类; 六个点, 分成三类;实际数据集,学生的身高体重数据集,用来区分男女,总共一百个数据,聚成两 类。这里给出拍照的结果。如图所示 原始实验数据 ( 自己模拟的 ): 初始的聚类中心文件数据: 程序正在运行: 程序运行结果: 这里给出最后学生身高体重数据集的聚类结果: 从显示的结果可以看

文档评论(0)

tianya189 + 关注
官方认证
内容提供者

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

认证主体阳新县融易互联网技术工作室
IP属地湖北
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档