Mahout 0.9 K-Means mapReduce 算法分析

Posted

技术标签:

【中文标题】Mahout 0.9 K-Means mapReduce 算法分析【英文标题】:Mahout 0.9 K-Means mapReduce analysis of the algorithm 【发布时间】:2014-04-20 17:03:20 【问题描述】:

我一直在使用 MapReduce 检查 Mahout 0.9 k-means 的算法,我想知道在哪里可以检查 map 函数和 reducer 中发生的事情的代码?

我正在使用 NetBeans 进行调试,但无法找到 Map 和 Reduce 函数中究竟实现了什么...

我这样做的原因是因为我想知道在 Mahout 0.9 版本中究竟实现了什么,以便查看哪些部分在 K-Means mapReduce 算法上进行了优化。

如果有人知道 Mahout K 均值基于哪篇研究论文,那也会对我有很大帮助。

非常感谢!

最好的问候!

【问题讨论】:

【参考方案1】:

下载 mahout-core 的源代码。搜索 java 文件org.apache.mahout.clustering.kmeans.KMeansDriver

在这个java文件中搜索ClusterIterator.iterateMR(conf, input, priorClustersPath, output, maxIterations);

class org.apache.mahout.clustering.iterator.ClusterIterator 中的iterateMR 函数是定义 Map Reduce 所需的所有配置的类。

org.apache.mahout.clustering.iterator.CIMapperorg.apache.mahout.clustering.iterator.CIReducer 是您正在寻找的 Map reduce 类。

希望这会有所帮助!! :)

但是,我不知道实施的是哪篇研究论文。

【讨论】:

它帮助了我,我正在检查那些课程,谢谢你 rkmalaiya【参考方案2】:

K-means(更准确地说,Lloyds 算法)是简单并行的。我怀疑是否有论文讨论 Mahout 使用的实现,因为这是显而易见的方法。绝对没有任何技巧: Lloyds 算法主要由 sum 组成,并且 sum 很容易并行化。

不幸的是(就像 Hadoop 一样),Mahout 是 10 层厚的抽象。这不会产生最佳性能,但特别是使得挖掘所有代码和元代码到实际实现也非常困难。有关分散在十几个类中的源代码片段的指针,请参见此处的其他答案。

在使用 Mahout 时,请确保在您的实验中还包括 k-means 的非 Hadoop 实现。您会惊讶于它们 A) 优于 Mahout 的频率以及 B) 提供更好结果的频率。

【讨论】:

好像没有研究论文讨论实现,我去看看CIMapper和CIReducer类。你知道哪些框架优于 mahout 并行 K-means 或其他流行的框架吗?谢谢 Anony-Mousse 在具有足够内存的单个主机上尝试 ELKI 或 scipy。对于 ELKI,请阅读 Java 文档如何增加 Java 内存限额。除非您的数据真的非常大,否则这些工具将轻松胜过 Mahout。

以上是关于Mahout 0.9 K-Means mapReduce 算法分析的主要内容,如果未能解决你的问题,请参考以下文章

当我运行 Mahout 的 k-Means 时,总是显示这个提示

Mahout 0.9:使用自己的测试集而不是使用拆分命令

使用 Mahout 向量训练 Spark k-means

Mahout 上的 K-means 返回非独占集群

Mahout k-means 聚类命令:面临堆空间问题

如何使用存储为 CSV 的矢量数据在 mahout 中执行 k-means 聚类?