Python 计算余弦相似度

作者: 衣介书生 | 来源:发表于2018-01-07 23:23 被阅读3584次

    以下代码用到了 numpy 包。代码实现的功能是计算两个向量之间的余弦相似度。
    我们可以把两个向量想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不同的方向。两条线段之间形成一个夹角,如果夹角为0度,意味着方向相同、线段重合;如果夹角为90度,意味着形成直角,方向完全不相似;如果夹角为180度,意味着方向正好相反。因此,我们可以通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似。

    import numpy as np
    
    
    def cos_sim(vector_a, vector_b):
        """
        计算两个向量之间的余弦相似度
        :param vector_a: 向量 a 
        :param vector_b: 向量 b
        :return: sim
        """
        vector_a = np.mat(vector_a)
        vector_b = np.mat(vector_b)
        num = float(vector_a * vector_b.T)
        denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b)
        cos = num / denom
        sim = 0.5 + 0.5 * cos
        return sim
    

    参考

    关于余弦相似度的解释可以看一下TF-IDF与余弦相似性的应用(二):找出相似文章

    相关文章

      网友评论

      • 别理我这个小可爱:这个老铁也是厉害,import numpy as py。。。。
        衣介书生:@别理我这个小可爱 谢谢提醒:smile: ,好久没在简书写文章了(对 LaTeX 支持不太好),谢谢!
      • 滴定管:你好,你的运行环境是什么?我发现在Python2或者Python3里面下面这句都会报错:
        num = float(vector_a * vector_b.T)
        报错信息:TypeError: only length-1 arrays can be converted to Python scalars
        正确的心法应该是去掉float:
        num= vector_a*vector_b.T
        或者写成numpy形式:
        num = np.matmul(vector_a,vector_b.T)

      本文标题:Python 计算余弦相似度

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