Jaccard相似度和cosine相似度

狭义Jaccard相似度: 计算两个集合之间的相似程度,元素的“取值”为0或1
对集合A和B,Jaccard相似度计算如下:
Jaccard(A, B)= |A intersectB| / |A union B|
相似度数值在[0, 1]之间,当A==B的时候,为1. 优缺点,就是元素的取值只能是0或者1,无法利用更丰富的信息
由相似度,可以转换成Jaccard距离:
Jaccard distance (A, B) = 1- Jaccard(A, B)

余弦相似度: 两个向量夹角越小越相似

Jaccard相似度和cosine相似度_第1张图片
余弦公式

Jaccard相似度和cosine相似度_第2张图片

假定a向量是[x1, y1],b向量是[x2, y2],那么可以将余弦定理改写成下面的形式:
Jaccard相似度和cosine相似度_第3张图片

Jaccard相似度和cosine相似度_第4张图片

数学家已经证明,余弦的这种计算方法对n维向量也成立。假定A和B是两个n维向量,A是 [A1, A2, ..., An] ,B是 [B1, B2, ..., Bn] ,则A与B的夹角θ的余弦等于:

Jaccard相似度和cosine相似度_第5张图片

余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似度"。
文本相关性的度量比较(cosine好一点点,但是Jaccard利于map/red计算)

p.s.在文本相关性计算中,分别使用Cosine和Jaccard,再将算法结果在线上做测试。线上场景是1688的资讯画报推荐, 数据显示,两者的CTR(曝光点击率)基本一致。

对于行为相关性的度量,Jaccard一般效果更好;而对于文本相关性的度量,Cosine效果略好于Jaccard. 但是,Jaccard利于map/reduce计算, 其在hadoop上进行分布式计算时,计算效率上比Cosine有一定的优势。

字符串编辑距离(Levenshtein距离):

精确计算两个字符串的编辑距离,可以使用经典的动态规划思路。

这里来看下如何判断字符串A与B的编辑是否>N?这样我们就可以比较两个字符串的相似度了。
可以构建一个编辑距离自动机(超酷算法:Levenshtein自动机),把测试字符集合输入自动机进行判断。

可用于拼写检查,模糊匹配等场景。

你可能感兴趣的:(Jaccard相似度和cosine相似度)