2011-08-10 5 views
0

私はK-meansクラスタリングアルゴリズムを一連のシーケンスファイルに対して実行しました。しかし、生成された結果は次のようになります。[]Mahout K-meansクラスタリングは私に0のような結果をクラスタ1.0に与えます:[]

:[]

0が1.0をクラスタに属している:[]

0が1.0クラスタに属する:

0は、1.0クラスタに属しています

0 1.0クラスタに属する:[]

0が1.0をクラスタに属する:[]

0 clusteに属しr 1.0:[]

私が使っているプログラムは、Mahout-in-Actionの第9章にある例のNewsKMeansClustering.javaから借りています。

なぜこのような結果が得られるのか教えてください。これは、特定のパラメータ設定要件または何か他のもののためですか?

このプログラムにおけるコアクラスタリングコードは、私はMahoutの0.5を使用して、同じ問題に遭遇

CanopyDriver.run(vectorsFolder, canopyCentroids, new EuclideanDistanceMeasure(), 250, 120, false, false); 

KMeansDriver.run(conf, vectorsFolder, new Path(canopyCentroids, "clusters-0"), 
clusterOutput, new TanimotoDistanceMeasure(), 0.01, 20, true, false); 

答えて

3

あります。 問題は、normPowerパラメータが両方の関数で使用されていると思います。 このようなコードを試してください。

DictionaryVectorizer.createTermFrequencyVectors(tokenizedPath, 
       outputDir, conf, minSupport, maxNGramSize, 
       minLLRValue, 
       -1.0f, // no normalization here 
       logNormalize, numReducers, chunkSize, 
       sequentialAccessOutput, namedVector); 
TFIDFConverter.processTfIdf(vectorOutput, new Path(outputDir, 
       "tfidf"), conf, chunkSize, minDf, 
       maxDFPercent,normPower, 
       logNormalize, sequentialAccessOutput, namedVector, 
       numReducers); 

その後、私は空のクラスタで問題が発生するのをやめました。

2

この問題がありました。初心者としては、解決することは非常に困難でした。しかし、私のケースでは、キャノピクラスタリングのT1とT2の値は、提供されたReutersデータ(およびユークリッド標準)に対してのみ有効であることに気付きました。私は、文書ベクトル間の距離の本質的に異なる分布を有するように見える私自身の文書データを使用した。だから、私はいくつかの基本的な分析を行い、自分のデータからT1とT2を再推定しました。その後、物事が働いた。

How to pick the the T1 and T2 threshold values for Canopy Clustering?

...にも私のポストを参照してください。この情報がお役に立てば幸いです。

関連する問題