推荐算法之基于物品的协同过滤

基于物品协同过滤( item-based collaborative filtering )算法是此前业界应用较多的算法。无论是亚马逊网,还是Netflix 、Hulu 、 YouTube ,其推荐算法的基础都是该算法。为行文方便,下文以英文简称ItemCF表示。本文将从其基础算法讲起,一步步进行改进并基于MovieLens 数据集给出代码实现,带你领略这一经典算法的美。

1.基本原理

前面我们简单讲解了一下基于用户的协同过滤推荐(UserCF),并且给出了实现代码。还不了解的朋友可以转到链接----推荐算法之基于用户的协同过滤。但是我们也讲到该算法存在一些缺点,首先,随着网站的用户数目越来越大,计算用户兴趣相似度矩阵将越来越困难,其运算时间复杂度和空间复杂度的增长和用户数的增长近似于平方关系。其次,基于用户的协同过滤很难对推荐结果作出解释。因此,著名的电子商务公司亚马逊提出了另一个算法——ItemCF 。

ItemCF 给用户推荐那些和他们之前喜欢的物品相似的物品。比如,该算法会因为你购买过《统计学习方法》而给你推荐《机器学习》。不过,ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度该算法认为,物品 A 和物品 B 具有很大的相似度是因为喜欢物品 A 的用户大都也喜欢物品B

基于物品的协同过滤算法可以利用用户的历史行为给推荐结果提供推荐解释,比如给用户推荐《迷迭香》的解释可以是因为用户之前喜欢《她的睫毛》。

基于物品的协同过滤算法主要分为两步

计算物品之间的相似度

根据物品的相似度和用户的历史行为给用户生成推荐列表

购买了该商品的用户也经常购买的其他商品这句话的定义出发,我们可以用下面的公式定义物品的相似度:
\[ w_{ij}=\frac{|N(i) \bigcap N(j)|}{|N(i)|} \]
这里,分母\(|N(i)|\)是喜欢物品i的用户数,而分子\(N(i) \bigcap N(j)\)是同时喜欢物品i和物品j的用户数。因此,上述公式也可以理解为喜欢物品i的用户中有多少比例的用户也喜欢物品j。

上述公式虽然看起来很有道理,但是却存在一个问题。如果物品 j 很热门,很多人都喜欢,那么 \(w_{ij}\)就会很大,接近 1 。因此,该公式会造成任何物品都会和热门的物品有很大的相似度,这对于致力于挖掘长尾信息的推荐系统来说显然不是一个好的特性。为了避免推荐出热门的物品,可以用下面的公式:
\[ w_{ij}=\frac{|N(i) \bigcap N(j)|}{\sqrt{|N(i)||N(j)|}} \]
这个公式惩罚了物品 j 的权重,因此减轻了热门物品会和很多物品相似的可能性。

从上面的定义可以看到,在协同过滤中两个物品产生相似度是因为它们共同被很多用户喜欢,也就是说每个用户都可以通过他们的历史兴趣列表给物品贡献相似度。这里面蕴涵着一个假设就是每个用户的兴趣都局限在某几个方面,因此如果两个物品属于一个用户的兴趣列表,那么这两个物品可能就属于有限的几个领域,而如果两个物品属于很多用户的兴趣列表,那么它们就可能属于同一个领域,因而有很大的相似度

和UserCF算法类似,不过这里是建立用户-物品倒排表,然后计算物品的相似度。ItemCF通过如下公式计算用户u对一个物品j的兴趣:
\[ p_{uj}=\sum_{i \in N(u) \bigcap S(j,K)}{W_{ji}r_{ui}} \]
本文基于MovieLens数据集(显性反馈数据集)实现了该算法,地址详见:ItemCF算法实现

2.算法改进 2.1 引入IUF参数软性惩罚活跃用户

在前面的篇幅中可以看到,在ItemCF中两个物品产生相似度是因为它们共同出现在很多用户的兴趣列表中。换句话说,每个用户的兴趣列表都对物品的相似度产生贡献。但是,在现实生活中并不是每个用户的贡献都相同

于是John S. Breese在论文中提出了一个称为 \(IUF\)(Inverse User Frequence ),即用户活跃度对数的
倒数的参数,他也认为活跃用户对物品相似度的贡献应该小于不活跃的用户,他提出应该增加 IUF
参数来修正物品相似度的计算公式:
\[ w_{ij}=\frac{\sum_{u \in N(i) \bigcap N(j)}{\frac{1}{\log1 + |N(u)|}}}{\sqrt{|N(i)||N(j)|}} \]
当然,上面的公式只是对活跃用户做了一种软性的惩罚,但对于很多过于活跃的用户,比如上面那位买了当当网 80% 图书的用户,为了避免相似度矩阵过于稠密,我们在实际计算中一般直接忽略他的兴趣列表,而不将其纳入到相似度计算的数据集中

2.2 归一化相似矩阵

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgsgw.html