【发布时间】:2023-03-07 23:23:02
【问题描述】:
我已经实现了一个使用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 的相似度必须是最大的,其他值似乎也错误
【问题讨论】:
-
我觉得没问题,你能举一个你认为错误的值的例子,以及你的推理吗? 0 表示他们在每个坐标上都同意,1/3 表示他们在除一个之外的所有方面都同意,2/3 表示他们在除 2 之外的所有方面都同意,1 表示他们在每个坐标上都不同意
标签: python pandas matrix scipy