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

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实现:

另外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实现:

参考资料:

微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

Python检验数据是否正态分布

判断数据是否符合正态分布,比如使用3-sigma判断数据异常前,首先需要确定的是数据是否符合正态分布。今天一起

数据探索Pandas-Profiling与Dataprep.…

在使用数据前,我们首先要做的事观察数据,包括查看数据的类型、数据的范围、数据的分布等。Pandas-Profi

开源指标可视化工具Graphite

Graphite 是处理可视化和指标数据的优秀开源工具。它有强大的查询 API 和相当丰富的插件功能设置。事实

3 Replies to “相似度计算之杰卡德相似度”

  1. 如果取值是二值向量0或1,那么Tanimoto系数就等同Jaccard距离。我觉得这个地方是错误的。比如:A[0,1,0,1],B[1,0,1,1].那么jaccard系数为1/4,jaccard距离为1-1/4=3/4。tanimoto系数为1/2+3-1=1/4.是不相等的,欢迎讨论。

Jiao进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注