1

mahout の kmeans 実装のスイッチの 1 つは -c (クラスター) です。

「ベクターとしての入力セントロイド。書き込み可能なクラスター/キャノピーのシーケンス ファイルである必要があります。」

ただし、これらの重心を作成する方法がわかりません。私はすでにテキスト データを sequenceFiles に変換し、そこから Vector に変換しました。これを理解する必要があるだけで、データのクラスター化を試みることができます。

4

2 に答える 2

2

RandomSeedGeneratorクラスを使用して、k-means クラスタリングのランダムな初期重心を生成できます。

Path centroids = RandomSeedGenerator.buildRandom(conf,new Path("testdata2/points.seq"),new Path("testdata2/clusters"),k,new EuclideanDistanceMeasure());

クラスター化するデータ ポイント (points.seq) へのパスと、最初の重心 (testdata2/clusters) のパスを指定するだけです。

正常に実行された場合、ファイル part-randomSeed ファイルがディレクトリ testdata2/clusters の下に作成されます。

于 2013-08-01T08:42:50.247 に答える
0

クラスタ数を設定してランダムな初期重心を使用する場合 (これは非常に一般的な方法です)、クラスタ化する前に初期重心を作成する必要はまったくありません。

Mahout k-means 記事からの引用:

注: -k 引数が指定されている場合、-c ディレクトリ内のすべてのクラスターが上書きされ、-k ランダム ポイントが入力ベクトルからサンプリングされて初期クラスター中心になります。

したがって、最初の重心ディレクトリは存在する必要があり、空にすることができます。実際のクラスタリングを実行する前に、ランダムに選択された k 個の重心で満たされます。

次に、正常に実行したコマンド ライン呼び出しを提供します。私はより言語的なパラメータを使用することを好みます。そのため、最初の重心の (空の) ディレクトリを定義するの--clustersと同等の代わりに使用し、合計で 3 つのクラスターが必要であることを定義するのと同等の代わりに使用します (結果として 3 つの初期重心になります)。-c--numClusters-k

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
于 2014-11-04T12:17:54.250 に答える