n任意の空間にデータポイントがあり、それらをクラスター化します。私のクラスタリングアルゴリズムの結果は、各ポイントをクラスターに割り当てる長さ
のintベクトルで表されるパーティションです。の範囲の値は0から(おそらく)です。lnln-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のサイズはnxnで、trueifポイントがkありm、同じクラスター内にあり、falseそれ以外の場合は(クラスターの「番号」/「ラベル」に関係なく)です。
したがって、共起行列c1とc2が同一である場合、l_1とl_2は同一のパーティションを表します。
ただし、ポイントの数はかなり多い可能性があるため、O( )ソリューションnは避けたいと思います。n^2
何か案は?
ありがとう!