n
任意の空間にデータポイントがあり、それらをクラスター化します。私のクラスタリングアルゴリズムの結果は、各ポイントをクラスターに割り当てる長さ
のintベクトルで表されるパーティションです。の範囲の値は0から(おそらく)です。l
n
l
n-1
例:
l_1 = [ 1 1 1 0 0 2 6 ]
ポイントを4つのクラスターに分割しn=7
ます。最初の3つのポイントは一緒にクラスター化され、4番目と5番目は一緒にクラスター化され、最後の2つのポイントは2つの異なるシングルトンクラスターを形成します。
私の質問:
2つのパーティションがl_1
あり、それらが同一のパーティションを表しているl_2
かどうかを効率的に判断するにはどうすればよいですか?
例:
l_2 = [ 2 2 2 9 9 3 1 ]
ポイントの同じパーティションを表すため、と同じですl_1
(クラスターの「番号」/「ラベル」が同一ではないという事実にもかかわらず)。
一方で
l_3 = [ 2 2 2 9 9 3 3 ]
最後の2つのポイントがグループ化されるため、同一ではなくなります。
C ++、python、Matlabのいずれかで解決策を探しています。
望まない方向
素朴なアプローチは、共起行列を比較することです
c1 = bsxfun( @eq, l_1, l_1' );
c2 = bsxfun( @eq, l_2, l_2' );
l_1_l_2_are_identical = all( c1(:)==c2(:) );
共起行列c1
のサイズはn
xn
で、true
ifポイントがk
ありm
、同じクラスター内にあり、false
それ以外の場合は(クラスターの「番号」/「ラベル」に関係なく)です。
したがって、共起行列c1
とc2
が同一である場合、l_1
とl_2
は同一のパーティションを表します。
ただし、ポイントの数はかなり多い可能性があるため、O( )ソリューションn
は避けたいと思います。n^2
何か案は?
ありがとう!