矩阵分解究竟如何帮助协同过滤

数据挖掘 推荐系统 矩阵分解
2022-02-18 07:49:03

我们从不同电影的用户评分矩阵开始,其中一些元素未知,即用户对尚未观看的电影的评分。我们需要填补这个空白。所以

  • 在事先不知道所有元素的情况下,如何分解或分解矩阵。
  • 在你以某种方式分解它之后,你是否只是将矩阵相乘以重新创建原始矩阵,但现在填充了缺失的项目?
  • 你怎么知道选择哪种分解方法,如非负、奇异值、特征,而不需要过多的数学?
1个回答

回答您的问题

  1. 您对矩阵进行因式分解以尽可能接近原始矩阵。这通常通过从随机值开始,并根据误差(因子乘积与原始矩阵之间)进行更新来完成。换句话说,对于给定的矩阵 A,您试图找到矩阵 C 和 D 使得 Error(A - (C x D)) 最低。该算法旨在找到一个近似值,这可能导致原始缺失条目被新值(推荐或评级)替换。
  2. 你只是乘法吗?是的。这是计算的本质。对于每个用户和产品,乘法会给你评分或分数。按分数排序,并选择您为每个用户推荐的索引。它还允许您现在存储比原始矩阵小得多的矩阵。

  3. 因式分解的选择也将由应用决定。如果您的应用程序只有正评级,那么最好使用非负矩阵分解。你可以在不知道实现的情况下开始使用矩阵分解方法,只要你了解整体想法(以及使用它的陷阱)。

进一步的评论

有点令人困惑的是,您从一个包含许多缺失条目(看不见的项目)的矩阵开始,通过分解近似矩阵并期望得到非缺失条目(这有助于进行预测)。如果任务是近似原始条目,那么建议将不是很好,因为您可以在近似中丢失/零条目,并且仍然在近似任务中获得最低错误。这个想法:算法中施加的正则化(上面的第 1 点)确保过滤原始数据中的噪声并且只检测到模式。但这个想法也有不少批评者。本文的引言部分,作者 Stefen Rendle对简单的矩阵分解方法中发生的事情以及可能出现的问题进行了可读的介绍。该论文还用更好的优化标准重新制定了任务。您还可以阅读Simon Funk 的这篇文章,它以可读的语言(和代码)解释了将矩阵分解应用于推荐的机制。