小编典典

在一组向量中找到最佳的余弦相似度

algorithm

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

直接的解决方案将需要O(n 2 m)时间。

有没有更好的解决方案?

更新

余弦相似度/距离和三角形方程式启发我,我可以用“弦长”代替“余弦相似度”,这会降低精度,但会大大提高速度。(有许多解决公制空间中最近邻居的解决方案,例如ANN


阅读 290

收藏
2020-07-28

共1个答案

小编典典

余弦相似度sim(a,b)与欧几里得距离
|a - b|

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

用于单位向量ab

这意味着当以L2范数归一化后,当欧几里得距离最小时,余弦相似度最大,并且问题简化为最接近的一对点问题,可以在O(n
lg n)时间内解决。

2020-07-28