美文网首页研究生涯帮助文归档
余弦相似度与余弦距离

余弦相似度与余弦距离

作者: Blureyes | 来源:发表于2020-11-23 10:11 被阅读0次

    余弦相似度

    即计算两个向量间的夹角的余弦值,计算公式如下:
    similarity=\cos(\theta)=\frac{A \cdot B}{||A|| \, ||B||}=\frac{\sum_{i=1}^n{A_iB_i}}{\sqrt{\sum_{i=1}^nA_i^2}\sqrt{\sum_{i=1}^nB_i^2}} \\ A_i和B_i分别是向量A和B的分量

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

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

    余弦距离

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

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

    若对向量进行归一化,则dist(A,B) = 1-\frac{A \cdot B}{1×1} = 1 - A \cdot B

    代码举例:

    """
    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范数归一化

    相关文章

      网友评论

        本文标题:余弦相似度与余弦距离

        本文链接:https://www.haomeiwen.com/subject/qqsmiktx.html