如何用python计算jaccard相似度
Jaccard 相似度指数衡量两个数据集之间的相似度。它的范围可以是 0 到 1。数字越大,两组数据越相似。
Jaccard相似指数计算如下:
杰卡德相似度=(两组中的观察值数量)/(任意一组中的观察值数量)
或者,写成记号形式:
J(A, B) = |A∩B| / |A∪B|
本教程介绍如何在 Python 中计算两个数据集的 Jaccard 相似度。
示例:Python 中的 Jaccard 相似度
假设我们有以下两组数据:
import numpy as np a = [0, 1, 2, 5, 6, 8, 9] b = [0, 2, 3, 4, 5, 7, 9]
我们可以定义以下函数来计算两个集合之间的Jaccard相似度:
#define Jaccard Similarity function def jaccard(list1, list2): intersection = len(list(set(list1).intersection(list2))) union = (len(list1) + len(list2)) - intersection return float(intersection) / union #find Jaccard Similarity between the two sets jaccard(a, b) 0.4
两个列表之间的 Jaccard 相似度为0.4 。
请注意,如果两个集合没有共享值,该函数将返回0 :
c = [0, 1, 2, 3, 4, 5] d = [6, 7, 8, 9, 10] jaccard(c, d) 0.0
如果两个集合相同,该函数将返回1 :
e = [0, 1, 2, 3, 4, 5] f = [0, 1, 2, 3, 4, 5] jaccard(e, f) 1.0
该函数也适用于包含字符串的集合:
g = ['cat', 'dog', 'hippo', 'monkey'] h = ['monkey', 'rhino', 'ostrich', 'salmon'] jaccard(g, h) 0.142857
您还可以使用此函数查找两个集合之间的杰卡德距离,即两个集合之间的差异,计算公式为 1 – 杰卡德相似度。
a = [0, 1, 2, 5, 6, 8, 9]
b = [0, 2, 3, 4, 5, 7, 9]
#find Jaccard distance between sets a and b
1 - jaccard(a, b)
0.6
请参阅此维基百科页面以了解有关杰卡德相似度指数的更多信息。