我正在使用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。除此之外标签没有意义,整个树都连接起来,我连接弄清楚如何有几个断开连接的树,它们反映了数据的断开性质。我想避免多个图,因为我希望使用可能有许多不相交簇的较大数据集。
答案 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)
结果图:
希望这是你正在寻找的一个不错的近似值。