我有一个由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连接它们)
我真的不明白如何将此功能与我的数据一起使用......
答案 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组:
此外,c = 0.3或0.7相似度:
T = 1 1 1 1
所以这里只有一个小组。
要在树形图上使用它,您可以计算组数:
num_grp = numel(unique(T));
后:
dendrogram(tree,num_grp,'labels',{'A','B','C','D'})
在这种情况下,树形图不会显示所有组,因为您将节点的最大值设置为等于组的数量。