Применение индекса Жакара для оценки ранжированных (упорядоченных) прогнозов - PullRequest
0 голосов
/ 03 февраля 2020

Индекс Жакара (или показатель сходства) - это мера перекрытия между двумя списками со значением от 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

Мой вопрос: используется ли это где-то уже? Я не видел, чтобы это упоминалось в коллекциях ранжированных метрик, таких как этот .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...