4 に答える
Science の最近の論文を読んでみてください
D. Reshef、Y. Reshef、H. Finucane、S. Grossman、G. McVean、P. Turnbaugh、E. Lander、M. Mitzenmacher、P. Sabeti Science 334、6062 (2011) http: //www.uvm.edu/~cmlxsys/newsevents/pdfs/2012/reshef-correlation-science-2011.pdf
JAVA (MATLAB 内) または R (R プロジェクト) を使用して使用可能なコードは、http://www.exploredata.net/Usage-instructionsから入手できます。
組み合わせ爆発を回避する単純な「貪欲な」方法
再構成された信号q_i
とグラウンド トゥルースs_j
については、NxN 行列とします。
M[i,j] = abs(corr(q_i,s_j))
"corr()" を使用すると、結果が [-1,1] になる相関関数が得られます。たとえば、ピアソンのモーメント積 (MATLAB: corrcoef() ) またはスピアマンの順位相関です。
ステップ 1) を見つけます(i,j) = argmax(l,m) M[l,m]
。これは再構成されたインデックス i,j のペアです。リストにプッシュします。これは、現在対象となるものの中で最も一致するペアです。
ステップ 2) 行 i と列 j を NaN か何かで空白にします。
ステップ 3) まだ N 個実行していない場合 (行列がすべて NaN であるとは限りません)、ステップ 1 に進みます。
(元のインデックスを記憶して、行と列を削除することもできます)。
リスト内のすべてのペアについて、元の M[i,j] を平均します。これは、欲張りアルゴリズムで見つけたペアの平均相関 (絶対値) です。
あなたは組み合わせ爆発に苦しんでいます。順序の問題はさておき: ベースラインを削除してから、相互相関を使用して、最良 (s) および最小 (-s) の相関信号を見つけることをお勧めします。したがって、信号の「反転」は解決されます。
2D 相互相関は、多くの画像処理ライブラリで提供されており、どの列が適切に並べられているか (相関が高い (s) と低い (-s)) をすばやく判断するために使用できます。間にある列は並べ替えが必要です。
マトリックスを画像として表示する場合、さまざまな変換 (せん断、スケールなど) にわたって不変である 2 つの画像の類似性を測定できる画像処理アルゴリズムが多数あります。ただし、列の混合は奇妙な非線形変換であり、画像処理パラダイムにうまく適合しません。
どのチャネルが相関しているかがわからない場合は、それらを分離して個別に比較する必要があると思います。これが問題の内容です。(例外的に効率的な方法ですべてを実行できるアルゴリズムは知りません。スケール ファクターの問題についてのみ説明します)。
任意の (ゼロでない?) 倍率が含まれている場合は、2 つのベクトルの内積を取り、それらのノルムの積で割ることができます。結果は [-1,1] の範囲になり、絶対値が最も大きい一致を選択できます。