一、UserCF:
(一)算法步骤
1.计算用户两两间的相似度,相似度度量方法包括:
Jaccard公式:Wuv=[两用户正反馈物品交集数]/[两用户正反馈物品并集数]
余弦相似度:Wuv=[两用户正反馈物品交集数]/sqrt(u用户正反馈物品数*v用户正反馈物品数)
计算用户两两相似度的技巧:对每个物品保存该物品产生行为的用户,计算用户相似度时依次扫描每个物品的倒排表,对每对用户的交集数+1。
2.推荐和用户最相似的K个用户的物品。用户u对物品i的感兴趣程度:
P(u,i)=sum(w(uv)*r(vi))(w(uv)为用户间相似度,r(vi)为相似用户对物品的兴趣程度)。
3.用户相似度计算的改进:
两个用户对冷门物品采取过相同行为更能说明其相似度高,故在相似度计算中对热门物品进行惩罚,改进余弦相似度公式如下:
Wuv=【sum(1/[log(1+|N(i)|)])】/【sqrt(|N(u)|*|N(v)|)】,其中|N(i)|为u和v都感兴趣的物品中i物品的流行度。(记此算法为User-IIF)
(二)时间上下文UserCF算法
得到时间信息后,改进的余弦相似度计算公式为:
Sim(u,v)=[sum(1/(1+alfa*|t(ui)-t(vi)|))]/[sqrt(|N(u)|*|N(v)|)],alfa是时间衰减函数,系统用户兴趣变化快则取较大。
P(u,i)=sum[sim(u,v)*r(vi)*(1/(1+alfa*|t0-tvi|))],t0为当前时刻。
(三)基于邻域的社会化推荐算法
1.用户u对物品i的兴趣为
p(u,i)=sum(各用户与用户u的兴趣相似度*社交熟悉度*各用户对物品的兴趣)
(1)兴趣相似度计算同上
(2)社交熟悉度=好友交集数/好友并集数
(3)对物品的兴趣,喜欢为1,不喜欢为0。
2.相较于一般的协同过滤,添加了社会化的推荐系统让用户的信任度、满意度更高。
二、ItemCF:
(一)算法步骤
1.计算物品之间相似度:
Jaccard公式:Wuv=[两物品使用过的用户交集数]/[两物品使用过的用户并集数]
余弦相似度:Wuv=[两物品使用过的用户交集数]/sqrt(i物品正反馈用户数*u物品正反馈用户数)
计算用户两两相似度的技巧:对每个用户保存该用户产生行为的物品,计算物品相似度时依次扫描每个用户的倒排表,对每对物品的交集数+1。
2.推荐和用户过去行为物品最相似的物品。用户u对物品i的感兴趣程度:
P(u,j)=sum(w(ji)*r(ui))(w(ji)为物品间相似度,r(ui)为用户对历史物品的兴趣程度)。
3.物品相似度计算的改进:
对活跃用户要进行惩罚,因为他们可能什么物品都有行为,改进公式如下:
Wuv=【sum(1/[log(1+|N(u)|)])】/【sqrt(|N(i)|*|N(j)|)】,其中|N(u)|为对i和j物品都感兴趣了的用户中u用户的有行为的物品数。(记此算法为Item-IIF)
4.物品相似度的归一化
ItemCF中的相似度矩阵归一化可以提高推荐准确率。用Wij=Wij/不同的j中最大的Wij。
(二)UserCF与ItemCF比较
1.UserCF更社会化,反映用户所在的兴趣群体中物品的热门程度;ItemCF更个性化,反映用户自己的兴趣传承。
2.技术角度考量,物品更新快的系统适合用UserCF,用户更新更快的系统适合用ItemCF。
3.为什么原始ItemCF算法覆盖率和新颖性都不高?
(1)哈利波特问题:由于哈利波特太热门,导致与哪个书籍的相似度计算出来都高。
(2)解决方法:将物品余弦相似度公式改为:Wij=[两物品使用过的用户交集数]/[用来比较的物品流行度]^(1-alfa)*被计算的物品流行度^alfa]
其中alfa[0.5,1]越大对计算热门物品j与其他物品的相似度时惩罚就越重。大于0.5时准确度下降但覆盖率和新颖度提升。
其他解决方法:两个不同领域的热门物品相似度高,需要基于内容来改良。
(三)时间上下文ItemCF算法
得到时间信息后,改进的余弦相似度计算公式为:
Sim(i,j)=[sum(1/(1+alfa*|t(ui)-t(uj)|))]/[sqrt(|N(i)|*|N(j)|)],alfa是时间衰减函数,系统用户兴趣变化快则取较大。
(四)基于位置信息的ItemCF推荐(LARS-U算法)
1.使用用户的位置信息:对于中国江苏南京的用户,先基于ItemCF生成推荐列表,再根据中国用户的行为ItemCF,再基于江苏ItemCF,再基于南京ItemCF,最后将四个列表按一定权重线性相加。
2.使用物品和用户的位置信息:最终兴趣(u,i)=ItemCF算出的兴趣-基于位置的惩罚(u,i)。