mahout实现kmeans的开关之一是-c(簇)。如何将初始质心作为mahout kmeans的向量?
“输入质心,作为矢量,必须是可写,群集/冠层的SequenceFile。”
我不知道我应该怎么做这些质心。我已经将我的文本数据转换为sequenceFiles,然后从那里转换为Vectors。我只需要弄清楚这一点,我可以尝试对数据进行聚类。
mahout实现kmeans的开关之一是-c(簇)。如何将初始质心作为mahout kmeans的向量?
“输入质心,作为矢量,必须是可写,群集/冠层的SequenceFile。”
我不知道我应该怎么做这些质心。我已经将我的文本数据转换为sequenceFiles,然后从那里转换为Vectors。我只需要弄清楚这一点,我可以尝试对数据进行聚类。
您可以使用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目录下。
如果您想要将随机初始质心与一定数量的群集一起使用(这是一种非常常见的方法),则根本不必在群集化之前创建初始质心。
注意:如果-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
我得到这个错误,当我运行命令“线程中的异常”main“java.lang.IllegalStateException :在初始簇/ 001 /部分随机选择中找不到输入群集。检查你的-c参数.' –
@AhyudayaSrinet你是如何解决这个问题的? –
对,听起来不错。我主要通过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