2

コマンド ラインで ELKI k-means クラスタリングを実行するのが好きです。

Rプログラミングに比べて実行時間が短すぎるようです。R で k-means クラスタリングを実行しようとしましたが、約 100 秒かかりました。また、k=5、k=10 などでも変化はありません。

file.tsv60,000 行 25 列あります。

START=$(date +%s)
k=5
java -jar elki.jar KDDCLIApplication \
     -dbc.in "file.tsv" \
         -dbc.parser NumberVectorLabelParser \
         -parser.colsep "\t" \
     -algorithm clustering.kmeans.KMeansLloyd \
         -kmeans.k $k \
         -kmeans.initialization KMeansPlusPlusInitialMeans \
         -kmeans.maxiter 9999 \
     -resulthandler ResultWriter -out.gzip false \
         -out output/k-$k \

END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"

出力は"It took 5 seconds"

START=$(date +%s)
k=10
java -jar elki.jar ...
     ...

END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"

このケースk=10"It took 5 seconds"です。

クラスタ サイズに変化がないのはなぜですか? コードに問題はありますか?

4

1 に答える 1

1

信頼できる測定値を得るには、おそらく 5 秒では速すぎます。

さらに、より大きな値を使用すると、よりk少ない反復で結果が収束する場合があります。

を使用-timeして、実際のアルゴリズムを実行するのに必要な時間を確認できます。あなたの方法では、解析書き込みは無視できない影響を及ぼします。-resulthandler DiscardResultHandler出力を無効にします。これは、ベンチマークにも適しています。

設定する必要はありません-kmeans.maxiter 9999。デフォルトでは、ELKI は収束するまで k-means を実行します。

k-Means++ の初期化に実装上の弱点があり、必要以上にコストがかかったと思います。おそらく、初期化、解析、書き込みは、実行時間全体に大きく貢献します。

また、 を使用-resulthandler LogResultStructureResultHandler -verboseして、パーサーが意図したとおりにファイルを理解していることを確認してください (次元を確認してください!)。-verboseまた、妥当な回数の反復を行うことも確認できます。

于 2014-06-04T09:07:17.277 に答える