Jaccard距离和海明距离

Jaccard(杰卡德)相似度

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

用一个例子来说明:

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

所有词汇的集合:
word_set = {今天,天气,很好,不好}
两个句子中相同的词汇集合:
same_set = {今天,天气}
Jaccard_similarity=len(same_set)len(word_set)=24=0.5Jaccard\_similarity=\frac{len(same\_set)}{len(word\_set)}=\frac{2}{4}=0.5

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

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

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

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

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

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

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

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

假设拥有两个向量vec1vec_1vec2vec_2

  1. 其中对应位置均为0的个数记作M00M_{00}
  2. 其中vec1vec_1中为0vec2vec_2中为1的个数记作M01M_{01}
  3. 其中vec1vec_1中为1vec2vec_2中为0的个数记作M10M_{10}
  4. 其中对应位置均为1的个数记作M11M_{11}

如果M00M_{00}M11M_{11}相差不大,则两个向量的Jaccard相似度为:
J(vec1,vec2)=M00+M11M00+M01+M10+M11J(vec_1, vec_2)=\frac{M_{00}+M_{11}}{M_{00}+M_{01}+M_{10}+M_{11}}

如果M00>>M11M_{00}>>M_{11}或者为0时代表的含义并无实际意义,则两个向量的Jaccard相似度为:
J(vec1,vec2)=M11M01+M10+M11J(vec_1, vec_2)=\frac{M_{11}}{M_{01}+M_{10}+M_{11}}

特点

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

海明距离

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章