私が見たほとんどのクラスタリングアルゴリズムは、すべてのポイント間にeach-to-each距離を作成することから始まります。これは、より大きなデータセットでは問題になります。それをしないものはありますか?それとも、それはある種の部分的/近似的/時差的なアプローチですか?
O(n ^ 2)スペースよりも少ないクラスタリングアルゴリズム/実装はどれですか?
アルゴリズムのリストとその時間と空間の要件はどこかにありますか?
私が見たほとんどのクラスタリングアルゴリズムは、すべてのポイント間にeach-to-each距離を作成することから始まります。これは、より大きなデータセットでは問題になります。それをしないものはありますか?それとも、それはある種の部分的/近似的/時差的なアプローチですか?
O(n ^ 2)スペースよりも少ないクラスタリングアルゴリズム/実装はどれですか?
アルゴリズムのリストとその時間と空間の要件はどこかにありますか?
回答:
一部のクラスタリングアルゴリズムは、空間インデックス構造を使用できます。これにより、たとえば、DBSCANとOPTICSを時間で実行できインデックスがクエリを許可する限り)。O (log n )
明らかに、この複雑さで実行されるアルゴリズムは距離行列を作成しません。
単一リンケージと完全リンケージによる階層的クラスタリングなどの一部のアルゴリズムでは、最適化されたアルゴリズムが利用できます(SLINK、CLINK)。ほとんどの人は、入手できるものは何でも使用し、実装しやすいものは何でも使用するだけです。また、階層的クラスタリングは、距離行列回の反復を使用して簡単に実装できます(その結果、アルゴリズムになります...)。
クラスタリングアルゴリズムを比較した完全なリストは知りません。結局のところ、おそらく100以上のクラスタリングアルゴリズムがあります。たとえば、少なくとも1ダースのk-meansバリアントがあります。さらに、実行時の複雑さだけでなく、メモリの複雑さもあります。平均的なケースと最悪のケースがあります。実装には大きな違いがあります(たとえば、上記の単一リンク、およびインデックスを使用せず、したがってにあり、完全な距離行列を格納する必要がないDBSCAN実装。、その後、すべてのペアワイズ距離を計算する必要があります)。さらに、たくさんのパラメータがあります。k-meansの場合、重要です。ほとんどすべてのアルゴリズムで、距離関数は大きな違いをもたらします(多くの実装はユークリッド距離のみを許可します...)。(ユークリッドのような些細なものを超えて)高価な距離関数に到達すると、距離計算の数がすぐに主要な部分になる可能性があります。そのため、全体の操作の数と必要な距離計算の数を区別する必要があります。したがって、演算にあるアルゴリズムは、距離計算だけがであるアルゴリズムよりも、距離関数が本当に高価な場合(たとえば、距離関数自体は)。
良い質問。たとえば、3つの最近傍のストローマン法は、各データポイントのNsampleの近傍をサンプリングし、最近傍を3に保つことです。些細なことですが、これをNsampleのいくつかの値に対して実行すると、信号/ノイズ比、ニア/バックグラウンドノイズがわかります。 、データを簡単にプロットします。次に、隣人の隣人をチェックして、直接隣人よりも近いものがないかどうかを確認する方法もあります。また、入力データがすでに適切にシャッフルされている場合は、ブロックでサンプリングします。そうでない場合、キャッシュがスラッシュします。
(追加):
Rのfastclusterを参照してください。SciPyv0.11を信じています。
テキストについては、google-all-pairs-similarity-searchをご覧ください
。
繰り返し、「適切な非類似性の尺度は、クラスタリングアルゴリズムの選択よりも、クラスタリングの成功を得ることにはるかに重要である」 - 選択-クラスタリング法。