【问题标题】:cosine_similarity giving different answer for dataframe and subset of dataframecosine_similarity 为数据帧和数据帧的子集给出不同的答案
【发布时间】:2022-01-05 22:55:39
【问题描述】:

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

场景 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更准确。 有人可以帮忙吗?

数据框看起来像这样。

【问题讨论】:

  • 你的df看起来怎么样?
  • i.stack.imgur.com/okwtm.png这就是@Jamjitul的样子
  • 场景一使用索引,场景二使用位置,它们并不总是相同的。
  • @jwzinserl。感谢你的回复。是否可以使用整个数据帧的索引?
  • 你在使用sklearn.metrics.pairwise.cosine_similarity吗?其输出将具有基于整数位置的索引,该索引可能与数据帧中的索引不同。如果您还使用基于整数位置的索引来获取 a 和 b 向量,那么您应该得到相同的结果。 a = df.iloc[5031]b = df.iloc[9365]

标签: python data-science cosine-similarity


【解决方案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]

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 2021-02-02
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 2019-10-28
    • 2018-07-08
    • 1970-01-01
    • 2022-05-21
    相关资源
    最近更新 更多