cosine_similarity 对数据框和数据框的子集给出不同的答案

cosine_similarity giving different answer for dataframe and subset of dataframe

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

场景 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]