gpt4 book ai didi

使用 jaccard 相似度的 Python Pandas 距离矩阵

转载 作者:太空狗 更新时间:2023-10-29 23:58:07 26 4
gpt4 key购买 nike

我已经实现了一个使用 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)

问题是我的结果看起来像这样,这似乎是错误的:

enter image description here

我错过了什么?例如,0 和 1 的相似度必须最大,其他值似乎也不对

最佳答案

查看文档,jaccard 的实现在 scipy.spatial.distance 中是 jaccard 不相似性,而不是相似性。这是使用 jaccard 作为度量时计算距离的常用方法。这是因为要成为度量,相同点之间的距离必须为零。

在您的代码中,0 和 1 之间的差异应该最小化,事实确实如此。在不相似的情况下,其他值看起来也是正确的。

如果您想要相似性而不是相异性,只需从 1 中减去相异性即可。

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

关于使用 jaccard 相似度的 Python Pandas 距离矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35639571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com