Jaccard index, 又称为Jaccard相似系数 (错误处已备注)

相似度计算之杰卡德相似度

Jaccard index, 又称为Jaccard相似系数(Jaccard similarity coefficient)用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。

杰卡德相似系数

两个集合A和B交集元素的个数在A、B并集中所占的比例,称为这两个集合的杰卡德系数,用符号 J(A,B) 表示。杰卡德相似系数是衡量两个集合相似度的一种指标(余弦距离也可以用来衡量两个集合的相似度)。

  \[J(A,B)=\frac{|A\cap B|}{|A\cup B|}\]

Python实现:

1

2

3

4

5

6

7

8

def jaccard_sim(a, b):

    unions = len(set(a).union(set(b)))

    intersections = len(set(a).intersection(set(b)))

    return intersections / unions

 

a = ['x', 'y']

b = ['x', 'z', 'v']

 

另外sklearn中也有相关实现,但是要求数据进行过encode处理,而且两个数组的长度也必须一样。

杰卡德距离

杰卡德距离(Jaccard Distance) 是用来衡量两个集合差异性的一种指标,它是杰卡德相似系数的补集,被定义为1减去Jaccard相似系数。

  \[J_{\delta} =1-J(A,B)=\frac{|A\cup B|-|A\cap B|}{|A\cup B|}\]

杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。

杰卡德系数扩展:Tanimoto系数

Tanimoto系数由Jaccard系数扩展而来,又称为广义Jaccard相似系数,计算方式如下:

  \[E_j(A,B)=\frac{A\cdot B}{||A||^2+||B||^2-A\cdot B}\]

其中A、B分别表示为两个向量,集合中每个元素表示为向量中的一个维度,在每个维度上,取值通常是[0, 1]之间的值(如果取值是二值向量0或1,那么Tanimoto系数就等同Jaccard距离),A\cdot B表示向量乘积,||A||^2表示向量的模,即 ||A||^2 = \sqrt{\sum_{i=1}^{n}{A_i^2}}

Tanimoto系数容易与余弦相似度混淆在Tanimoto系数计算公式中,如果把分母的A\cdot B去掉,并将||A||^2+||B||^2替换为(||A||^2)*(||B||^2),就转成了余弦相似度(cosine similarity)。

  \[similarity=cos(\theta )=\frac{A\cdot B}{||A||^2\times ||B||^2}=\frac{\sum_{i=1}^{n}{A_i\times B_i}}{\sqrt{\sum_{i=1}^{n}{(A_i)^2}}\times \sqrt{\sum_{i=1}^{n}{(B_i)^2}}}\]

Tanimoto系数Python实现:

1

2

3

4

5

6

7

8

9

10

11

12

import numpy as np

def tanimoto_coefficient(p_vec, q_vec):

    """

    This method implements the cosine tanimoto coefficient metric

    :param p_vec: vector one

    :param q_vec: vector two

    :return: the tanimoto coefficient between vector one and two

    """

    pq = np.dot(p_vec, q_vec)

    p_square = np.linalg.norm(p_vec)

    q_square = np.linalg.norm(q_vec)

    return pq / (p_square + q_square - pq)

参考资料:

备注 : 这里的分母,作者写错多了平方。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值