mahout实现kmeans的其中一个开关是-c(集群)。
“输入质心,作为向量。必须是可写,簇/冠层的SequenceFile。”
我不知道我应该如何制作这些质心。我已经将我的文本数据转换为sequenceFiles并从那里转换为Vectors。我只需要解决这个问题,我就可以尝试对数据进行聚类。
答案 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)
如果你想使用具有一定数量聚类的随机初始质心(这是一种非常常见的方法),你根本不需要在聚类之前创建初始质心。
注意:如果提供-k参数,将覆盖-c目录中的任何簇,并从输入向量中采样-k随机点,以成为初始簇中心。
因此,初始质心目录必须存在且可以为空 - 在运行实际聚类之前,它将用k个随机选择的质心填充。
下面我提供了一个我刚刚成功运行的命令亚麻布调用。我更喜欢使用更多的语言参数,因此我使用--clusters
而不是等效的-c
来定义初始质心的(空)目录和--numClusters
而不是等价的{{1}定义我想要总共3个聚类(产生3个初始质心)。
-k