2013-07-30 109 views
1

mahout实现kmeans的开关之一是-c(簇)。如何将初始质心作为mahout kmeans的向量?

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

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

回答

2

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

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

只需提供路径要群集和INTIAL心(testdata2 /簇)

路径您的数据点(points.seq)如果运行成功,你将不得不文件部分randomSeed文件在testdata2/clusters目录下。

+0

对,听起来不错。我主要通过Ubuntu中的命令行来完成此操作。 在过去的几天中已经阅读了更多内容,它看起来像指定一个目录和-k开关,它应该自动使用RandomSeedGenerator。我认为我的数据有问题。 这里是我所使用的命令的例子: '须藤/选择/象夫/ bin中/亨利马乌k均值-i/INPUT_DIR/TFIDF向量/ -o/OUTPUT_DIR/allNYC_DataClusters -dm org.apache.mahout.common。距离.EuclideanDistanceMeasure-c/home/efx /桌面/ allNYC_initialKClusters -k 50 -x 50 -cl' 感谢您的输入 – efx

0

如果您想要将随机初始质心与一定数量的群集一起使用(这是一种非常常见的方法),则根本不必在群集化之前创建初始质心。

Mahout k-means article举例:

注意:如果-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 
+1

我得到这个错误,当我运行命令“线程中的异常”main“java.lang.IllegalStateException :在初始簇/ 001 /部分随机选择中找不到输入群集。检查你的-c参数.' –

+0

@AhyudayaSrinet你是如何解决这个问题的? –