Python Skcard_分数是如何计算的?

Python Skcard_分数是如何计算的?,python,scikit-learn,similarity,information-theory,Python,Scikit Learn,Similarity,Information Theory,我试图了解sklearn的jaccard_分数是怎么回事 这就是我得到的结果 1. jaccard_score([0 1 1], [1 1 1]) 0.6666666666666666 2. jaccard_score([1 1 0], [1 0 0]) 0.5 3. jaccard_score([1 1 0], [1 0 1]) 0.3333333333333333 我知道这个公式是正确的 intersection / size of A + size of B - intersecti

我试图了解sklearn的jaccard_分数是怎么回事

这就是我得到的结果

1. jaccard_score([0 1 1], [1 1 1])
0.6666666666666666

2. jaccard_score([1 1 0], [1 0 0])
0.5

3. jaccard_score([1 1 0], [1 0 1])
0.3333333333333333
我知道这个公式是正确的

intersection / size of A + size of B - intersection
我认为最后一个应该给我0.2,因为重叠是1,条目总数是6,结果是1/5。但我得到了0.33333

有人能解释一下sklearn是如何计算jaccard_分数的吗?

Per,使用
jaccard_分数
函数“将样本的预测标签集与
y_true
中的相应标签集进行比较”。如果属性是二进制的,则计算基于使用混淆矩阵。否则,使用每个属性值/类标签的混淆矩阵进行相同的计算

上述二进制属性/类的定义可以简化为集合定义,如下所述


假设有三条记录
r1
r2
r3
。向量
[0,1,1]
[1,1,1]
——它们是真实的和预测的记录类——可以分别映射到两个集
{r2,r3}
{r1,r2,r3}
。这里,向量中的每个元素表示集合中是否存在对应的记录。两个集合的Jaccard相似度与两个向量的相似度值定义相同。

如果计算基于混淆矩阵。第三种情况有道理,但第二种情况不正确。它必须是0.3333而不是0.5。否?根据wiki公式,分母是第一个或第二个列表中为1的属性数。我用更多的解释改进了上面的答案。