aoi学院

Aisaka's Blog, School of Aoi, Aisaka University

余弦相似度与余弦距离

余弦相似度

即计算两个向量间的夹角的余弦值,计算公式如下:

根据线性代数的知识,余弦是通过点积和模长来计算。
在向量中,模长需要L2范数计算。

余弦相似度越接近1,证明越相似(cosθ->1,θ->0)。所以,余弦相似度的取值范围是[-1, 1]。


余弦距离

余弦距离并不是严格意义上的距离,但根据数学上的定义,在一个集合中,如果一对元素可确定一个实数,使得非负性,对称性和三角不等式成立,则该实数可称为这对元素之间的距离。

余弦距离就是用1减去这个获得的余弦相似度。余弦距离的取值范围为[0,2]。

若对向量进行归一化,则

代码举例:

1
2
3
4
5
6
7
8
9
"""
a : array_like
An NxM matrix of N samples of dimensionality M.
b : array_like
An LxM matrix of L samples of dimensionality M.
"""
a = np.asarray(a) / np.linalg.norm(a, axis=1, keepdims=True) # 二范数,保持维度
b = np.asarray(b) / np.linalg.norm(b, axis=1, keepdims=True)
cos_dist = 1. - np.dot(a, b.T) # 余弦距离

参考资料

https://www.jianshu.com/p/3d1ab4a9541d
https://zhuanlan.zhihu.com/p/84643138
https://www.cnblogs.com/abella/p/11170592.html
https://blog.csdn.net/geekmanong/article/details/51344732

作者:Blureyes
链接:https://www.jianshu.com/p/3d1ab4a9541d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。