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

Posted

技术标签:

【中文标题】Mahout 上的 K-means 返回非独占集群【英文标题】:K-means on Mahout returning non-exclusive clusters 【发布时间】:2011-08-25 15:27:42 【问题描述】:

在我的数据中,我的用户有一个喜欢列表,我已将这些喜欢转储到每个用户的单独文件中,并希望将它们聚集在一起。一切正常,除了输出在多个集群中具有相同的喜好。我的理解是k-means应该是排他的。我认为问题可能在于我如何转储数据。在我可以编写自定义标记器之前,我也暂时放弃了所有没有空格的喜欢。这是我正在运行的内容(来自 ruby​​ 脚本)。

system("#MAHOUT_CMD seqdirectory -c UTF-8 -i data/users -o data/kmeans/converted")
system("#MAHOUT_CMD seq2sparse -i data/kmeans/converted -o data/kmeans/vectors")
system("#MAHOUT_CMD kmeans -i data/kmeans/vectors/tfidf-vectors -c data/kmeans/initial_clusters -o data/kmeans/kmeans_clusters -dm org.apache.mahout.common.distance.EuclideanDistanceMeasure -cd 0.1 -k 20 -x 20")

last_cluster_folder = Dir["data/kmeans/kmeans_clusters/*"].last.gsub("data/kmeans/kmeans_clusters/", "")

system("#MAHOUT_CMD clusterdump -s data/kmeans/kmeans_clusters/#last_cluster_folder/ -d data/kmeans/vectors/dictionary.file-0 -dt sequencefile -o data/kmeans/clusters.txt -n 1000")

输出列出了每个集群中的“热门词条”,但是每个集群中都会出现许多类似的词(尽管权重不同)。是clusterdumper的正常输出吗,是否需要通过权重找出每个单词属于哪个簇?

谢谢

【问题讨论】:

这在 user@mahout.apache.org 上可能会更成功 【参考方案1】:

Mahout 可能只是在做近似 k-means。此外,可能存在与多个集群具有相同距离的对象。

但是,您应该能够只采用 k 方法,然后执行 1-最近邻分类以获得每个对象的唯一结果(这对于并行化很简单并且非常快)。

【讨论】:

以上是关于Mahout 上的 K-means 返回非独占集群的主要内容,如果未能解决你的问题,请参考以下文章

Mahout Java API 用于查找使用 k-means 生成的集群的质心

在 hadoop 集群上部署 Mahout

Apache Mahout K-means 集群实现

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

使用 Mahout 向量训练 Spark k-means

Mahout 0.9 K-Means mapReduce 算法分析