使用树形图matlab进行分组

时间:2014-09-03 08:46:35

标签: matlab cluster-analysis dendrogram

我有一个由4个向量(列)组成的矩阵A,每个元素有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%
...

我想创建一个树形图,向我展示A中有多少不同的组,考虑到相似度的阈值为0.95(即,如果2组具有相似性> 0.7连接它们)

我真的不明白如何将此功能与我的数据一起使用......

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题,但对于我所理解的,我会这样做:

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(称为A B C D)分为3组:

  1. A
  2. B,d
  3. C
  4. 此外,c = 0.3或0.7相似度:

    T = 1 1 1 1
    

    所以这里只有一个小组。

    要在树形图上使用它,您可以计算组数:

    num_grp = numel(unique(T));
    

    后:

    dendrogram(tree,num_grp,'labels',{'A','B','C','D'})
    

    在这种情况下,树形图不会显示所有组,因为您将节点的最大值设置为等于组的数量。