基于matlab的聚类分析

基于matlab的聚类分析,matlab,cluster-analysis,dendrogram,Matlab,Cluster Analysis,Dendrogram,我有一个矩阵a,由4个向量(列)组成,每个向量(列)有12个元素 A = [ 0 0 0 0; 0.0100 0.0100 0.0100 0; 0.3000 0.2700 0.2400 0.2400; 0.0400 0 0.0200 0.0200; 0.1900 0.0400 0.0800 0.0800; 0.1

我有一个矩阵a,由4个向量(列)组成,每个向量(列)有12个元素

A = [    0         0         0         0;
    0.0100    0.0100    0.0100         0;
    0.3000    0.2700    0.2400    0.2400;
    0.0400         0    0.0200    0.0200;
    0.1900    0.0400    0.0800    0.0800;
    0.1600    0.6500    0.2100    0.3800;
    0.0600    0.0100    0.0300    0.0200;
    0.1500    0.0100    0.0600    0.1700;
         0         0         0    0.0800;
    0.0300         0    0.0200    0.0100;
    0.0700         0    0.1200    0.0100;
         0         0    0.2300         0]
我还有一个相似矩阵,它说明了向量与其他向量的相似程度

SIM =[1.00    0.6400    0.7700    0.8300;
    0.6400    1.0000    0.6900    0.9100;
    0.7700    0.6900    1.0000    0.7500;
    0.8300    0.9100    0.7500    1.0000]
读取此矩阵的行

vetor 1 is similar to vector 2 for 64%
vector 1 is similar to vector 3 for the 77%
...
我想创建一个树状图,显示在考虑到0.95相似性阈值的情况下,一个系统中有多少不同的组(即,如果两个组的相似性>0.7,则将它们连接起来)


我真的不知道如何在我的数据中使用此函数…

我不确定我是否正确理解了您的问题,但根据我的理解,我将这样做:

DSIM = squareform(1-SIM); % convert to a dissimilarity vector
结果如下:

% DSIM =   0.3600    0.2300    0.1700    0.3100    0.0900    0.2500
% DSIM =  1 vs 2 , 1 vs 3 , 1 vs 4, 2 vs 3, 2 vs 4, 3 vs 4 ; 
之后,计算连杆:

Z = linkage (DSIM,'average'); % there is other grouping option than average
您可以使用以下方法绘制树状图:

dendrogram(Z)
但是,您希望根据阈值分割组,以便:

c = 0.1;
这是要切割的不同点,这意味着如果两个组的相似性高于0.9,则它们将连接在一起

T = cluster(tree,'cutoff',c,'criterion','distance')
在这种情况下,T的结果为:

T =
  1
  2
  3
  2
这意味着在这个级别上,向量1、2、3、4(称为B C D)分为3组:

  • A
  • B、 D
  • C
  • 同样,当c=0.3或0.7相似性时:

    T = 1 1 1 1
    
    所以这里只有一组人

    要在树状图上显示,您可以计算组数:

    num_grp = numel(unique(T));
    
    之后:

    dendrogram(tree,num_grp,'labels',{'A','B','C','D'})
    
    在这种情况下,树状图不会显示所有组,因为您将最大节点数设置为组数