我有一张桌子:
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相似度。 公式是:
在这个公式中| x |和| y |表示不为零的项目数。例如| A |对于| B |,非零的项目数为2和| C |它是1,对于| D |它是2.
| x与y |相交表示不为零的公共项目数。 | A交叉B |是0. |相交D |是1,因为两者中x的值都不为零。
例如:jaccard(A,D)= 1/3 = 0.33我如何在Matlab中实现这个?
答案 0 :(得分: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)