如何使用 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.6mahout-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

初学Mahout测试kmeans算法

如何将 Mahout KMeans 集群集成到应用程序中?

无法实例化类型集群,Mahout 中的 KMean 集群示例

将 kmeans 与 mahout 一起使用时忽略列