如何在Matlab中计算Jaccard相似度

5

我有一张表格:

   x   y   z 
A  2   0   3   
B  0   3   0    
C  0   0   4    
D  1   4   0

我想在Matlab中计算向量A、B、C和D之间的Jaccard相似度,公式如下: enter image description here 在这个公式中,|x|和|y|表示不为零的项目数。例如,|A|不为零的项目数为2,对于|B|和|C|也是1,而对于|D|则为2。 |x intersect y|表示共同的不为零的项目数。|A intersect B|为0。|A intersect D|为1,因为x在两个向量中的值都不为零。
例如:jaccard(A,D)= 1/3=0.33
如何在Matlab中实现此功能?
1个回答

6

Matlab内置有一个计算Jaccard距离的函数:pdist

以下是一些代码

X = rand(2,100);
X(X>0.5) = 1;
X(X<=0.5) = 0;

JD = pdist(X,'jaccard')  % jaccard distance
JI = 1 - JD;             % jaccard index

编辑

一个不需要统计工具箱的计算。

a = X(1,:);
b = X(2,:);
JD = 1 - sum(a & b)/sum(a | b)

1
+1 我也是这么想的(虽然需要使用统计工具箱)。 - nkjt
a和b一定是逻辑上的吗? - Buck Thorn
@Try Hard 不一定,但是 JD = pdist(rand(2,100),'jaccard')1,有点不具信息性! - marsei
@Magla 我对这个函数不是很了解,我只是好奇因为原帖的问题似乎不仅限于0/1... - Buck Thorn
@TryHard 通常 Jaccard 距离/指数是用于二进制数据的,而 OP 可能想通过他们的示例输出进行转换为二进制 - 尽管 Matlab 实现也可以处理非二进制数据,只要匹配是精确的 - 例如尝试运行 X = randi(10,[2,100]); - nkjt
@nkjt 明白了...感谢澄清(本来可以查一下的 :)) 现在原帖的例子有意义了... - Buck Thorn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接