# 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个**潜在因子**。 * **分解目标**:让分解后的两个矩阵相乘,尽可能地**逼近**原始评分矩阵。