如何在进行层次聚类和生成树状图时在MATLAB中显示单独的断开连接树?

时间:2013-01-25 13:27:29

标签: matlab plot cluster-analysis hierarchical-clustering dendrogram

我正在使用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}已连接(边缘已定向)。

我希望在单个地块上看到dendrogram中的单独群集。由于没有从一个集群到下一个集群的路径,我希望看到每个集群具有单独根的单独树。我正在使用命令:

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)

这些命令来自Hierarchical Clustering。结果如下:imageDendrogram。除此之外标签没有意​​义,整个树都连接起来,我连接弄清楚如何有几个断开连接的树,它们反映了数据的断开性质。我想避免多个图,因为我希望使用可能有许多不相交簇的较大数据集。

1 个答案:

答案 0 :(得分: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)

结果图:

adjacency dendrogram

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