0

約 100000 行 x 100000 列 (スパース行) を持つ巨大なデータセットをクラスター化する Java コードを作成します。しかし、データセットは疎なインスタンスで作成されるため、疎行列の構造を持っています。

コードで 3 つのクラスタリング関数を使用できます。

JavaML: Kmeans、Weka: SimpleKmeans、Weka: Xmeans

Weka の SimpleKmeans 関数を実行しましたが、約 9 時間動作しており、クラスタリング プロセスはまだ終わっていません。これらの関数の推定実行時間と、このデータセットに最も適しているのはどれですか?

4

1 に答える 1

1

K-means はスパースデータには適していません

その理由は、平均がまばらではないためです。そのため、平均は実際にはデータセットに対して異常になります。さらに悪いことに、手段間の距離は、インスタンスから手段までの距離よりも小さくなる可能性があります

ある時点で何らかの結果が得られます - Weka は恐ろしく遅いので、もっと速いものを探す必要があるかもしれません。このデータ セット サイズでは、分散型の Mahout を使用することをお勧めします (ただし、ここでの質問から判断すると、他の問題があります)。IIRC には、ユークリッドの長さを事前に計算することにより、疎なベクトルの加速トリックもありますが、それでも、結果は意味をなさない可能性があります。

問題は、K-means が最適なボロノイ セル分割を探すことです。しかし、データ セットがまばらな場合、自然なボロノイ セル構造を持たない可能性があります。そのため、データが持つことができない最適な構造を見つけるのに多くの時間を費やします。

于 2012-11-13T07:39:13.340 に答える