11

相互相関値を含む下三角行列 (100x100) が与えられた場合、エントリ 'ij' は信号 'i' と 'j' の間の相関値であり、高い値はこれら 2 つの信号が同じクラスのオブジェクトに属していることを意味します。そして、データセットには最大で4つの異なるクラスがあることを知っている場合、データを分類し、すべての信号を検索して相互にクロスチェックするのではなく、すべての信号を4つの異なるクラスに割り当てるための高速で効果的な方法を誰かが知っていますか? ? 次の 7x7 マトリックスは、ポイントを説明するのに役立ちます。

 1      0       0       0       0       0       0
.2      1       0       0       0       0       0
.8      .15     1       0       0       0       0
.9      .17     .8      1       0       0       0
.23     .8      .15     .14     1       0       0
.7      .13     .77     .83.    .11     1       0
.1      .21     .19     .11     .17     .16     1

この例には 3 つのクラスがあります。

class 1: rows <1 3 4 6>,
class 2: rows <2 5>,
class 3: rows <7>
4

3 に答える 3

15

これは、階層クラスタリングの良い問題です。完全なリンケージ クラスタリングを使用すると、コンパクトなクラスターが得られます。必要なのは、2 つのクラスターが異なると見なされるカットオフ距離を決定することだけです。

まず、相関行列を行列に変換する必要がありますdissimilarity。相関は 0 と 1 の間にあるため1-correlation、うまく機能します。相関が高いとスコアは 0 に近くなり、相関が低いとスコアは 1 に近くなります。相関が配列に格納されていると仮定します。corrMat

%# remove diagonal elements
corrMat = corrMat - eye(size(corrMat));
%# and convert to a vector (as pdist)
dissimilarity = 1 - corrMat(find(corrMat))';

%# decide on a cutoff
%# remember that 0.4 corresponds to corr of 0.6!
cutoff = 0.5; 

%# perform complete linkage clustering
Z = linkage(dissimilarity,'complete');

%# group the data into clusters
%# (cutoff is at a correlation of 0.5)
groups = cluster(Z,'cutoff',cutoff,'criterion','distance')
groups =
     2
     3
     2
     2
     3
     2
     1

すべてがうまくいっていることを確認するために、デンドログラムを視覚化できます

dendrogram(Z,0,'colorthreshold',cutoff)

ここに画像の説明を入力

于 2012-09-02T13:40:04.143 に答える
2

非類似度行列を作成する代わりに、次の方法を使用できます。

Z = linkage(corrMat,'complete','correlation')

これにより、Matlab は行列を相関距離として解釈できるようになり、次のようにデンドログラムをプロットできます。

dendrogram(Z);

デンドログラムが正しいかどうかを確認する 1 つの方法は、 に対応する最大の高さを確認すること1-min(corrMat)です。corrMat の最小値が 0 の場合、ツリーの最大の高さは 1 になります。最小値が -1 (負の相関) の場合、高さは 2 になります。

于 2016-08-01T22:34:50.487 に答える
0

4 つのグループがあることがわかっているので、かなり単純化した 2 段階のアプローチから始めます。

最初の段階では、任意の 2 つの要素間の最大の相関関係を見つけ、それらの 2 つの要素をグループに配置してから、マトリックス内の相関関係をゼロにします。2 つの要素間で次に高い相関関係を見つけ、それらを既存のグループに追加するか、新しいグループを作成して、正しい数のグループが得られるまで繰り返します。

最後に、グループに含まれていない要素を確認し、それらの列に移動して、他のグループとの最も高い相関関係を特定します。その要素がすでにグループに含まれている場合は、それらもそのグループに配置します。それ以外の場合は、次の要素にスキップして後で戻ってきます。

興味がある場合や不明な点がある場合は、後でコードを追加できます。先ほど言ったように、アプローチは単純ですが、グループの数を確認する必要がない場合は有効だと思います。

于 2012-09-02T12:40:32.947 に答える