趋近智
为了构建有效的推荐系统,量化用户或物品之间的关系是必不可少的。相似度指标提供了一种衡量它们相似程度的正式方法。这些函数通过比较代表两个用户或两个物品的向量,并生成一个表示它们相似程度的分数。指标的选择是一项设计决策,会显著影响推荐系统的性能。
我们将重点讨论协同过滤中最常用的两种相似度指标:余弦相似度(Cosine Similarity)和皮尔逊相关系数(Pearson Correlation)。
余弦相似度衡量两个非零向量之间夹角的余弦值。在推荐系统的语境下,它评估的是两个用户或物品评分向量的方向,而不是它们的大小。这非常有用,因为它捕捉了偏好模式,忽略了评分尺度的差异。例如,一个用户可能是一个严苛的评论者,给所有东西打分都在 1 到 3 之间,而另一个用户则比较大方,打分在 3 到 5 之间。如果他们在不同物品上的评分“形状”相似,余弦相似度仍然可以将他们识别为相似用户。
两个向量 和 之间的余弦相似度公式为:
分值范围从 -1(完全相反)到 1(完全相同),0 表示正交或无相关性。在大多数评分是非负数的评分场景中,分值范围在 0 到 1 之间。
让我们看一个简单的基于用户的例子,Alice 和 Bob 两个用户都对三部电影进行了评分。
| 电影 | Alice 的评分 | Bob 的评分 |
|---|---|---|
| 电影 1 | 5 | 4 |
| 电影 2 | 3 | 2 |
| 电影 3 | 4 | 3 |
他们的评分向量分别是 和 。计算余弦相似度的步骤如下:
计算点积 ():
计算每个向量的模 ( 和 ):
计算相似度:
0.997 的分数表明 Alice 和 Bob 在电影方面的品味非常相似,因为他们的评分向量指向几乎相同的方向。
虽然余弦相似度很有效,但它有一个局限性:它没有考虑评分尺度的差异。例如,如果用户 A 对物品的评分为 [1, 2, 3],用户 B 的评分为 [3, 4, 5],他们具有完美的线性关系,但余弦相似度无法像预期的那样强烈地捕捉到这一点。
皮尔逊相关系数通过先对数据进行中心化处理来解决这个问题。它确定两个变量之间的线性相关程度。在我们的案例中,它衡量两个用户给出的评分或两个物品收到的评分之间的线性关系。它实际上是余弦相似度的均值中心化版本。
两个用户 和 之间的皮尔逊相关系数公式为:
其中:
分值范围从 -1 到 1,其中 1 表示完美的正线性关系,-1 表示完美的负线性关系,0 表示没有线性关系。
让我们用一个新用户 Carol 的例子来看看,她是一个比较严苛的评论者。
| 电影 | Alice 的评分 | Carol 的评分 |
|---|---|---|
| 电影 1 | 5 | 3 |
| 电影 2 | 3 | 1 |
| 电影 3 | 4 | 2 |
计算平均评分:
创建均值中心化评分向量:
如你所见,它们的均值中心化向量是相同的。如果我们计算皮尔逊相关系数(或这些中心化向量的余弦相似度),结果将是 1。这表明存在完美的线性相关,捕捉到了即使原始分数不同,他们的偏好结构也是完全一致的事实。皮尔逊相关系数通过消除个人评分偏差,成功识别了他们的相似性。
该图说明了均值中心化如何对齐用户评分。在中心化之前,Alice 和 Carol 的评分处于不同的位置。减去各自的平均评分后,他们的偏好向量完全对齐,显示出潜在的相似性。
在这两个指标之间做出选择通常取决于数据的性质。
在实践中,你很少需要从头开始实现这些公式。像 Scikit-learn 这样的库提供了计算相似度矩阵的高效函数。例如,你可以使用一行代码为用户-物品矩阵 R_items 中的所有物品计算余弦相似度矩阵。
from sklearn.metrics.pairwise import cosine_similarity
# 假设 R_items 是一个行表示物品、列表示用户的矩阵
# 它可以是 pandas DataFrame 或 NumPy 数组
# 例如:
# R_items = [
# [5, 3, 0], # 用户 A, B, C 对物品 1 的评分
# [4, 0, 2], # 物品 2 的评分
# [0, 2, 5] # 物品 3 的评分
# ]
# 计算所有物品对之间的相似度
item_similarity_matrix = cosine_similarity(R_items)
print(item_similarity_matrix)
# 输出可能类似于:
# [[1. 0.78 0. ]
# [0.78 1. 0.55 ]
# [0. 0.55 1. ]]
该矩阵为你提供了每对物品之间的相似度分数,构成了寻找最近邻的基础。
有了这些量化相似度的方法,你现在就可以为任何用户或物品寻找最相关的邻居。下一步是利用来自这些邻居的信息来生成具体的预测。
这部分内容有帮助吗?
cosine_similarity函数的官方文档,对实际应用至关重要。© 2026 ApX Machine Learning用心打造