jaccard相似度算法

Jaccard index, 又称为Jaccard相似系数(Jaccard similarity coefficient)用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。

杰卡德相似系数

两个集合A和B交集元素的个数在A、B并集中所占的比例,称为这两个集合的杰卡德系数,用符号 J(A,B) 表示。杰卡德相似系数是衡量两个集合相似度的一种指标(余弦距离也可以用来衡量两个集合的相似度)。

jaccard相似度算法_第1张图片

Python实现:

def jaccard_sim(a, b):
    unions = len(set(a).union(set(b)))
    intersections = len(set(a).intersection(set(b)))
    return intersections / unions
 
a = ['x', 'y']
b = ['x', 'z', 'v']
print(jaccard_sim(a, b))

 

杰卡德距离

杰卡德距离(Jaccard Distance) 是用来衡量两个集合差异性的一种指标,它是杰卡德相似系数的补集,被定义为1减去Jaccard相似系数。

 杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。

 

jaccard相似度算法_第2张图片

根据jaccard相似度可知,AB两个人一共看了五部哈利波特 ,所以并集为5;共同都看过只有1部,交集为1,因此AB相似度为1/5。AC同理。 sim(A,B)=1/5 sim(A,C)=2/4 sim(A,B)

但jaccard算法不适合协同过滤,因为在协同过滤中,评分是一个很关键的参考因素,而jaccard算法忽略了其中的评分环节。

杰卡德相似度适合用于隐式反馈数据。例如,使用用户的收藏行为,计算用户之间的相似度,杰卡德相似度就适合来承担这个任务。

你可能感兴趣的:(算法)