Индекс Жакара (или показатель сходства) - это мера перекрытия между двумя списками со значением от 0 до 1. Например, из этого предыдущего потока, Жакард Сходство между списками было определено как
def jaccard_similarity(list1, list2):
intersection = len(list(set(list1).intersection(list2)))
union = (len(list1) + len(list2)) - intersection
return float(intersection) / union
Результат:
jaccard_similarity([1,2,3],[1,6,7])
0.2
Я думал о том, чтобы распространить это на что-то похожее на (Среднее) Среднее значение точности при k (MAP@k), где важен порядок между двумя наборами, и матчи ближе к началу списка более награждены.
def average_jaccard_similarity(list1, list2, k):
score = 0
k = min(k,len(list1),len(list2))
for i in range(k):
score += jaccard_similarity(list1[:i+1], list2[:i+1])
return score/k
Результаты:
average_jaccard_similarity([1,2,3],[1,6,7], 3)
0.5111
average_jaccard_similarity([1,2,3],[6,1,7], 3)
0.1778
average_jaccard_similarity([1,2,3],[1,6,7], 1)
1.0
Мой вопрос: используется ли это где-то уже? Я не видел, чтобы это упоминалось в коллекциях ранжированных метрик, таких как этот .