![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
k均值算法
文章平均质量分 91
fansy1990
这个作者很懒,什么都没留下…
展开
-
Hadoop k-means 算法实现
经过昨天的准备工作,今天基本就可以编写整个k-means算法程序了。今天编写的时候遇到了一个问题,是combine操作时遇到的问题。除了这个问题基本都按照原来的思路进行。先说下我的思路吧。准备工作:在上传数据文件到HDFS上之前,先应该产生一个中心文件,比如我的输入文件如下:0.0 0.2 0.40.3 0.2 0.40.4 0.2 0.40.5 0.2 0.45.0 5.2 5.原创 2012-09-28 14:49:17 · 15986 阅读 · 54 评论 -
Mahout源码K均值聚类算法分析(3)
之前的关于中心点文件的分析基本是对的,但是在第一篇整体分析的时候没有说如何产生中心点向量文件所以在第二篇写了如何得到,其实在mahout里面有一个自动生成中心点文件的方法,之前漏掉了。现在补上,首先编写下面的debug代码:package mahout.fansy.test.kmeans;import java.io.IOException;import org.apache.hadoop原创 2013-08-05 00:08:46 · 3327 阅读 · 0 评论 -
mahout源码K均值算法分析(6)
接上文重点分析map操作: Vector probabilities = classifier.classify(value.get());// 第一行 Vector selections = policy.select(probabilities); // 第二行 for (Iterator it = selections.iterateNonZero(); it原创 2013-08-07 01:36:02 · 2394 阅读 · 0 评论 -
Mahout源码K均值聚类算法分析(1)
今天开始分析KMeansDriver的源码,由于之前已经分析过KMeans算法的原理(其实是已经使用hadoop实现过了),所以在这里就讲原理了,而且大家对这个算法的原理基本都清楚(搞数据挖掘的最清楚的应该就算这个算法了吧)。今天要分析的内容其实可以暂时完全不使用hadoop集群,即可以暂时不用开vmware了。额,废话讲了这么多,开始分析吧。首先把下面的代码复制到java工程(这个工程是在讲原创 2013-07-31 20:39:16 · 4289 阅读 · 3 评论 -
Mahout源码K均值聚类算法分析(4)
昨天说到没什么Configuration没有设置conf.set("mapred.job.tracker","hadoop:9000")仍然可以访问hdfs文件系统(我又换回虚拟机了,因为我加了2G内存。。。所以改为了hadoop:9000),实验证明,是可以的。比如编写下面的测试程序:package mahout.fansy.test.kmeans.middle;import java.i原创 2013-08-05 20:58:43 · 2565 阅读 · 0 评论 -
Mahout源码K均值聚类算分析(2)
首先说下,为什么题目后面会有个“无语篇”,因为我觉得今晚这几个钟头太坑爹了。为什么,且听我慢慢道来:按照昨天的计划,我应该把代码仿造成单机可运行的代码。但是首先我要有输入数据不是?所以我最开始做的就是仿造clusterIn的数据,即中心向量的文件。昨天也说过中心向量文件应该就是把一组(key,value)对(要求value的格式为ClusterWritable,key格式任意)写入一个序列文件原创 2013-08-02 01:53:55 · 4268 阅读 · 1 评论 -
Mahout源码K均值聚类算法分析(5)
接着上篇,继续分析代码。下面就到了MR的循环了,这里MR应该算是比较好理解的,重点是退出循环的条件设置,即如何判断前后两次中心点误差小于给定阈值。首先,while循环: while (iteration <= numIterations) { conf.set(PRIOR_PATH_KEY, priorPath.toString()); String原创 2013-08-06 00:30:53 · 3020 阅读 · 0 评论 -
mahout源码K均值聚类算法分析(7)
好吧,我上篇博客的仿造CIReducer的代码的确是有误的,错在哪?map输出的中心点是两个不错,但是其key是不一样的,所以要送到不同的reduce函数中(注意这里是函数,而非reducer,如果是同一个key则要送到同一个reduce中),所以不是一个for循环就搞定的,应该要key的个数个for循环才行。那就是说reducer中的reduce函数一次只能接受一个中心点了(针对一直使用的数据来原创 2013-08-08 20:55:41 · 2649 阅读 · 2 评论