python - シングルリンククラスタリング

python opencv cluster-analysis

OpenCVでシングルリンククラスタリングを行う方法を探しています。私のシナリオ:


数百(場合によっては数千)の特徴ベクトル(ベクトルの次元は最大800特徴まで可能)。
不明な数のクラスター(ベクトルの数よりはるかに少ない可能性があります)。
固定された類似性しきい値E-2つのベクトル間のl1ノルムがEより小さい場合、ベクトルは同じクラスター内にある必要があります。
クラスタをコンパクトにする必要はありません。つまり、クラスター内のすべてのベクトルが互いにE内にある必要はありません。これにより、クラスターの代わりに長い「チェーン」が生じる可能性がありますが、これで問題ありません。


K平均法を使用してみましたが、クラスターの数がわからないため、ここでは実際には適用できません。反復K平均法を実行して最高のKを探すことはできますが、効率が悪いように思えます。 OpenCVに実装されている、ここで使用できるより適切なクラスタリングアルゴリズムはありますか?

理想的には、SLINK algorithmに似たものが必要です。これは、現在実装しようとしている論文で引用されているものです。私のオプションは、SLINKを直接実装する(デバッグとテストのために少しタスクを実行する)か、同様のことを行う既存のアルゴリズムを探すことです。

助言がありますか?
答え
類似性のしきい値によってグラフを作成し、connected componentsを見つけることをお勧めします。グラフを作成すると、接続されているコンポーネントを見つけるのが非常に簡単で効率的になります。 NetworkXが必要な場合は、すでに接続コンポーネントfunctionがあります。
関連記事

python - マルチプロセッシングキューモジュールを介して関数にリストを渡すときにエラーが発生しました

python - Python + Cairo + GTK / GDKピクセルバッファーの簡単なセットアップ

python - JavaScriptを介してMongoインデックスを追加する

python - タブ化された一連のQDockWidgetのトップQDockWidgetを設定する

python - あるプログラムから別のプログラムでstdoutを読み取る

python - Pythonで数値を分割する方法の数

python - pythonはhtmlフォームからファイルを受け取ります

python - PyDevを使用してPythonで変数アクセスにブレークポイントを設定する方法はありますか?

python - ターゲット関数が完了した後にPythonスレッドが確実に終了するようにするにはどうすればよいですか?

python - django / python:複数のテーブルを持つ生のSQL