Jaccard距离和海明距离

Jaccard(杰卡德)相似度

Jaccard相似度常用于计算两个文本的字面相似度。将文本分为词的序列。两个文本中一样的词汇集合的个数为A,所有词汇构成的集合为B。最终用A除以B得到的结果就是Jaccard相似度。

用一个例子来说明:

		今天天气很好==>今天/天气/很好
		今天天气不好==>今天/天气/不好

所有词汇的集合:
word_set = {今天,天气,很好,不好}
两个句子中相同的词汇集合:
same_set = {今天,天气}
J a c c a r d _ s i m i l a r i t y = l e n ( s a m e _ s e t ) l e n ( w o r d _ s e t ) = 2 4 = 0.5 Jaccard\_similarity=\frac{len(same\_set)}{len(word\_set)}=\frac{2}{4}=0.5

把这个问题抽象出来可以给出Jaccard相似度的定义:

	给定两个集合A,B,Jaccard系数(相似度)定义为A与B交集大小与并集大小的比值,公式如下:

J ( A , B ) = A B A B = A B A + B A B J(A,B)=\frac{|A\cap B|}{|A\cup B|}=\frac{|A\cap B|}{|A| + |B| - |A\cap B|}

	Jaccard值越大说明相似度越高。

Jaccard距离用于描述不相似的程度: d ( A , B ) = 1 J ( A , B ) d(A,B)=1-J(A,B)

如何度量两个向量之间的Jaccard相似度?

前提条件就是:这两个向量的维度一定要相等,否则对于相似性的度量既没有意义,也不好度量。

Jaccard针对二值向量可进行相似性度量。

假设拥有两个向量 v e c 1 vec_1 v e c 2 vec_2

  1. 其中对应位置均为0的个数记作 M 00 M_{00}
  2. 其中 v e c 1 vec_1 中为0 v e c 2 vec_2 中为1的个数记作 M 01 M_{01}
  3. 其中 v e c 1 vec_1 中为1 v e c 2 vec_2 中为0的个数记作 M 10 M_{10}
  4. 其中对应位置均为1的个数记作 M 11 M_{11}

如果 M 00 M_{00} M 11 M_{11} 相差不大,则两个向量的Jaccard相似度为:
J ( v e c 1 , v e c 2 ) = M 00 + M 11 M 00 + M 01 + M 10 + M 11 J(vec_1, vec_2)=\frac{M_{00}+M_{11}}{M_{00}+M_{01}+M_{10}+M_{11}}

如果 M 00 > > M 11 M_{00}>>M_{11} 或者为0时代表的含义并无实际意义,则两个向量的Jaccard相似度为:
J ( v e c 1 , v e c 2 ) = M 11 M 01 + M 10 + M 11 J(vec_1, vec_2)=\frac{M_{11}}{M_{01}+M_{10}+M_{11}}

特点

Jaccard相似性与余弦相似度的关键区别在于:Jaccard针对重复性的元素不敏感,也就是一个词汇出现100次在Jaccard的相似性度量中与出现1次的结果一样。而余弦相似度有较大的区别。

海明距离

海明距离也是用于度量两个向量之间的差异程度。同时也是SimHash的御用距离度量方法。

统计两个向量中不一样元素的个数的和,其实就是 J a c c a r d Jaccard M 01 + M 10 M_{01}+M_{10} 的结果。
同时也可以计算两个向量异或之后的元素1的个数之和。

猜你喜欢

转载自blog.csdn.net/qq_19672707/article/details/105706151