Я пытаюсь вычислить нечеткий индекс Jaccard между двумя наборами с следующим обоснованием: как индекс Jaccard, я хочу рассчитать соотношение между количеством элементов, которые являются общими для обоих наборов и общего количества различных элементов в обоих наборах. Проблема заключается в том, что я хочу использовать функцию сходства с порогом, чтобы определить, что то, что имеет значение, как «же» пункта, находящегося в обоих наборах, так что элементы, которые похожи:Выполнение «нечеткой» реализации индекса Jaccard
- не учитываются дважды в союз
- Учитываются на пересечении.
У меня есть рабочая реализация здесь (в Python):
def fuzzy_jaccard(set1, set2, similarity, threshold):
intersection_size = union_size = len(set1 & set2)
shorter_difference, longer_difference = sorted([set2 - set1, set1 - set2], key=len)
while len(shorter_difference) > 0:
item1, item2 = max(
itertools.product(longer_difference, shorter_difference),
key=lambda (a, b): similarity(a, b)
)
longer_difference.remove(item1)
shorter_difference.remove(item2)
if similarity(item1, item2) > threshold:
union_size += 1
intersection_size += 1
else:
union_size += 2
union_size = union_size + len(longer_difference)
return intersection_size/union_size
Проблема вот это квадратичный по размеру множеств, потому что в itertools.product
я итерацию во всех возможных пар элементов взято по одному из каждого набора (*). Теперь, я думаю, я должен это сделать, потому что хочу соответствовать каждому элементу a
от set1
с максимально возможным кандидатом b
от set2
, который не похож на другой предмет a'
от set1
.
У меня такое ощущение, что должно быть O(n)
способ сделать это, я не понимаю. Есть ли у вас какие-либо предложения?
Есть еще две проблемы, такие как пересчет подобия для каждой пары, как только я получу лучший матч, но я не очень-то о них беспокоюсь.
Я не знаком с алгоритмом, но 'union_size = len (set1 | set2)' недостаточно? – abstractpaper
Нет. Он будет считать два пункта, у которых «подобие» больше порога. Я не вычисляю точный размер союза, но размер объединения «минус» аналогичных элементов. –