假设我有一个致密的基质的米× Ñ大小,SVD分解甲 = û 小号V ⊤。在我可以计算SVD如下:。
R
svd(A)
如果一个新的个行被添加到,可以计算基于旧一个新的SVD分解(即通过使用 ü,小号和 V),不从头重新计算SVD?
假设我有一个致密的基质的米× Ñ大小,SVD分解甲 = û 小号V ⊤。在我可以计算SVD如下:。
R
svd(A)
如果一个新的个行被添加到,可以计算基于旧一个新的SVD分解(即通过使用 ü,小号和 V),不从头重新计算SVD?
Answers:
是的,可以在现有矩阵中添加一行后更新SVD分解。
在伍德伯里公式进场。如果您看到这些公式,您会注意到其中涉及许多逆。您不能直接解决这些问题。当您已经解决了许多子系统时(即已经计算出一些分解),您就可以利用它们来获得更快和/或更稳定的估计。(这就是为什么人们仍然在这一领域进行研究的原因。)我经常使用JE Gentle 撰写的《计算统计》一书作为参考;我认为是Chapt。5 数字线性代数将正确设置您。(不幸的是,Harville撰写的超级经典著作:“ 从统计学家的角度看矩阵代数 ”根本没有涉及排名更新。)
从统计数据/应用程序的角度来看,推荐系统中排名第一的更新很常见,因为每次有新用户注册或购买新产品时,都会有成千上万的客户条目并重新计算SVD(或对此问题进行任何给定的分解)。添加或删除非常浪费(如果不是无法实现的)。通常,推荐器系统矩阵稀疏,这使算法更加有效。可访问的第一篇论文是M. Brand 撰写的“ 针对轻量级推荐系统的快速在线SVD修订版 ”手稿。对于密集矩阵,我认为查看模式识别和图像处理中的论文可以使您真正使用一种实用算法。例如论文:
所有人似乎都在解决自己的核心问题;新功能即将推出,我们需要相应地快速更新我们的表示形式。请注意,这些矩阵不是对称的,甚至不是正方形的。M. Brand的另一项工作也可以解决这个问题(请参见文章“ 稀疏奇异值分解的快速低秩修改(2006) ”-文章开头的MO链接中也提到了这一点。)许多关于该主题的出色论文,但大多数都倾向于大量数学运算(例如Benaych-Georgesa和Nadakuditi的论文“ 大型矩形随机矩阵的低阶扰动的奇异值和向量(2012)””),我认为他们不会很快帮助您找到解决方案。建议您继续关注“图像处理”文献。
不幸的是,我还没有遇到过任何R实现一级更新例程。来自Computational Science SE的“ 在Python,C或Fortran中可更新的SVD实现? ” 的答案给出了您可能要考虑的许多MATLAB和C ++实现。通常,R,Python等实现是C,C ++或FORTRAN实现的包装。
rank 1 updates
。Brand 撰写的针对轻量级推荐系统的快速在线SVD修订版是可访问的第一篇论文。不幸的是,我还没有看到已经在R中实现的SVD。感谢CHOLMOD,Cholesky更新的存在(updown
来自Matrix
)。矩阵的稀疏性将与最终解决方案有所不同。您假设是密集矩阵还是稀疏矩阵?