2

在我的数据中,我有一个喜欢列表的用户,我已将这些喜欢转储到每个用户的单独文件中,并希望将它们聚集在一起。一切正常,除了输出在多个集群中具有相同的喜好。我的理解是 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的正常输出,我是否需要通过权重找出每个单词所属的簇?

谢谢

4

1 回答 1

0

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

但是,您应该能够只采取k手段,然后进行 1-最近邻分类以获得每个对象的唯一结果(这对于并行化来说是微不足道的并且非常快)。

于 2012-01-15T12:30:45.007 回答