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