余弦相似度 ??余弦相似度:用向量空间中两向量夹角的余弦值作为衡量两个个体之间差异的大小。余弦值越接近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 10101未知
# 用户B 011110
# 用户C 101001
import mathdef 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)——余弦相似度】结果展示:
文章图片
推荐阅读
- 推荐算法|基于内容的推荐算法
- TensorFlow2|深度学习之卷积神经网络(8)BatchNorm层
- python|Python基于协同过滤算法的电影推荐系统设计与实现
- 程序员数学|程序员的需要掌握的数学知识
- c语言|c语言————字符串的逆序旋转
- C语言|C语言——字符串旋转问题
- CPSC 319图数结构
- 神经网络|目标检测算法YOLOv4详解
- python|经典非局部均值滤波(NLM)算法python实现(1)