algorithm - 在一组向量中寻找最佳余弦相似度

标签 algorithm math cosine-similarity

我有 n 个向量,每个向量有 m 个元素(实数)。我想找到所有对中余弦相似度最大的对。

直接的解决方案需要 O(n2m) 时间。

有没有更好的解决方案?

更新

Cosine similarity / distance and triangle equation启发我可以用“弦长”代替“余弦相似度” 失去精度但大大提高了速度。 (有许多解决度量空间中最近邻的现有解决方案,如ANN)

最佳答案

余弦相似度 sim(a,b)related to Euclidean distance |a - b| 作者:

|a - b|² = 2(1 - sim(a,b))

对于单位向量 ab

这意味着欧几里得距离最小时余弦相似度最大,经L2范数归一化后,问题简化为closest pair of points problem , 可以在 O(n lg n) 时间内解决。

关于algorithm - 在一组向量中寻找最佳余弦相似度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13661383/

相关文章:

algorithm - 部分可观察、无传感器环境的示例

algorithm - 动态规划帮助 : Binary Tree Cost Edge

python - 通过在 python 中使用余弦相似度,返回与查询文档相比最相似的文档

调整网络边缘权重的算法(最好在相关的 Matlab 工具箱上推荐)

algorithm - 查找出现一次的元素

math - 原点变化前后基于相机旋转/平移确定点位置

math - 如何获得sklearn中逻辑回归模型的对数似然?

java - 子弹没有射出枪

python - 使用 tensorflow 获取负余弦距离