在Matlab中查找具有高互相关矩阵的组

use*_*496 11 matlab cluster-analysis correlation

给定包含互相关值的下三角矩阵(100x100),其中条目'ij'是信号'i'和'j'之间的相关值,因此高值意味着这两个信号属于同一类对象,并且知道数据集中最多有四个不同的类,有人知道一种快速有效的方法来对数据进行分类并将所有信号分配给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
Run Code Online (Sandbox Code Playgroud)

这个例子中有三个类:

class 1: rows <1 3 4 6>,
class 2: rows <2 5>,
class 3: rows <7>
Run Code Online (Sandbox Code Playgroud)

Jon*_*nas 13

这是分层聚类的一个很好的问题.使用完整的链接聚类,您将获得紧凑的聚类,您所要做的就是确定截止距离,在此处应将两个聚类视为不同.

首先,您需要将相关矩阵转换为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
Run Code Online (Sandbox Code Playgroud)

要确认一切都很好,您可以想象树形图

dendrogram(Z,0,'colorthreshold',cutoff)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述