Usercf&User-IIF基于领域的算法-基于用户的协同过滤算法【usercf】

user collaborative filtering
1、步骤
(1)找到和目标用户兴趣相似的用户集合
(2)找到这个集合中用户喜欢的,但目标用户没有听说过的物品推荐给目标用户。
2、详细内容
对于步骤(1)中的关键:计算两个用户的兴趣相似度。
相似度可以根据两个用户的感兴趣的相交列表余弦相似度计算而来,但当数据量大时时间复杂度太高,非常耗时。优化的方法:
A、首先建立物品到用户的倒排表。(因为数据集都是key是userid,value是用户的行为list,现在创建的倒排表是key是docid,那value是userid list)
B、遍历倒排表创建稀疏矩阵。C(U,V)的值=产生联系的物品个数。
C、根据用户行为表可知用户A没有产生过行为的物品,因此可计算用户A对没有产生过行为的物品的感兴趣度p(u,i),方法是:求用户u对物品i感兴趣程度,S(U,K)表示取和用户U最相近的K个用户,计算相似用户的物品list,对于用户u来说感兴趣程度。
这样usercf模型来说,只有一个重要参数是K,重点是取topk的相似用户个数。通过调整k计算Usercf的性能指标【准确率、召回率、覆盖率、流行度】
经过实验,当K越大时,由于供分析的用户群体越大,那么推荐出来的流行度更高,流行度高那么说明物品越热门,则覆盖率越低。
改进:
原因:若两个用户都购买了《新华词典》不能说明两个用户的兴趣相似,但如果两个用户同时购买了一本冷门的书,那很大可能上说明两个用户的兴趣是相似的。但上述根据余弦相似度计算相似度的方法但简单粗暴,因此是优化的原因。
优化点: 根据用户行为计算用户的兴趣相似度,即对用户u和用户v共同兴趣列表中热门物品对他们相似度的影响做出惩罚,意思就是削弱热门物品对相似度计算的权重。【John S. Breese的论文公示,其实就是1/log(1+N(i)】乘上余弦相似度计算公式的系数,这个公式记为User-IIF算法。
实验验证改进后的算法效果:
验证方法呢,就是和优化前用同样的方法,步骤,同样的K,仅仅是计算兴趣相似度的公式不一样,同样比较推荐系统性能指标【准确率、召回率、覆盖率、流行度】这4个指标(根据概念都是百分比哈)。

你可能感兴趣的:(Usercf&User-IIF基于领域的算法-基于用户的协同过滤算法【usercf】)