将SVD应用于协作过滤问题时会发生什么?两者有什么区别?


21

在协作过滤中,我们没有填写值。假设用户没有看电影,那么我们必须在其中放一个“ na”。

如果要使用此矩阵的SVD,则必须在其中放入一些数字-假设为0。缩小的尺寸空间)。但预测的偏好本身-用户对某项商品的偏好将为零。(因为这就是我们在未知列上输入的内容)。

因此,我陷入了协作过滤与SVD问题的困扰。它们似乎几乎相同,但不完全相同。

它们之间有什么区别?当我将SVD应用于协作过滤问题时会发生什么?我做到了,结果在寻找附近用户方面似乎可以接受,这很好,但是如何?

Answers:


25

好吧,当您说SVD时,大概是在谈论被截断的 SVD(您只保留最大的奇异值)。查看矩阵的截断SVD有两种不同的方法。一种是标准定义:ķ

首先,您要执行SVD:,其中和是旋转矩阵,具有沿对角线的奇异值。然后,选择前奇异值,对其余的零进行归零,然后砍掉不相关的行和列,以使 -rank近似于原始值: üVΣķķXX =Ü Ñ × ķ ķ × ķ ΣV Ť ķ × Xñ×=üñ×ñΣñ×VŤ×üVΣķķXX=üñ×ķΣķ×ķVŤķ×

这一切都很好,很花哨(并且很容易在R或Matlab中实现),但是当谈论缺少值的矩阵时,这没有任何意义。但是,截断的SVD 有一个有趣的属性-这是原始的最佳秩近似!那是:ķķķ

X=一种[RG一世ñ[R一种ñķ=ķ一世ĴX一世Ĵ-一世Ĵ2

此属性似乎易于推广到缺失值的情况。基本上,您正在寻找一个秩矩阵,该矩阵将原始矩阵的已知条目之间的逐元素均方误差最小化。也就是说,在训练系统时,您将忽略所有遗漏的值。(有关如何实际找到秩近似的提示,这里一些地方可供参考)。ķķķ

然后,一旦您提出了与原始图像适当的“接近”秩近似,就可以使用它来填充缺失值。也就是说,如果缺少,则填写。多田!现在完成。X Ĵ XĴķX一世ĴX一世Ĵ


3

似乎有很多方法可以处理缺失的值。以下第1.3节中有评论的论文可能是一个很好的起点。


0

我需要更多声誉来评论Stumpy Joe Pete的答案,因此我将其发布为答案。

尽管我认为需要澄清一点,但对此表示感谢。特别是我的意思是:

基本上,您正在寻找一个k秩矩阵,该矩阵将原始矩阵的已知项之间的逐元素均方误差最小化。

首先-最高等级是否会始终将其最小化,或者实际上是重建原始X矩阵?其次-为什么只选择已知条目。从直觉上讲这是有道理的,但是该过程实际上也适合用一些合理的数字替换的地方。

我的方法是执行类似交叉验证的操作:

  1. 用0或均值或另一个合理的数字填充空白处。
  2. 用0或合理数替换n个已知元素之一
  3. 进行k级SVD重构
  4. 检查已知重构元素的值。
  5. 重复所有可能的已知元素并计算MSE
  6. 对所有可能的k重复,然后选择MSE最低的那个。

1.您想选择一个低k值以避免过拟合(远低于X的尺寸)。基本上出于相同的原因,对于拟合6个点的数据集,线性回归比五次方更好。2.您不知道未知条目应该是什么,因此无法跨它们测量“元素级MSE”。我的过程使用通过最小化已知值误差(并限制矩阵必须为低秩)得出的数字来填充缺失值。
笨拙的乔·皮特,2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.