基于用户的协同过滤算法(User-Based Collaborative Filtering)
字数 2779 2025-11-30 23:17:05
基于用户的协同过滤算法(User-Based Collaborative Filtering)
基于用户的协同过滤是推荐系统中最经典的算法之一,其核心思想是:如果两个用户在过去对很多物品有相似的喜好(比如都给相同的电影打了高分),那么他们在未来也可能对新的物品有相似的喜好。因此,我们可以根据“相似用户”的喜好来为当前用户推荐物品。
算法详解
-
数据表示:用户-物品评分矩阵
首先,我们需要将用户的行为数据数字化。最常用的方式是构建一个用户-物品评分矩阵。- 矩阵结构:矩阵的行代表用户(User),列代表物品(Item)。矩阵中的每一个值
R_ui表示用户u对物品i的评分。评分可以是显式的(如1-5星),也可以是隐式的(如点击、购买,用0/1表示)。 - 示例:假设我们有3个用户(Alice, Bob, Charlie)和4部电影(Movie1, Movie2, Movie3, Movie4)。评分矩阵可能如下所示(
-表示未评分):
- 矩阵结构:矩阵的行代表用户(User),列代表物品(Item)。矩阵中的每一个值
| User / Movie | Movie1 | Movie2 | Movie3 | Movie4 |
|---|---|---|---|---|
| Alice | 5 | 3 | 4 | 4 |
| Bob | 3 | 1 | 2 | 3 |
| Charlie | 4 | 3 | 4 | - |
我们的目标是为 Charlie 预测他对 Movie4 的评分,并决定是否向他推荐。
-
核心步骤一:计算用户之间的相似度
这是算法的关键。我们需要一个量化的指标来衡量任意两个用户之间的“口味”有多像。最常用的方法是余弦相似度(Cosine Similarity) 和皮尔逊相关系数(Pearson Correlation)。这里我们以余弦相似度为例。- 核心思想:将每个用户对所有物品的评分看作一个高维空间中的向量。两个用户向量的夹角越小,说明他们的方向越一致,即越相似。
- 公式:用户
u和用户v的余弦相似度计算公式为:
similarity(u, v) = (u · v) / (||u|| * ||v||)
其中,u · v是向量点积,||u||是向量u的模(长度)。 - 处理缺失值:在实际计算中,我们只考虑两个用户都评过分了的物品集合(记为
I_uv)。 - 计算示例:计算 Alice 和 Charlie 的相似度。
- 他们共同评分的物品是 Movie1, Movie2, Movie3。
- Alice 的评分向量:
a = [5, 3, 4] - Charlie 的评分向量:
c = [4, 3, 4] - 点积
a · c= (5×4) + (3×3) + (4×4) = 20 + 9 + 16 = 45 - Alice 的模
||a||= √(5² + 3² + 4²) = √(25+9+16) = √50 ≈ 7.07 - Charlie 的模
||c||= √(4² + 3² + 4²) = √(16+9+16) = √41 ≈ 6.40 - 相似度
sim(Alice, Charlie)= 45 / (7.07 × 6.40) ≈ 45 / 45.25 ≈ 0.994
同理,我们可以计算出所有用户两两之间的相似度,形成一个相似度矩阵。
-
核心步骤二:寻找“最近邻”
对于目标用户(Charlie),我们根据计算出的相似度,找出与他最相似的 k 个用户。这个用户集合被称为“k-最近邻”(k-Nearest Neighbors, k-NN)。k是一个需要人为设定的超参数。- 操作:对除了 Charlie 自己以外的所有用户,按照与 Charlie 的相似度从高到低排序,取前 k 个。
- 示例:假设 k=2,我们计算出:
sim(Charlie, Alice) = 0.994sim(Charlie, Bob) = 待计算(假设为 0.8)- 那么 Charlie 的最近邻就是 {Alice, Bob}。
-
核心步骤三:生成预测评分
现在我们利用最近邻的评分,来预测目标用户对某个未评分物品的评分。- 公式:最常用的预测公式是加权平均:
Prediction(u, i) = (Σ [sim(u, v) * R_vi]) / Σ |sim(u, v)|
其中,v是遍历所有为目标用户u评过物品i的最近邻用户。R_vi是邻居v对物品i的评分,sim(u, v)是用户u和v的相似度。 - 直观理解:这个公式的意思是,每个邻居的评分都要按其与目标用户的相似度来加权。和你越像的人,他的评分对你预测结果的影响就越大。
- 计算示例:为 Charlie 预测他对 Movie4 的评分。
- Charlie 的最近邻是 {Alice, Bob}。
- Alice 对 Movie4 的评分
R_Alice, M4 = 4,相似度sim(C, A) = 0.994 - Bob 对 Movie4 的评分
R_Bob, M4 = 3,相似度sim(C, B) = 0.8 - 预测评分
P(Charlie, Movie4)= (0.994 × 4 + 0.8 × 3) / (0.994 + 0.8) = (3.976 + 2.4) / 1.794 ≈ 6.376 / 1.794 ≈ 3.55
- 公式:最常用的预测公式是加权平均:
-
最终步骤:生成推荐
得到预测评分后,我们可以:- 将所有 Charlie 未评分的物品都进行预测。
- 然后按照预测评分从高到低进行排序。
- 将排名最高的 Top-N 个物品推荐给 Charlie。这就是经典的 “Top-N 推荐” 任务。
总结与优缺点
-
优点:
- 原理直观:易于理解和实现。
- 可解释性强:可以告诉用户“因为和您喜好相似的用户也喜欢这个,所以推荐给您”。
- 能发现隐性兴趣:可以发现用户自己可能都没意识到的潜在兴趣。
-
缺点:
- 数据稀疏性:用户和物品数量巨大时,评分矩阵非常稀疏(绝大多数值是缺失的),导致难以找到可靠相似的用户。
- 冷启动问题:新用户或新物品由于没有评分数据,无法有效地参与相似度计算,难以被推荐。
- 计算扩展性:随着用户数量的增长,计算所有用户两两之间的相似度(时间复杂度为 O(N²))会变得非常昂贵。
为了解决这些缺点,后续发展出了基于物品的协同过滤(Item-Based CF)、矩阵分解(Matrix Factorization) 等更高级的算法。