RecSYS 推荐系统协同过滤算法详解

250 阅读3分钟

代码实现

github.com/Myolive-Lin…

协同过滤(Collaborative Filtering, CF)是一种广泛应用于推荐系统中的算法,主要通过分析用户之间或物品之间的相似性来进行推荐。协同过滤可以分为基于用户(User-based)和基于物品(Item-based)两种类型。本文将详细介绍基于用户的协同过滤算法(UserCF)的原理及实现方法,并分析其优缺点,最后讨论ItemCF的应用。

2.2.2 用户相似度计算

在协同过滤算法中,计算用户相似度是至关重要的一步。通过计算用户之间的相似度,可以找出与目标用户兴趣相似的其他用户,从而为目标用户推荐合适的物品。通常,我们通过计算用户向量之间的相似度来衡量用户之间的相似性。

1. 余弦相似度(Cosine Similarity)

余弦相似度是最常用的用户相似度计算方法之一。其核心思想是通过计算两个用户向量之间的夹角大小来衡量相似度,夹角越小,相似度越高。余弦相似度的公式如下:

sim(i,j)=cos(i,j)=ijij\begin{aligned} \text{sim}(i,j) &= \cos(i,j) &= \frac{i \cdot j}{||i|| \cdot ||j||} \end{aligned}

2. 皮尔逊相关系数(Pearson Correlation Coefficient)

皮尔逊相关系数通过使用用户的平均评分来修正各自评分的偏差,从而减少评分偏置的影响。其公式如下:

Sim(i,j)=pP(Ri,pRiˉ)(Rj,pRjˉ)pP(Ri,pRiˉ)2pP(Rj,pRjˉ)2\begin{aligned} \text{Sim}(i, j) &= \frac{\sum_{p \in P} (R_{i,p} - \bar{R_i})(R_{j,p} - \bar{R_j})}{\sqrt{\sum_{p \in P} (R_{i,p} - \bar{R_{i}})^2} \cdot \sqrt{\sum_{p \in P} (R_{j,p} - \bar{R_{j}})^2}} \end{aligned}

其中,Ri,p代表用户i对物品p的评分。Ri\overline{R_i}代表用户i对所有物品的平均评分,P代表所有物品的集合。

3. 基于物品平均分的皮尔逊相关系数

在皮尔逊相关系数的基础上,可以通过引入物品的平均评分来进一步减少物品评分偏置的影响。其公式如下:

Sim(i,j)=pP(Ri,pRˉp)(Rj,pRˉp)pP(Ri,pRˉp)2pP(Rj,pRˉp)2\begin{aligned} \text{Sim}(i, j) &= \frac{\sum_{p \in P} (R_{i,p} - \bar{R}_p)(R_{j,p} - \bar{R}_p)}{\sqrt{\sum_{p \in P} (R_{i,p} - \bar{R}_p)^2} \cdot \sqrt{\sum_{p \in P} (R_{j,p} - \bar{R}_p)^2}} \end{aligned}

其中,( Rˉp\bar{R}_{p} ) 代表物品p得到所有评分的平均分。

2.2.3 最终结果的排序

在计算出与目标用户相似的 Top n 用户之后,接下来的任务是根据这些相似用户的评分来预测目标用户对物品的评分。最常用的方法是通过加权平均计算预测评分,公式如下:

R^u,p=sSwu,sRs,psSwu,s\begin{aligned} \hat{R}_{u,p} &= \frac{\sum_{s \in S} |w_{u,s}| \cdot R_{s,p}}{\sum_{s \in S} |w_{u,s}|} \end{aligned}

其中,wu,sw_{u,s} 是用户 uu 和用户 ss 之间的相似度,Rs,pR_{s,p} 是用户 ss 对物品 pp 的评分,SS 是与目标用户相似的 Top n 用户集合。

根据上述预测评分,最终的推荐列表可以按预测评分从高到低进行排序,完成推荐过程。

2.2.4 UserCF的缺点与改进

尽管基于用户的协同过滤算法(UserCF)在很多推荐系统中表现良好,但它也存在一些明显的缺点,主要包括以下两点:

  1. 存储开销大:随着用户数量的增加,用户相似度矩阵的存储开销呈现平方级增长。对于大规模的推荐系统,存储和计算开销成为瓶颈。
  2. 数据稀疏性问题:许多用户只有少量评分数据,导致相似用户的计算不准确。这在低频应用(如酒店预订、大件商品购买等)中尤为严重。

2.2.5 ItemCF算法

为了解决UserCF的缺点,很多推荐系统采用了基于物品的协同过滤(ItemCF)。ItemCF通过计算物品之间的相似度来进行推荐。其具体步骤如下:

  1. 基于用户历史数据构建一个m×n 的共现矩阵,其中 为用户数,n 为物品数。
  2. 计算共现矩阵中物品列向量之间的相似度,得到一个 n×n 的物品相似度矩阵。
  3. 获取用户历史行为中的正反馈物品列表。
  4. 对于目标用户,利用物品相似度矩阵找到与目标用户正反馈物品相似的 Top K 个物品。
  5. 根据物品相似度和评分对物品进行加权排序,最终生成推荐列表。

如对于这个矩阵可以计算出用户相似度如下

[34244122243254135513403154300221]\begin{bmatrix} 3 & 4 & 2 & 4 & 4 & 1 & 2 & 2 \\ 2 & 4 & 3 & 2 & 5 & 4 & 1 & 3 \\ 5 & 5 & 1 & 3 & 4 & 0 & 3 & 1 \\ 5 & 4 & 3 & 0 & 0 & 2 & 2 & 1 \end{bmatrix}

image.png

公式如下:

Ru,p=hH(wp,hRu,h)R_{u,p} = \sum_{h \in H} (w_{p,h} \cdot R_{u,h})

其中,H是目标用户的正反馈物品集合,(wp,hw_{p,h}) 是物品p与物品h的物品相似度Ru,hR_{u,h} 是用户u对物品h的已有评分。

ItemCF的一个优势是,它不依赖于用户相似度矩阵,而是基于物品的相似性来推荐。这使得它适用于用户历史行为较为稳定的场景,如电子商务(例如Amazon)和视频推荐(例如Netflix)。

2.2.6 UserCF与ItemCF的应用场景

  1. UserCF:由于基于用户相似度进行推荐,UserCF适用于那些用户兴趣具有社交特性的场景。例如,新闻推荐系统可以通过分析与目标用户兴趣相似的用户的动态来发现热点新闻,从而推荐给目标用户。
  2. ItemCF:适用于兴趣较为稳定的场景,如电商和视频推荐。用户在一定时间内会集中关注某一类物品或内容,此时通过物品相似度推荐相关物品更加符合用户的兴趣。

结语

协同过滤算法是推荐系统中的核心技术,通过对用户或物品相似度的计算,为用户提供个性化的推荐。尽管UserCF和ItemCF各自存在一些局限性,但它们在实际应用中仍然是最为常见和有效的推荐算法之一。随着技术的发展,针对这些缺点的改进算法不断涌现,为更精确的推荐系统奠定了基础。

Reference

王喆 《深度学习推荐系统》