【问题标题】:how to find cosine similarity in a pre-computed matrix with a new vector?如何在具有新向量的预先计算的矩阵中找到余弦相似度?
【发布时间】:2023-03-16 06:59:01
【问题描述】:

我有一个包含 5000 个项目(行)和 2048 个特征(列)的数据框。

我的数据框的形状是 (5000, 2048)。 当我在 sklearn 中使用成对距离计算余弦矩阵时,我得到 (5000,5000) 矩阵。 在这里我可以互相比较。

但是现在如果我有一个新的矢量形状 (1,2048),如何使用 (5000,5000) 找到这个项目与我拥有的早期数据框的余弦相似度 我已经计算过的余弦矩阵?

编辑

PS:我可以将这个新向量附加到我的数据框并再次计算余弦相似度。但是对于大量数据,它会变得很慢。或者还有其他快速准确的距离指标吗?

【问题讨论】:

  • 您不应该将新的(1, 2048) 向量与每个5000 数据行进行比较吗?

标签: python pandas machine-learning scikit-learn computer-vision


【解决方案1】:

初始 (5000,5000) 矩阵对所有 5000 项成对的相似值进行编码(即对称矩阵)。

要在新项目的情况下具有相似性,请连接并制作一个(5001, 2048) 矩阵,然后再次估计相似性以获得(5001,5001)

也就是说,你不能直接使用(5000,5000)预计算矩阵来获得与新(1,2048)向量的相似度。

【讨论】:

  • 我确实尝试过这种方法。我正在为速度而苦苦挣扎。因为我不仅有 5000 件,以后可能还有 100,000 件。我想也许有一种方法可以将预先计算的矩阵与新向量进行比较,而不是附加新向量并再次计算。因为我需要尽快找到类似的项目。对于 5000 件物品,没关系。也许您可以建议一些更快的方法?提前致谢
  • 我也一直在使用它来处理 200.000 个样本,我知道它可能会很慢,但没有其他方法。我使用https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.cosine_similarity.html。如果有帮助,请考虑支持并接受我的回答
【解决方案2】:

因为余弦相似度是对称的。您可以计算与旧数据矩阵的相似性度量,即新样本(1,2048) 和旧矩阵(5000,2048) 之间的相似性,这将为您提供(5000,1) 的向量,您可以将此向量附加到pre 的列维度中- 计算余弦矩阵使其成为(5000,5001),因为您知道新样本与其自身的余弦相似度。您可以将此相似性附加到自身,返回到先前计算的向量中,使其大小为(5001,1),您可以将此向量附加到新余弦矩阵的行维度中,使其成为(5001,5001)

【讨论】:

  • 这与我的回答有何不同?
  • @makis 你计算整个50015001 余弦相似度,我建议只计算新样本与之前的样本。
猜你喜欢
  • 2019-04-22
  • 1970-01-01
  • 2020-12-20
  • 2014-03-25
  • 2016-10-22
  • 2019-04-07
  • 1970-01-01
  • 2019-02-10
  • 2019-05-31
相关资源
最近更新 更多