2

私のデータには、いいねのリストを持つユーザーがいます。これらのいいねを各ユーザーの個別のファイルにダンプし、それらをクラスター化したいと考えています。出力が複数のクラスターで同じように見えることを除いて、すべてが機能しています。私の理解では、k-means は排他的であるべきです。問題は、おそらくデータのダンプ方法にあると思います。また、カスタムトークナイザーを作成できるようになるまで、当分の間、すべてのいいねをスペースなしでダンプしました。これが私が実行しているものです(Rubyスクリプトから)。

system("#{MAHOUT_CMD} seqdirectory -c UTF-8 -i data/users -o data/kmeans/converted")
system("#{MAHOUT_CMD} seq2sparse -i data/kmeans/converted -o data/kmeans/vectors")
system("#{MAHOUT_CMD} kmeans -i data/kmeans/vectors/tfidf-vectors -c data/kmeans/initial_clusters -o data/kmeans/kmeans_clusters -dm org.apache.mahout.common.distance.EuclideanDistanceMeasure -cd 0.1 -k 20 -x 20")

last_cluster_folder = Dir["data/kmeans/kmeans_clusters/*"].last.gsub("data/kmeans/kmeans_clusters/", "")

system("#{MAHOUT_CMD} clusterdump -s data/kmeans/kmeans_clusters/#{last_cluster_folder}/ -d data/kmeans/vectors/dictionary.file-0 -dt sequencefile -o data/kmeans/clusters.txt -n 1000")

出力には、各クラスターの「トップ ターム」が一覧表示されますが、多くの類似語が各クラスターで発生します (ただし、重みは異なります)。clusterdumper の通常の出力ですか?各単語がどのクラスターに属しているかをその重みで調べる必要がありますか?

ありがとう

4

1 に答える 1

0

Mahout はおそらく、おおよその k-means を実行しているだけです。さらに、複数のクラスターまでの距離が同じオブジェクトが存在する場合があります。

kただし、平均を取得してから、1 最近傍分類を実行して、各オブジェクトの一意の結果を取得できるはずです (これは簡単に並列化でき、非常に高速です)。

于 2012-01-15T12:30:45.007 に答える