我有一个矩阵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%
...
我想创建一个树状图,向我展示a中有多少不同的组,考虑相似性的阈值为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(称之为A、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'})
在这种情况下,树状图不会显示所有组,因为您将节点的最大值设置为等于组的数量。