快速确定密集矩阵是否为低秩


13

在我正在从事的软件项目中,对于密集的低阶矩阵,某些计算非常容易。一些问题实例涉及密集的低秩矩阵,但是它们是完全提供给我的,而不是作为因素提供给我的,因此,如果我想利用低秩结构,就必须检查秩并分解矩阵。

所讨论的矩阵通常是完全或接近完全密集的,n的范围从一百到几千。如果矩阵的秩较低(例如小于5到10),则计算SVD并使用它形成低秩分解是值得的。但是,如果矩阵的排名不低,则将浪费精力。

因此,我想找到一种快速合理的方法来确定等级是否较低,然后再投入精力进行完整的SVD因数分解。如果在任何时候都可以确定等级高于临界值,则该过程可以立即停止。如果该过程在不正确的情况下错误地将矩阵声明为低秩,则这不是一个大问题,因为我仍然会执行完整的SVD来确认低秩并找到低秩分解。

我考虑过的选项包括显示LU或QR因式分解的等级,然后是完整的SVD作为检查对象。我还应该考虑其他方法吗?

Answers:


8

k

[R1R120R22],
R1k×kR22kε ķR22εAε从等级矩阵 ; 否则不应该(除非出现数字错误)。k

对于密集的 ×矩阵,该过程花费。n × nO(n2k)n×n


这本质上就是我在问题中描述的方法。我认为Wolfgang Bangerth提出的答案可能比更好。O(n2k)
Brian Borchers

7

当然,问题是(例如,通过QR分解)计算真实等级并不比计算矩阵的低等级表示便宜。

您可能最好的办法是使用随机算法找到低秩近似。至少在理论上,它们比在整个矩阵上工作要快得多,因为从本质上讲,它们仅计算矩阵在随机子空间上的投影分解。

对于大小为的矩阵是否值得,这可能是个好问题,但是如果您的问题确实很大,我怀疑它会有所回报。100×100


根据我对这些算法的了解,它们会生成一个低阶矩阵,该矩阵在规范上与给定矩阵相当接近。我需要知道是否有一个(例如)等级10或更少的矩阵,这是非常接近给定矩阵(说1.0E-10或更高的相对误差。)
布赖恩Borchers的

是的,但是您也可以对投影(低维)矩阵进行QR分解,如果分解显示出缺乏完整等级,那么您还将拥有等级不足的原始矩阵。这不是您要对原始矩阵进行QR分解的条件吗?
Wolfgang Bangerth '17

我可以看到投影矩阵的秩小于或等于(随机矩阵中的行数I乘以A)和A的秩。如果秩为,则原始矩阵不能为等级或以下。如果它的等级小于那么我可能很不幸,或者的等级小于。可以在时间内完成 x矩阵的排名。但是,如果我乘以的随机矩阵是稠密的,则乘法乘以k k 1 k A k k nkkk1kAkknA O k n 2O(k2n)AO(kn2)时间。是否存在稀疏矩阵以高概率保留排名?
Brian Borchers

我不知道。我同意(并暗示)该算法只能告诉您矩阵是否不完整。除非您采取所有随机方向,否则它无法告诉您矩阵是否为满秩。我的希望仅仅是得到一个足够小的的答案,其中。ķ ķ Ñ 2 «k=nkkn2n3
Wolfgang Bangerth '17

1

另一个值得尝试的方法是使用自适应交叉近似(ACA)。这是一种非常流行的算法,具有许多在线可用的实现。作为参考,您可以查看原始论文:

ACA及其变体(例如,ACA +,混合交叉近似HCA)可用于不同的场景。您已经计算了整个密集矩阵是一个不错的选择,因为您将能够在需要时准确计算残差。

如果启发式残差(请参见算法)足够,我相信您的复杂度将是,其中是方矩阵的大小,是等级。注意,等级是规定的截断公差的函数。虽然精确和保证的误差范围将需要。ñ - [R ε - [R ε ÔÑ 2 - [R O(Nr)Nr(ϵ)rϵO(N2r)


0

对于矩阵是对称正定的简单情况,计算其说的20个最大特征值,然后看它们是否或比较范数。ARPACK很快。更重要的是,它只需要一个函数。因此,对于一般的,请查看的特征值 (作为LinOp,而无需实例化它)。0 x AA0A A T AxAxAATA

scipy.sparse.linalg.svds 这样做:LinOp Arpack,对于任何大小的:A(ATA)A

from scipy.sparse.linalg import svds
sing = svds( A, k=20, tol=1e-4, return_singular_vectors=False )  # v0=random
# runtimes on random-normal n x n:
# n = 100, 1k, 2k
#       5, 130, 770 ms
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.