请教一个聚类问题。

假如一个平面有400个点,他们之间可能连接或不连接,用逻辑矩阵A2(400x400)可以描述(A2(1, 2)=1表示点1和2连接)。然后这个平面和点被复制了30次(可以类比为复制成很多层),但是,点之间连接关系每层都是未必相同的。这样,连接关系矩阵可以用A3(400x400x30)表示。那么我们现在要找所有连接点的集合(簇或者聚类)。当然,在一层内,所有连接(包括间接)的点构成一个簇。如果层和层之间同一对点都是相连的,那么他们连接的两层的簇可以看成是同一个簇。比如A3(1,2,1)=1, A3(1,3,1)=1, A3(1,2,2)=1, A3(1,4,2)=1, 那么存在一个簇{(1, 1), (2, 1), (3, 1),(1, 2),(2, 2),(4, 2)}。如果进一步扩展到多维,比如A4(400x400x30x20)甚至更多呢?
请问有没有好一些的算法?实际数据中有连接的是少数,比如在一层内每个点的连接不会多于特定10个点。
我能想到的办法很麻烦:就是先把连接矩阵转化为400x1的细胞矩阵,例如A4,转化为A4c。每个细胞内是Nx30x20的值(N<=10,表示所有可能和A连接的点)。然后从第一个点开始循环+递归查找,每找一次就把找过的地方标记为0,直到全部元素归0。这样效率很低(三层循环20,30,400;循环内还要递归遍历)。头疼。

 采纳的回答

jonemon
jonemon 2022-11-25

0 个投票

function [yc,z,h,t]=juleifenxi(A)
A=zscore(A)
y=pdist(A,'Euclid');%计算欧氏距离
yc=squareform(y);
z=linkage(y);
[h,t]=dendrogram(z);%可视化聚类树
希望对你有帮助!

更多回答(0 个)

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!