1

mahout 实现 kmeans 的开关之一是 -c(集群)。

“输入质心,作为向量。必须是可写的序列文件,集群/Canopy。”

我不知道我应该如何制作这些质心。我已经将我的文本数据转换为 sequenceFiles 并从那里转换为 Vectors。我只需要弄清楚这一点,我就可以尝试对数据进行聚类。

4

2 回答 2

2

您可以使用RandomSeedGenerator类为 k-means 聚类生成随机初始质心。

Path centroids = RandomSeedGenerator.buildRandom(conf,new Path("testdata2/points.seq"),new Path("testdata2/clusters"),k,new EuclideanDistanceMeasure());

只需提供要聚类的数据点(points.seq)的路径和初始质心的路径(testdata2/clusters)

如果它成功运行,您将在 testdata2/clusters 目录下拥有文件 part-randomSeed 文件。

于 2013-08-01T08:42:50.247 回答
0

如果您想使用具有一定数量的聚类的随机初始质心(这是一种非常常见的方法),则根本不必在聚类之前创建初始质心。

引用Mahout k-means 文章

注意:如果提供了 -k 参数,则 -c 目录中的所有簇都将被覆盖,并且 -k 随机点将从输入向量中采样成为初始簇中心。

因此,初始质心目录必须存在并且可以为空 - 在运行实际聚类之前,它将用 k 个随机选择的质心填充。

下面我提供了一个我刚刚成功运行的命令行调用。我更喜欢使用更多的口头参数,因此我使用--clusters而不是等价物-c来定义初始质心的(空)目录,--numClusters而不是等价物-k来定义我总共需要 3 个集群(导致 3 个初始质心)。

mahout kmeans \
--input output/seq2sparse/001/tfidf-vectors \
--output output/kmeans/001 \
--clusters output/initial_centroids/001 \
--numClusters 3 \
--distanceMeasure org.apache.mahout.common.distance.CosineDistanceMeasure \
--maxIter 20 \
--method mapreduce
于 2014-11-04T12:17:54.250 回答