用于推荐系统的矩阵分解

2025年2月3日 | 阅读 4 分钟

为了从用户-项目交互数据中提取潜在特征,推荐系统经常采用强大的矩阵分解方法。当用于协同过滤时,这种方法效果特别好,因为它根据从用户偏好和行为中识别出的模式提供建议。矩阵分解算法处理大型、稀疏数据集并生成高质量建议的能力使其越来越受欢迎。

矩阵分解过程涉及将一个大矩阵分解为两个较小的矩阵,通常其中一个反映用户-项目交互。在推荐系统的上下文中,原始矩阵 (R) 由表示用户的行和表示项目的列组成。行和列的值表示用户对项目的评分或交互。由于用户行为的性质,这个矩阵通常是稀疏的——即,其大多数条目要么缺失要么为零。

矩阵分解的工作原理

  1. 数据表示: 描述用户-项目交互的大型矩阵是矩阵分解的核心组成部分。该矩阵中的每个单元格都代表用户对项目的评分或交互,而行代表个人,列代表项目。由于用户通常只与可访问产品的一小部分进行交互,因此该矩阵通常是稀疏的,这意味着其大多数条目要么为零,要么缺失。
  2. 分解矩阵: 这种稀疏的用户-项目矩阵旨在通过矩阵分解将其分解为两个较小的矩阵,即用户矩阵和项目矩阵。在用户矩阵中,每个用户都由一个向量表示,在项目矩阵中,每个项目都由一个向量表示。这些向量有时被称为潜在因子,代表影响交互和偏好的人和事物的基本特征。
  3. 发现隐藏元素: 为了使用户和项目向量结合时尽可能接近原始交互值,这些潜在组件的值必须在分解过程中学习。在这个学习过程中,通常采用迭代优化方法,通过调整潜在组件的值来减少数据集中预期交互与实际交互之间的差异。
  4. 形成假设: 学习潜在变量后,可以使用它们预测原始用户-项目矩阵中缺失的元素。例如,系统将用户的潜在因子向量与对象的潜在因子向量结合起来,以预测用户将如何评估他们尚未与之交互的项目。由此产生的值给出了用户可能对该项目的评分或参与度的估计。
  5. 提出建议: 根据这些估计值提出建议是最后一步。该算法为每个用户找到具有最大预期交互值的项目并进行推荐。通过这种量身定制的方法,您可以确信所建议的产品与用户的假定品味密切匹配。

代码

现在我们将实现它。

导入库

我们现在将构建一个模型,该模型使用点积层(Dot layer)而不是连接用户和电影嵌入层的输出并添加更多密集层来组合它们。

模型

输出

Matrix Factorization for Recommender Systems

训练


输出

Matrix Factorization for Recommender Systems

我们新的、更简单的模型(蓝色所示)看起来相当不错。尽管嵌入相对较小,但这两个模型都表现出明显的过拟合。换句话说,与未见数据相比,由实线组成的训练集上的误差明显更低。