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

余弦相似度

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

如存在向量a=(x1,y1)和向量b=(x2,y2),由几何定义计算内积a·b=|a||b|cosθ,可知:
相似度计算(1)——余弦相似度

则根据二维向量引向多维向量A(x1,y1,z1…)和B(x2,y2,z2…),其中Ai和Bi为向量中的各个分量。可得:
相似度计算(1)——余弦相似度

简单例子:根据三个用户对不同物品的偏好记录,计算三个用户之间的相似度。
相似度计算(1)——余弦相似度
计算用户AB之间的余弦相似度为:
相似度计算(1)——余弦相似度
计算用户AC之间的余弦相似度为:
相似度计算(1)——余弦相似度
计算用户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)——余弦相似度

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年3月18日 下午12:24
下一篇 2022年3月18日 下午12:38

相关推荐