2

我正在使用MATLAB,并且我有一个邻接矩阵:

mat =

 0     1     0     0     0     0
 1     0     0     0     1     0
 0     0     0     1     0     0
 0     0     1     0     0     1
 0     1     0     0     0     0
 0     0     0     1     0     0

这不是完全连接的。节点{1,2,5}是连接的,并且{3,4,6}是连接的(边是有向的)。

我想在单个图上的树状图中看到单独的簇。由于没有从一个集群到下一个集群的路径,我希望看到每个集群具有不同根的单独树。我正在使用命令:

mat=zeros(6,6)
mat(1,2)=1;mat(2,1)=1;mat(5,2)=1;mat(2,5)=1;
mat(6,4)=1;mat(4,6)=1;mat(3,4)=1;mat(4,3)=1;
Y=pdist(mat)
squareform(Y)
Z=linkage(Y)
figure()
dendrogram(Z)

分层聚类建议使用这些命令。并附上结果:imageDendrogram。除了标签没有意​​义之外,整个树是连接的,我连接弄清楚如何有几个断开连接的树来反映数据的断开连接性质。我想避免使用多个图,因为我希望使用可能具有许多不相交集群的较大数据集。

4

1 回答 1

1

我看到这是不久前有人问过的,但如果您仍然感兴趣,可以尝试以下方法:

首先从邻接矩阵中提取对角线以上的值,如下所示:

>> matY = [];
>> for n = 2:6
for m = n:6
matY = [matY mat(n,m)];
end
end
>> matY

matY =

  Columns 1 through 13

     0     0     0     1     0     0     1     0     0     0     0     1     0

  Columns 14 through 15

     0     0

现在你有一些看起来像Y向量pdist会产生的东西。但是这里的值与您可能想要的相反;未连接的顶点的“距离”为零,连接的顶点相距一。让我们解决这个问题:

>> matY(matY == 0) = 10

matY =

  Columns 1 through 13

    10    10    10     1    10    10     1    10    10    10    10     1    10

  Columns 14 through 15

    10    10

更好的。现在我们可以计算一个常规的簇树,它将连接的顶点表示为“靠近在一起”,将非连接的顶点表示为“相距很远”:

>> linkage(matY)

ans =

     3     6     1
     1     5     1
     2     4     1
     7     8    10
     9    10    10

>> dendrogram(ans)

结果图:

邻接树状图

希望这是您正在寻找的一个不错的近似值。

于 2013-04-05T20:34:22.757 回答