2.2.2. MF(Matrix Factorization,矩阵分解)

MF 是协同过滤的一种实现方式,更具体地说,它是一种基于模型的协同过滤技术。它可以说是推荐系统领域影响力最大、最经典的算法之一,尤其在 Netflix Prize 推荐算法竞赛中被广泛应用和验证后而声名大噪。


核心思想:化繁为简

想象一个巨大的表格(矩阵),行是用户,列是物品,表格里的值是用户对物品的评分(也可能是点击、购买等隐式反馈)。这个矩阵通常非常稀疏(大部分是空的,因为用户只评价过极少数的物品)。

MF的核心思想就是:把这个又大又稀疏的矩阵,分解成两个又小又稠密的矩阵的乘积,从而发现用户和物品背后隐藏的“特征”。


一个生动的比喻:美食家与食物

假设我们想理解一群美食家(用户)对各式菜肴(物品)的偏好。

  1. 原始数据(大表格):我们有一个表格,记录着每个美食家对吃过的菜肴的评分。但每个美食家只吃过所有菜肴的一小部分,所以表格大部分是空白的。

  2. 矩阵分解(寻找隐藏特质)

    • 我们假设美食家们的偏好可以由一些隐藏的饮食特质来决定,比如:

      • 特质1:甜食偏好度

      • 特质2:辛辣耐受度

      • 特质3:是否注重健康

      • … (假设有k个特质)

    • 对于每一个美食家,我们都可以用一个向量来表示他/她对这些特质的偏好程度。例如,美食家A的向量可能是 [甜食爱好者: 5.0, 辛辣耐受: 1.5, 健康注重: 3.0, ...]。所有用户的这些向量就组成了用户矩阵

    • 对于每一道菜肴,我们也可以用一个向量来表示它在这些特质上的表现程度。例如,巧克力蛋糕的向量可能是 [甜度: 4.8, 辣度: 0.2, 健康度: 0.5, ...]。所有物品的这些向量就组成了物品矩阵

  3. 预测评分(匹配特质)

    • 现在我们预测美食家A会给巧克力蛋糕打多少分?很简单,将美食家A的偏好向量和巧克力蛋糕的特质向量进行匹配(数学上是求内积)。

    • 预测评分 = (5.0 * 4.8) + (1.5 * 0.2) + (3.0 * 0.5) + ... 24.0 + 0.3 + 1.5 = 25.8

    • 这个计算结果(25.8)就是在我们的“特质空间”里,用户和物品的匹配度,可以看作是预测的评分。


数学表示

  • 原始矩阵 (R):维度是 m x n(m个用户,n个物品),是一个稀疏矩阵。

  • 用户矩阵 (P):维度是 m x k。每一行代表一个用户,包含k个潜在因子(Latent Factors)。

  • 物品矩阵 (Q):维度是 n x k。每一行代表一个物品,包含k个潜在因子

  • 分解目标:让分解后的两个矩阵相乘,尽可能地逼近原始评分矩阵。

    公式R P × Qᵀ


MF 是如何工作的?(训练过程)

我们如何找到最优的用户矩阵P和物品矩阵Q呢?这个过程叫做模型训练

  1. 初始化:随机初始化矩阵P和Q中的值。

  2. 计算预测误差

    • 对于已知的每一个评分 R_ui(用户u对物品i的实际评分),用当前P和Q计算预测值 Ř_ui = P_u · Q_iᵀ

    • 计算预测误差:e_ui = R_ui - Ř_ui

  3. 优化迭代(梯度下降)

    • 目标是最小化所有已知评分上的总预测误差(损失函数)。

    • 根据误差 e_ui 来微调(更新)用户u的潜在因子向量 P_u 和物品i的潜在因子向量 Q_i,让下一次的预测更准确。

  4. 循环:重复步骤2和3,直到误差收敛到最小(或达到预设的迭代次数)。

训练完成后,我们就可以用公式 Ř_ui = P_u · Q_iᵀ 来预测用户u对任何物品i的评分,并推荐预测评分最高的物品。


MF 的优势

  1. 处理稀疏性:即使原始矩阵非常稀疏,通过挖掘潜在的隐藏因子,也能做出不错的预测。

  2. 灵活性高:可以融入更多信息,发展出更强大的模型,如** BiasSVD (考虑用户和物品的自身偏见)、 SVD++ **(考虑用户的隐式反馈行为)。

  3. 计算高效:一旦模型训练完成,预测速度非常快,因为只需要计算两个向量的内积。

  4. 揭示深层关系:潜在因子可能对应一些无法直接观察、但确实存在的抽象概念,能挖掘出更深层次的关联。

总结

MF(矩阵分解) 是协同过滤的“升级版”,它通过将用户-物品交互矩阵分解为低维的用户潜在因子矩阵物品潜在因子矩阵,来预测用户对未知物品的偏好。它克服了传统协同过滤的一些缺点,是推荐系统发展史上一个里程碑式的模型,为后续许多更复杂的深度学习推荐模型奠定了基础。