如何使用 Mahout 成功运行 kmeans 集群(尤其是获得人类可读的输出)
Posted
技术标签:
【中文标题】如何使用 Mahout 成功运行 kmeans 集群(尤其是获得人类可读的输出)【英文标题】:How to successfully run kmeans clustering using Mahout (esp. get human-readable output) 【发布时间】:2012-06-25 01:23:25 【问题描述】:我尝试按照许多在线教程来运行 Mahout 中的 kmeans 示例。 但尚未成功获得有意义的输出。我面临的主要问题是, 从文本文件到序列文件的转换并返回。
当我按照“Mahout Wiki”中“合成控制数据的聚类”的步骤进行操作时 (https://cwiki.apache.org/MAHOUT/clustering-of-synthetic-control-data.html)我可以运行集群过程(使用 $MAHOUT_HOME/bin/mahout org.apache.mahout.clustering.syntheticcontrol.kmeans .Job) 并创建了一些可读的控制台输出。但我希望从聚类过程中获取输出文件(因为大小很大)。 Mahout 聚类生成的输出文件都是序列文件,我无法将它们转换为可读文件。 当我尝试执行“clusterdump”($MAHOUT_HOME/bin/mahout clusterdump --seqFileDir output/clusters-10...)时出现错误。 首先它抱怨“seqFileDir”选项出乎意料,我猜集群转储没有“seqFileDir”或者我遗漏了一些东西。
尝试以“mahout in action”的方式使用 Mahout 似乎很棘手。我不确定编译该代码所需的类(“import ??”)是什么。
您能否建议我在 Mahout 上成功运行 kmeans 的步骤?特别是如何从序列文件中获得可读的输出?
【问题讨论】:
【参考方案1】:关于第二个问题-您可以获取本书from the repository的源代码。 master
分支中的代码适用于 Mahout 0.5,而分支 mahout-0.6
和 mahout-0.7
中的代码适用于对应的 Mahout 版本。
源代码也发布到book's site,所以你可以在那里下载(但这是仅适用于 Mahout 0.5 的版本)
附:如果你现在正在看书,那么我建议使用 Mahout 0.5 或 0.6,因为所有代码都检查了 0.5 版本,而对于其他版本,它会有所不同——尤其是 Mahout 0.7 中的集群代码
【讨论】:
【参考方案2】:clusterdump中的seqFileDir,需要使用--input而不是--seqFileDir。
我正在使用 Mahout 0.7。我用来(例如)获取简单转储的对 clusterdump 的调用是:
mahout clusterdump --input output/clusters-9-final --pointsDir output/clusteredPoints --output <absolute path of dir where you want to output>/clusteranalyze.txt
确保上述目录 output/clusters-9-final 的路径对于您的系统是正确的。根据聚类算法,此目录可能不同。查看输出目录并确保使用带有“final”init 一词的目录。
要将数据转储为 CSV 或 GRAPH_ML,您需要在上述调用中添加 -of CSV 参数。例如:
mahout clusterdump --input output/clusters-9-final -of CSV --pointsDir output/clusteredPoints --output <absolute path of dir where you want to output>/clusteranalyze.txt
希望对您有所帮助。
【讨论】:
以上是关于如何使用 Mahout 成功运行 kmeans 集群(尤其是获得人类可读的输出)的主要内容,如果未能解决你的问题,请参考以下文章
使用 Maven 运行 Kmeans 集群示例(Mahout in Action)
在 hadoop 多节点集群上运行 mahout kmeans