矩阵分解是推荐系统和协同过滤中的一项核心技术,其中奇异值分解 (SVD) 和交替最小二乘法 (ALS) 是两种广泛使用的方法。 这些方法将用户-项目交互矩阵(例如,电影评分)分解为低维潜在因子矩阵,以捕获底层模式。 SVD 和 ALS 在其数学基础和优化策略方面有所不同,这使得它们适用于不同的场景。
SVD 是一种线性代数技术,它将矩阵分解为三个组成部分:用户因子、奇异值和项目因子。 在推荐系统中,通常应用截断 SVD 通过仅保留顶部潜在特征(例如,50-100 个因子)来近似原始矩阵。 例如,具有用户作为行和电影作为列的电影评分矩阵可以分解为用户偏好和电影属性。 然而,传统的 SVD 在处理缺失数据(在现实世界数据集中很常见)和计算复杂度方面存在困难。 为了解决这个问题,像 FunkSVD(在 Netflix Prize 期间流行起来)这样的方法使用梯度下降来优化分解,只关注观察到的条目。 像 Surprise 或 SciKit-Learn 这样的库为此类情况提供了实现。
另一方面,ALS 是一种专门为处理稀疏数据和可伸缩性而设计的优化方法。 它交替地固定一组潜在因子(用户或项目),并使用最小二乘回归求解另一个。 例如,ALS 可能会首先更新用户因子,同时保持项目因子固定,然后反转该过程,迭代直到收敛。 这种方法适用于隐式反馈(例如,点击或观看次数),并允许正则化以防止过度拟合。 Apache Spark 的 MLlib 包括一个针对分布式计算优化的 ALS 实现,使其适用于大型数据集。 当需要并行化时,ALS 特别有效,因为可以独立计算用户和项目更新。
在实践中,基于 SVD 的方法通常更适用于较小的、密集的数据集,其中潜在因子的可解释性很重要,而 ALS 在可伸缩性和处理稀疏的隐式数据方面表现出色。 开发人员在选择它们时应考虑数据大小、稀疏性和并行处理的需求。 这两种技术仍然是构建推荐系统的基础,权衡了计算效率和准确性。