2013-07-30 112 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你是如何解決這個問題的? –