总体思路:
1.利用余弦相似度对两两用户计算相似度
1.1 建立物品-用户倒排表
左半部分为训练数据格式,ABCD等是用户,abc等是对应用户喜欢的物品
右半部分物品-用户倒排表,如对于物品a,喜欢它的有用户A和B
1.2 建立用户相似度矩阵
利用物品-用户倒排表,构建用户相似度矩阵,其中的值,如 matrix[A][B]表示用户A和用户B共同喜欢的电影的数量。
1.3 计算用户相似度
遍历用户相似度矩阵中所有的两两用户,根据两两用户共同喜欢的电影的数量,计算用户相似度
计算用户相似度的公式如下:
其中表示用户u与v的相似度,作为matrix[u][v]的值,
N(u)表示用户u增有过正反馈的物品集合,N(u)表示用户u增有过正反馈的物品集合。
例如:
或使用改进的用户相似度计算公式:
该公式惩罚了用户u和v共同喜欢的物品中热门物品对他们相似度的影响,以图书为例,如果两个用户都曾经买过《新华字典》,这丝毫不能说明他们的兴趣相似,因为绝大多数中国人小时候都买过《新华字典》。但如果两个用户都买过《数据挖掘导论》,那可以认为他们的兴趣比较相似,因为只有研究数据挖掘的人才会买这本书。换句话说,两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。
i表示用户u和用户v都有过正反馈的物品集合,N(i)表示对物品i有过正反馈的用户数
即分子部分表示 “用户u和v有正反馈的物品数”
2. 针对目标用户u,找到其最相似的K个用户,产生N个推荐
K表示与用户u兴趣相似的用户个数,N表示为用户u推荐的物品数
首先,对用户u,在用户相似度中找到与其相似度最高的K个用户
利用如下的公式计算用户u对物品i的感兴趣程度p(u, i):
其中,S(u, k)包含和用户u兴趣最接近的K个用户,