Jaccard(杰卡德)相似度
Jaccard相似度常用于计算两个文本的字面相似度。将文本分为词的序列。两个文本中一样的词汇集合的个数为A,所有词汇构成的集合为B。最终用A除以B得到的结果就是Jaccard相似度。
用一个例子来说明:
今天天气很好==>今天/天气/很好
今天天气不好==>今天/天气/不好
所有词汇的集合:
word_set = {今天,天气,很好,不好}
两个句子中相同的词汇集合:
same_set = {今天,天气}
Jaccard_similarity=len(word_set)len(same_set)=42=0.5
把这个问题抽象出来可以给出Jaccard相似度的定义:
给定两个集合A,B,Jaccard系数(相似度)定义为A与B交集大小与并集大小的比值,公式如下:
J(A,B)=∣A∪B∣∣A∩B∣=∣A∣+∣B∣−∣A∩B∣∣A∩B∣
Jaccard值越大说明相似度越高。
Jaccard距离用于描述不相似的程度:
d(A,B)=1−J(A,B)
如何度量两个向量之间的Jaccard相似度?
前提条件就是:这两个向量的维度一定要相等,否则对于相似性的度量既没有意义,也不好度量。
Jaccard针对二值向量可进行相似性度量。
假设拥有两个向量
vec1和
vec2:
- 其中对应位置均为0的个数记作
M00
- 其中
vec1中为0
vec2中为1的个数记作
M01
- 其中
vec1中为1
vec2中为0的个数记作
M10
- 其中对应位置均为1的个数记作
M11
如果
M00与
M11相差不大,则两个向量的Jaccard相似度为:
J(vec1,vec2)=M00+M01+M10+M11M00+M11
如果
M00>>M11或者为0时代表的含义并无实际意义,则两个向量的Jaccard相似度为:
J(vec1,vec2)=M01+M10+M11M11
特点
Jaccard相似性与余弦相似度的关键区别在于:Jaccard针对重复性的元素不敏感,也就是一个词汇出现100次在Jaccard的相似性度量中与出现1次的结果一样。而余弦相似度有较大的区别。
海明距离
海明距离也是用于度量两个向量之间的差异程度。同时也是SimHash的御用距离度量方法。
统计两个向量中不一样元素的个数的和,其实就是
Jaccard中
M01+M10的结果。
同时也可以计算两个向量异或之后的元素1的个数之和。