2015-06-14 36 views
0

我想要使用Mahout對多個文檔進行集羣。聚類工作正常,但我不知道如何找出哪些文檔位於每個羣集中。Mahout集羣:如何檢索命名向量的名稱

我讀過創建稀疏文件時可以使用選項--namedVector,但是它從哪裏獲取ID以及在集羣完成後如何檢索此ID?


現在我做以下步驟:

我有每個文檔文件的目錄。該文件與文件的ID爲文件名的格式如下:

./mahout seqdirectory -i tmp/es-out -o tmp/es-out-seqdir -c UTF-8 -chunk 64 -xm sequential 
./mahout seq2sparse -i tmp/es-out-seqdir -o tmp/es-out-sparse --maxDFPercent 85 --namedVector 

然後我可以羣集的結果,並創建轉儲:

filename: documentID.txt 

[TITLE] 

[CONTENT] 

我使用創建一個稀疏目錄中namedVectors:

./mahout kmeans -i tmp/es-out-sparse/tfidf-vectors -c tmp/es-kmeans-clusters -o tmp/es-kmeans -dm org.apache.mahout.common.distance.EuclideanDistanceMeasure -x 10 -k 20 -ow --clustering 
./mahout clusterdump -i tmp/es-kmeans/clusters-10-final -o tmp/clusterdump -d tmp/es-out-sparse/dictionary.file-0 -dt sequencefile -b 100 -n 20 --evaluate -dm org.apache.mahout.common.distance.EuclideanDistanceMeasure -sp 0 --pointsDir tmp/es-kmeans/clusteredPoints 

轉儲看起來是這樣的:

:VL-190{n=1 c=[1:3.407, 110:6.193, 2007:3.736, about:1.762, according:2.948, account:3.507, acting:6. 
    Top Terms: 
    epa          => 13.471728324890137 
    mountaintop        => 11.364262580871582 
    mine         => 10.942587852478027 

    Weight : [props - optional]: Point: 

[...] 

回答

0

我找到了一種方法。您可以使用seqdumper提取簇映射:

./mahout seqdumper -i /tmp/es-kmeans/clusteredPoints/part-m-00000 -o /tmp/cluster-points.txt 

比你可以使用正則表達式來提取矢量ID的映射到簇ID。

0

Mahout的k-means只是一個玩具。

您可以將它用於howtos和tutorials,但對於實際使用它太慢,太有限,roo很難使用。 (另外,k-means的結果並不像人們想象的那麼好......大部分時間他們都是dogfood。)

Benchmark其他工具,你會驚訝大時間。

+0

好的,但選擇不同的聚類算法應該導致同樣的問題,我想獲得羣集中所有文檔的ID。 – fwind

+0

沒有一個不同的,更好的工具。 Mahout只是不太適合集羣。它建立在推薦系統之上 - 這正是開發者所關心的。沒有人對聚類感興趣。 –

+0

我知道這不是這份工作的最佳工具。 但只是爲了清楚。您是說使用Mahout無法獲取羣集的文檔? – fwind