4.3 基于标签的推荐系统
4.3.1 实验设置
P105 计算物品i和j的余弦相似度:
程序实现:
#P105 物品i和j的余弦相似度计算
import math
#item_tags[i][b]是对物品i打标签b的次数
def CosineSim(item_tags,i,j):
ret = 0 #物品i和物品j的相似度
for b,wib in item_tags[i].items():#b是物品,wib = {'标签名称':次数}
if b in item_tags[j].keys():
ret += wib * item_tags[j][b] #计算两个向量公共标签对应相乘的乘积
ni = 0 #物品i的标签向量的模
nj = 0 #物品j的标签向量的模
for b, w in item_tags[i].items():
ni += w * w #计算物品i的标签向量的模(还没有开根号)
for b, w in item_tags[j].items():
nj += w * w
if ret == 0:
return 0
return ret / math.sqrt(ni * nj)
item_tags = {
'i': {'a': 1, 'b': 2, 'c': 3, 'd': 4},
'j': {'a': 2, 'b': 4, 'd': 1},
'k': {'b': 4, 'c': 1, 'd': 5}
}
i = 'i'
j = 'j'
cosineSim = CosineSim(item_tags,i,j)
print(cosineSim)
执行结果:
0.5577733510227171