当前位置:   article > 正文

相似度计算(1)——余弦相似度_余弦相似度算法

余弦相似度算法

余弦相似度

  余弦相似度:用向量空间中两向量夹角的余弦值作为衡量两个个体之间差异的大小。余弦值越接近1,表明两个向量的夹角越接近0度,则两个向量越相似。余弦值越接近0,表明两个向量的夹角越接近180度,则两个向量越不相似。

  如存在向量a=(x1,y1)和向量b=(x2,y2),由几何定义计算内积a·b=|a||b|cosθ,可知:
在这里插入图片描述

  则根据二维向量引向多维向量A(x1,y1,z1…)和B(x2,y2,z2…),其中Ai和Bi为向量中的各个分量。可得:
在这里插入图片描述

  简单举例:根据一下三个用户对不同物品的偏好记录,计算三个用户间的相似度。
在这里插入图片描述
计算用户AB之间的余弦相似度为:
在这里插入图片描述
计算用户AC之间的余弦相似度为:
在这里插入图片描述
计算用户BC之间的余弦相似度为:
(在这里插入图片描述
  由上述计算结果可知:用户AC之间相似度高,用户AB之间相似度高低,则可以把用户C感兴趣的物品F推荐给用户A。

python代码计算:

#encoding=utf-8
# 余弦相似度计算
# 	    物品A	物品B	物品C	物品D	物品E	物品F
# 用户A	1	    0	    1	    0	    1	    未知
# 用户B	0	    1	    1	    1	    1	    0
# 用户C	1	    0	    1	    0	    0	    1
import math

def CosSimilarity(list1,list2):
    if len(list1)!=len(list2):
        return -1
    else:
        length=len(list1)
    s = sum(list1[i] * list2[i] for i in range(length))
    den1 = math.sqrt(sum([pow(list1[j], 2) for j in range(length)]))
    den2 = math.sqrt(sum([pow(list2[k], 2) for k in range(length)]))
    return s / (den1 * den2)

if __name__ == '__main__':
    vectorA = [1,0,1,0,1]
    vectorB = [0,1,1,1,1]
    vectorC = [1,0,1,0,0]	#其实把这三个向量列表写在一个列表中比较好,那样更像一个矩阵

    cosA_B = CosSimilarity(vectorA,vectorB)
    cosA_C = CosSimilarity(vectorA,vectorC)
    cosB_C = CosSimilarity(vectorB,vectorC)

    print("A和B之间的余弦相似度:",cosA_B)
    print("A和C之间的余弦相似度:",cosA_C)
    print("B和C之间的余弦相似度:",cosB_C)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

结果展示:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/368154
推荐阅读
相关标签
  

闽ICP备14008679号