余弦相似性给出了数据帧和数据帧子集的不同答案



我有下面一段推荐系统的代码,它给出了不同的输出。

场景1:

a = df[df.index == 5031]
b = df[df.index == 9365]
print(cosine_similarity(a,b)) #0.33

场景2:

cosine_sim = cosine_similarity(df)
print(cosine_sim[5031][9365]) #0.25

我认为两种场景的输出应该是相同的。根据数据,我觉得情景1更准确。有人能帮忙吗?

数据帧看起来是这样的。

您正在混合标签索引和基于位置的索引。

在场景1中,通过标签索引获得矢量

# labels 5031 and 9365
a = df[df.index == 5031]
b = df[df.index == 9365]

sklearn.metrics.pairwise.cosine_similarity返回的矩阵对索引标签一无所知。因此,在从矩阵中获取数据之前,您需要知道数据帧中基于位置的索引

idx_a = df.index.get_loc(5031)
idx_b = df.index.get_loc(9365)
cosine_sim[idx_a][idx_b]

最新更新