如何计算user
和score
之间的相似度?
例如,df
:
user score category_cluster
i 4.5 category1
j 5 category1
k 9.5 category2
我希望得到如下结果:
同一useri_j
中category_cluster
得分之间的相似性(如果不在同一个群集中)不会计算相似性。你会如何衡量相似性?
答案 0 :(得分:0)
您需要先定义一个分数函数。其中,你有曼哈顿或欧几里德距离,这可能是最常用的距离。有关距离的更多信息,我建议您研究scikit-learn
,它们实现了各种各样的距离(指标)。查看here以获取列表(您可以稍后研究每个列表的测量结果)。
其中一些是距离度量(元素有多么不同,最接近0越相似),而其他测量相似度(如指数内核,接近1更相似)。很容易在距离和相似度指标之间进行交换(假设两者都在distance = 1. - similarity
范围内,是最基本的[0,1]
)。
至于你的相似性示例 similarity[i,j] = 0.9
对我没有任何意义。 i and k
的相似之处是什么?你使用哪个公式来获得0.9
?如果你澄清它,我可以为你提供一个基于numpy的表示。
对于直接相似性指标,have a look here。如果符合您的需求,您可以使用其中任何一种。它解释了每个测量的内容。
rbf_kernel
的示例用法。
data = df['score']
similarity = rbf_kernel(data.reshape(-1, 1), gamma=1.) # Try different values of gamma
gamma
此处的行为类似于阈值 gamma
的不同值会使相似更少或更多便宜