基于邻域的算法包括基于用户的协同过滤算法和基于物品的协同过滤算法。
基于用户的协同过滤算法:给用户推荐和他兴趣相似的其他用户喜欢的物品。
基于物品的协同过滤算法:给用户推荐和他之前喜欢的物品相似的物品。
基于用户的协同过滤算法
该算法主要分为两个步骤:
1. 找到和目标用户兴趣相似的其他用户集合
2. 找到这个集合中用户喜欢的且目标用户没有见过的物品推荐给目标用户
步骤1就是计算两个用户的相似度,即通过他们行为的相似度计算兴趣相似度,假设两个用户
u
和
v
,则可以通过Jaccard系数计算相似度:
wuv=|N(u)∩N(v)||N(u)∪N(v)|
也可以计算余弦相似度:
wuv=|N(u)∩N(v)||N(u)||N(v)|−−−−−−−−−−√
其中,
N(u),N(v)
为用户
u,v
有过正反馈行为的物品集合。
得到用户相似度后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的物品。
用户
u
对物品
i
的感兴趣程度为:
p(u,i)=Σv∈S(u,K)∩N(i)wuvrvi
其中,
S(u,K)
包含和用户
u
兴趣最接近的
K
个用户,
N(i)
为对物品
i
有过行为的用户集合,
rvi
为用户
v
对物品
i
的兴趣。
基于物品的协同过滤算法
算法分为两个步骤:
1. 计算物品之间的相似度
2. 根据物品相似度和用户的历史行为给用户生成推荐列表
物品相似度的定义:
wij=|N(i)∩N(j)||N(i)|
公式可以理解为喜欢物品
i
的用户有多少比例喜欢物品
j
。
为了避免推荐热门物品,可使用下述公式:
wij=|N(i)∩N(j)||N(i)||N(j)|−−−−−−−−−−√
这样,对于热门的物品
j
,通过降低权重来进行惩罚。
在得到物品相似度后,ItemCF通过下式计算用户
u
对物品
j
的兴趣:
puj=Σi∈N(u)∩S(j,K)wjirui
其中,
N(u)
为用户
u
喜欢的物品的集合,
S(j,K)
为和物品
j
最相似的
K
个物品的集合,
rui
为用户
u
对物品
i
的兴趣
推荐算法的评测指标
精确度:
Precision=Σu∈U|R(u)∩T(u)|Σu∈U|R(u)|
召回率:
Recall=Σu∈U|R(u)∩T(u)|Σu∈U|T(u)|
覆盖率:
Coverage=|∪u∈UR(u)||I|
其中,
U
为用户集合,
R(u)
为根据用户在训练集上的行为给用户的推荐列表,
T(u)
为用户的真实行为列表,
|I|
为总物品的集合。