Матрица Python Pandas с использованием сходства с jaccard

Я реализовал функцию для построения матрицы расстояния с использованием сходства jaccard:

import pandas as pd entries = [ {'id':'1', 'category1':'100', 'category2': '0', 'category3':'100'}, {'id':'2', 'category1':'100', 'category2': '0', 'category3':'100'}, {'id':'3', 'category1':'0', 'category2': '100', 'category3':'100'}, {'id':'4', 'category1':'100', 'category2': '100', 'category3':'100'}, {'id':'5', 'category1':'100', 'category2': '0', 'category3':'100'} ] df = pd.DataFrame(entries) 

и матрица расстояний с scipy

 from scipy.spatial.distance import squareform from scipy.spatial.distance import pdist, jaccard res = pdist(df[['category1','category2','category3']], 'jaccard') squareform(res) distance = pd.DataFrame(squareform(res), index=df.index, columns= df.index) 

Проблема в том, что мой результат выглядит так, что кажется ложным:

введите описание изображения здесь

Что мне не хватает? Сходство 0 и 1 должно быть, например, максимальным, и другие значения также кажутся неправильными

Глядя на документы, реализация jaccard в scipy.spatial.distance является несходством jaccard, а не сходством. Это обычный способ вычисления расстояния при использовании jaccard в качестве показателя. Причина этого в том, что для того, чтобы быть метрикой, расстояние между одинаковыми точками должно быть равно нулю.

В вашем коде разница между 0 и 1 должна быть сведена к минимуму, что и есть. Другие значения выглядят правильно и в контексте несходства.

Если вы хотите подобия вместо несходства, просто вычтите несходство от 1.

 res = 1 - pdist(df[['category1','category2','category3']], 'jaccard')