如何将初始质心作为mahout kmeans的向量?

时间:2013-07-30 16:13:04

标签: input cluster-analysis mahout

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

“输入质心,作为向量。必须是可写,簇/冠层的SequenceFile。”

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

2 个答案:

答案 0 :(得分: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文件。

答案 1 :(得分:0)

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

引用Mahout k-means article

  

注意:如果提供-k参数,将覆盖-c目录中的任何簇,并从输入向量中采样-k随机点,以成为初始簇中心。

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

下面我提供了一个我刚刚成功运行的命令亚麻布调用。我更喜欢使用更多的语言参数,因此我使用--clusters而不是等效的-c来定义初始质心的(空)目录和--numClusters而不是等价的{{1}定义我想要总共3个聚类(产生3个初始质心)。

-k