J-H*_*J-H 6 python matrix scipy pandas
我已经实现了一个使用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)
Run Code Online (Sandbox Code Playgroud)
和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)
Run Code Online (Sandbox Code Playgroud)
问题是我的结果看起来像这样似乎是假的:
我错过了什么?例如,0和1的相似性必须是最大的,其他值似乎也是错误的
看看文档,jaccardin 的实现scipy.spatial.distance是jaccard的相异性,而不是相似性.这是使用jaccard作为度量时计算距离的常用方法.这是因为为了成为度量,相同点之间的距离必须为零.
在您的代码中,应该最小化0和1之间的相异性.其他值在不相似的背景下看起来也是正确的.
如果你想要相似性而不是相异性,只需从1中减去相异性.
res = 1 - pdist(df[['category1','category2','category3']], 'jaccard')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5376 次 |
| 最近记录: |