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

hs3*_*180 9 algorithm math cosine-similarity

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

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

有没有更好的解决方案?

更新

余弦相似度/距离和三角方程激励我,我可以用"弦长"代替"余弦相似度",这会损失精度,但会大大提高速度.(有很多现有解决方案解决度量空间中的最近邻,如ANN)

Fre*_*Foo 13

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

|a - b|² = 2(1 - sim(a,b))
Run Code Online (Sandbox Code Playgroud)

单位向量ab.

这意味着当欧几里德距离在通过L2范数归一化后最小时,余弦相似性最大,并且问题减少到最接近的点对问题,这可以在O(n lg n)时间内求解.