(二)利用用户行为数据 -- 2 基于邻域的算法 (2)

2.2 基于物品的协同过滤算法

基于物品的协同过滤(item-based collaborative filtering) 算法是目前业界应用最多的算法。

2.2.1 基础算法

基于用户的协同过滤算法,主要存在以下两个缺点:
(1) 随着网站的用户数目越来越大,计算用户兴趣相似度矩阵将越来越困难,其运算时间复杂度和空
间复杂度的增长和用户数的增长近似于平方关系。
(2) 基于用户的协同过滤很难对推荐结果作出解释。

由此,提出了基于物品的协同过滤算法(简称ItemCF) ,即,给用户推荐那些和他们之前喜欢的物品相似的物品。

ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。
该算法认为:物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。

主要包括两个步骤:
(1) 计算物品之间的相似度。
(2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。


物品的相似度

定义物品的相似度,有简单公式:

W i j = ∣ N ( i ) ∩ N ( j ) ∣ ∣ N ( i ) ∣ W_{ij}=\frac {|N(i) \cap N(j)|}{|N(i)|} Wij=N(i)N(i)N(j)

其中,分母 ∣ N ( i ) ∣ |N(i)| N(i)是喜欢物品 i i i的用户数,而分子 ∣ N ( i ) ∩ N ( j ) ∣ |N(i) \cap N(j)| N(i)N(j)是同时喜欢物品 i i i和物品 j j j的用户
数。
因此,上述公式可以理解为喜欢物品 i i i的用户中有多少比例的用户也喜欢物品 j j j

该公式的局限性:
若物品 j j j很热门,那么 W i j W_{ij} Wij会接近1,从而造成任何物品都会和热门的物品有很大的相似度,显然
不利于挖掘长尾信息。

为了避免推荐出热门的物品,有改进公式如下:

W i j = ∣ N ( i ) ∩ N ( j ) ∣ ∣ N ( i ) ∣ ∣ N ( j ) ∣ W_{ij}=\frac {|N(i) \cap N(j)|}{\sqrt{|N(i)| |N(j)|}} Wij=N(i)N(j) N(i)N(j)

该公式惩罚了物品j的权重,因此减轻了热门物品会和很多物品相似的可能性。


ItemCF算法
  • 思想

与UserCF算法类似, 用ItemCF算法计算物品相似度时也可以首先建立用户-物品倒排表(即,对每个用户建立一个包含他喜欢的物品的列表);
然后对于每个用户,将他物品列表中的物品两两在共现矩阵 C C C中加1。


  • 步骤及示例

(1) 计算物品之间的相似度,得到矩阵 W W W

如下图所示:

图中最左边是输入的用户行为记录,每一行代表一个用户感兴趣的物品集合。
然后,对于每个物品集合,将里面的物品两两加一,得到一个矩阵。
之后,将这些矩阵相加得到上面的 C C C矩阵(图中最右边;其中, C [ i ] [ j ] C[i][j] C[i][j]记录了同时喜欢物品 i i i和物品 j j j的用户数)。
最后,将 C C C矩阵归一化可以得到物品之间的余弦相似度矩阵 W W W


(2) 计算用户 u u u对一个物品 j j j的兴趣,公式如下:

p u j = ∑ i ∈ N ( u ) ∩ S ( j , K ) w j i r u i p_{uj}=\sum_{i \in N(u) \cap S(j, K) }w_{ji}r_{ui} puj=iN(u)S(j,K)wjirui

其中, N ( u ) N(u) N(u)是用户喜欢的物品的集合, S ( j , K ) S(j, K) S(j,K)是和物品 i i i最相似的 K K K个物品的集合, w j i w_{ji} wji是物品 j j j i i i的相似度, r u i r_{ui} rui是用户 u u u对物品 i i i的兴趣(对于隐反馈数据集,如果用户 u u u对物品 i i i有过行为,即可令 r u i = 1 r_{ui}=1 rui=1)。

该公式的含义是,和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。


具体计算示例:

其中,1.3为用户对该书的兴趣度,0.7为两书之间的相似度,0.91为最终计算的用户对该书的兴趣度结果。


ItemCF的一个优势就是可以提供推荐解释,即,利用用户历史上喜欢的物品为现在的推荐结果进行解释。


  • 参数

类似地,参数 K K K是ItemCF的一个重要参数,它的调整对推荐算法的各种指标都会产生一定的影响。

(1) 精确率和召回率
类似地,推荐系统的精度指标(精确率和召回率)并不和参数 K K K成线性关系,需要选择合适的K以获得高精度。

(2) 流行度
与UserCF不同,参数 K K K对ItemCF推荐结果流行度的影响也不是完全正相关的。
随着 K K K的增加,结果流行度会逐渐提高,但当 K K K增加到一定程度,流行度就不会再有明显变化。

(3) 覆盖率
K K K越大则ItemCF推荐结果的覆盖率越低。



2.2.2 用户活跃度对物品相似度的影响

思想:活跃用户对物品相似度的贡献应该小于不活跃的用户。

JohnS.Breese在论文中提出了IUF(Inverse User Frequence)的概念,即,用户活跃度对数的倒数的参数。基于上述思想,他提出应该增加IUF参数来修正物品相似度的计算公式:

W i j = ∑ u ∈   N ( i ) ∩ N ( j ) 1 l o g 1 + ∣ N ( u ) ∣ ∣ N ( i ) ∣ ∣ N ( j ) ∣ W_{ij}=\frac {\sum_{u \in \,N(i) \cap N(j)} \frac {1}{log1+|N(u)|}}{\sqrt{|N(i)| |N(j)|}} Wij=N(i)N(j) uN(i)N(j)log1+N(u)1

注意:
上述公式仅做了一种软性惩罚。对于很多活跃的用户,为了避免相似度矩阵过于稠密,在实际计算中一般直接忽略他的兴趣列表,而不将其纳入到相似度计算的数据集中。



2.2.3 物品相似度的归一化

思想:将ItemCF的相似度矩阵按最大值归一化,可以提高推荐的准确率。

若已经得到了物品相似度矩阵 w w w,可以用如下公式得到归一化之后的相似度:

w i j = w i j m a x j   w i j w_{ij}=\frac {w_{ij}}{\mathop{max}\limits_{j} \,w_{ij}} wij=jmaxwijwij


优点:归一化的好处不仅在于增加推荐的准确度,还可以提高推荐的覆盖率和多样性。


举例说明,一般来说,物品总是属于很多不同的类,每一类中的物品联系比较紧密。

假设物品分为两类——A和B,A类物品之间的相似度为0.5,B类物品之间的相似度为0.6,而A类物品和B类物品之间的相似度是0.2。
此时,若一个用户喜欢了5个A类物品和5个B类物品,用ItemCF给他进行推荐,推荐的就都是B类物品,因为B类物品之间的相似度大;
但若归一化之后,A类物品之间的相似度变成了1,B类物品之间的相似度也是1,那么此时,他的推荐列表中A类物品和B类物品的数目也应该是大致相等的。

由此,相似度的归一化可以提高推荐的多样性。


一般来说,热门的类其类内物品相似度一般比较大。
如果不进行归一化,就会推荐比较热门的类里面的物品,而这些物品也是比较热门的。因此,推荐的覆盖率就比较低。
相反,如果进行相似度的归一化,则可以提高推荐系统的覆盖率。



参考

《推荐系统实践》—— 2.4.2 基于物品的协同过滤算法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值