推荐系统中的协同过滤算法:原理、实现与应用
协同过滤(Collaborative Filtering)是推荐系统中最经典且应用广泛的算法之一,其核心思想是利用用户群体的行为数据(如评分、点击、购买),发现用户或物品之间的相似性,进而为用户推荐其可能感兴趣的物品。与基于内容的推荐不同,协同过滤无需依赖物品的具体特征(如电影的类型、书籍的作者),仅通过用户行为的 “协同” 模式即可生成推荐。
协同过滤的核心思想与分类
协同过滤的核心假设是:
如果用户 A 和用户 B 在过去对某些物品有相似的偏好,那么用户 A 未来可能喜欢用户 B 喜欢的其他物品;反之亦然。
根据数据利用方式的不同,协同过滤可分为两大主流类型:
- 基于用户的协同过滤(User-Based Collaborative Filtering) 找到与目标用户兴趣相似的 “邻居用户”,将邻居用户喜欢的物品推荐给目标用户。
- 基于物品的协同过滤(Item-Based Collaborative Filtering) 计算物品之间的相似度(如 “喜欢物品 A 的用户也喜欢物品 B”),为用户推荐与其之前喜欢的物品相似的其他物品。
基于用户的协同过滤(User-Based CF)
算法流程
步骤 1:构建用户 - 物品评分矩阵
假设存在用户集合U = {u1, u2, ..., um}
和物品集合I = {i1, i2, ..., in}
,构建一个m×n
的评分矩阵R
,其中R[u][i]
表示用户u
对物品i
的评分(若未评分则为 0 或空)。
示例矩阵(行:用户,列:物品,值:评分 1-5):
用户 \ 物品 |
电影 A |
电影 B |
电影 C |
电影 D |
电影 E |
用户 1 |
5 |
4 |
0 |
0 |
1 |
用户 2 |
0 |
0 |
5 |
4 |
0 |
用户 3 |
5 |
0 |
0 |
0 |
1 |
用户 4 |
0 |
0 |
4 |
5 |
0 |
步骤 2:计算用户相似度
衡量两个用户u
和v
的相似度,常用方法:
皮尔逊相关系数(Pearson Correlation):衡量两个用户评分趋势的一致性(取值范围 [-1,1],越接近 1 越相似)。 公式:
$\text{sim}(u,v) = \frac{\sum{i \in I{uv}} (R[u][i] - \bar{R}[u]) \cdot (R[v][i] - \bar{R}[v])}{\sqrt{\sum{i \in I{uv}} (R[u][i] - \bar{R}[u])^2} \cdot \sqrt{\sum{i \in I{uv}} (R[v][i] - \bar{R}[v])^2}}$
其中,I_uv
是用户u
和v
共同评分的物品集合,\bar{R}[u]
是用户u
的平均评分。
余弦相似度(Cosine Similarity):将用户的评分向量视为高维空间中的向量,相似度为向量夹角的余弦值(取值范围 [0,1])。 公式:
$\text{sim}(u,v) = \frac{\sum{i \in I} R[u][i] \cdot R[v][i]}{\sqrt{\sum{i \in I} R[u][i]^2} \cdot \sqrt{\sum_{i \in I} R[v][i]^2}}$