問題はおそらく、完全な 2D 距離行列 (単純に倍精度で約 8 GB) を計算しようとすることであり、O(n^3)
いずれにせよアルゴリズムは時間内に実行されます。
別のクラスタリング アルゴリズムの使用を真剣に検討する必要があります。階層クラスタリングは遅く、通常、結果はまったく説得力がありません。特に何百万ものオブジェクトの場合、デンドログラムを見て適切なカットを選択することはできません。
あなたが本当に階層的クラスタリングを続けたいのなら、ELKI (ただし Java) には のO(n^2)
実装があると思いSLINK
ます。これは、100 万個のオブジェクトで約 100 万倍高速になるはずです。彼らもすでに持っているかどうかはわかりませんCLINK
。O(n^3)
また、シングルリンクと完全リンク以外のバリアントのサブアルゴリズムが実際に存在するかどうかはわかりません。
他のアルゴリズムの使用を検討してください。たとえば、k-means はオブジェクトの数に非常によく対応します (データが非常にクリーンで規則的でない限り、通常はあまり良くありません)。パラメータの感触がつかめば、私の意見ではかなり良いと思いますDBSCAN
。OPTICS
データ セットの次元が低い場合は、適切なインデックス構造を使用して高速化できます。クエリ時間O(n log n)
のあるインデックスがある場合は、で実行する必要があります。O(log n)
これは、大規模なデータセットに大きな違いをもたらす可能性があります. 私は個人的OPTICS
に 110k の画像データ セットを問題なく使用したので、システム上で 100 万までスケールアップできると想像できます。