在我的数据中,我有一些喜欢的用户,我已经将这些喜欢转储到每个用户的单个文件中,并希望对它们进行聚类。一切都在工作,除了输出在多个集群中具有相同的喜欢。我的理解是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的正常输出,我是否需要通过权重找出每个单词所属的集群?
由于
答案 0 :(得分:0)
Mahout可能只是做近似 k-means。此外,可能存在与多个群集具有相同距离的对象。
然而,您应该能够采用k
方法,然后进行1最近邻居分类以获得每个对象的唯一结果(这对于并行化和非常快速来说是微不足道的。)