余弦相似度
即计算两个向量间的夹角的余弦值,计算公式如下:
根据线性代数的知识,余弦是通过点积和模长来计算。
在向量中,模长需要L2范数计算。
余弦相似度越接近1,证明越相似(cosθ->1,θ->0)。所以,余弦相似度的取值范围是[-1,1]。
余弦距离
余弦距离并不是严格意义上的距离,但根据数学上的定义,在一个集合中,如果一对元素可确定一个实数,使得非负性,对称性和三角不等式成立,则该实数可称为这对元素之间的距离。
余弦距离就是用1减去这个获得的余弦相似度。余弦距离的取值范围为[0,2]。
若对向量进行归一化,则
代码举例:
"""
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) # 余弦距离
参考:
余弦距离与欧式距离;
余弦相似度和余弦距离的推导与理解;
L2范数归一化
网友评论