趋近智
推荐系统的核心是记录用户与物品之间历史关系的数据。这些数据是算法学习偏好并做出预测的原始素材。如果对其结构和属性缺乏清晰的认知,就无法构建有效的推荐器。整个流程始于将这些关系整理成机器可以分析的格式。
所有的推荐问题都可以分解为三个基本组成部分:
这三个元素构成了一个相互关联的系统。用户与物品产生交互,而这些交互的集合构成了我们用来训练模型的数据集。
用户-物品交互图。用户通过各种动作与物品连接,这些动作充当了偏好的信号。
表示此类数据最常用的结构是用户-物品交互矩阵,有时也称为效用矩阵。在这个矩阵中,每一行通常对应一个用户,每一列对应一个物品。用户行和物品列交叉处的单元格包含他们的交互值。例如,如果用户 给物品 打了 4 星评分,那么矩阵中该位置的值 就是 4。
| 用户 ID | 电影 A | 电影 B | 电影 C | 电影 D | 电影 E |
|---|---|---|---|---|---|
| 用户 1 | 5 | ? | 3 | ? | 4 |
| 用户 2 | ? | 4 | ? | 5 | ? |
| 用户 3 | 4 | ? | ? | ? | 5 |
| 用户 4 | ? | 2 | 1 | 4 | ? |
问号 (?) 代表缺失值。它们表示用户尚未与特定物品进行交互或评分。这引出了推荐数据的一个显著特征:稀疏性。
在任何实际场景中,用户只会在所有可用物品中与极小比例的部分产生交互。一家电商网站可能有数百万种产品,但单个顾客可能只购买或评价过几十个或几百个。因此,用户-物品矩阵大部分是空的。这种稀疏性不仅是数据的一个属性,也是需要推荐系统的原因所在。大多数推荐器的主要目标是用有意义的预测值填补这些缺失值,找出用户最可能喜欢的物品。
在这个稀疏矩阵的可视化中,每个点代表用户和物品之间记录的一次交互。空白区域表示没有交互,突出了数据稀疏性的挑战。
虽然矩阵是思考数据的一种有用方式,但在内存中存储一个庞大的、大部分为空的矩阵效率极低。在实践中,交互数据几乎总是以“长”格式或“坐标”格式存储。这种格式将每次交互记录为单独的一行,包含用户 ID、物品 ID 和交互值。
pandas DataFrame 非常适合这项任务。下面是一个电影评分数据表示形式的小例子:
import pandas as pd
# 评分数据示例
ratings_data = {
'user_id': [1, 1, 1, 2, 2, 3, 3, 4, 4, 4],
'movie_id': [101, 103, 105, 102, 104, 101, 105, 102, 103, 104],
'rating': [5, 3, 4, 4, 5, 4, 5, 2, 1, 4]
}
ratings_df = pd.DataFrame(ratings_data)
print(ratings_df)
user_id movie_id rating
0 1 101 5
1 1 103 3
2 1 105 4
3 2 102 4
4 2 104 5
5 3 101 4
6 3 105 5
7 4 102 2
8 4 103 1
9 4 104 4
这种长格式节省内存,因为它只存储实际发生的交互。大多数推荐算法库(包括我们将要使用的库)都针对这种数据结构进行了优化。当算法需要矩阵表示时,可以从这种格式即时构建,通常使用专门的稀疏矩阵对象来避免存储空值。
理解这种数据表示方式是构建任何推荐系统的第一步。随着学习的深入,我们将看到不同的算法如何使用这些用户-物品交互数据来学习模式并生成个性化建议。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•