广义奇异值分解:只计算 r 个最大的奇异值

计算科学 线性代数 矩阵 正则 svd
2021-11-30 16:12:46

我想为大小最大为 1000000 x 1000000(不一定是正方形)的稀疏矩阵计算广义奇异值分解。该方法将用于机器学习(分类)。

目前,我正在使用LAPACK包中的函数ggsvd (这里),这是一个Fortran实现。

它的作用是计算给定矩阵 A 和 B 的矩阵 U、V、X、C、S,使得

A = U * C * transposed(X)

B = V * S * transposed(X)

其中 C 和 S 是分别包含 A 和 B 奇异值的对角矩阵。来自 Matlab 的解释

使用 SVD 可以进行低秩逼近,这意味着只计算具有最多信息的 r 个最大奇异值来逼近输入矩阵。

我现在想知道在 GSVD 中是否也可以这样做,这样就不必计算所有奇异值。我想只计算 r 最大值或在值低于给定阈值时停止计算。

我的假设是这是不可能的,因为 A 和 B 的奇异值是成对计算的,如果一对包含 A 的最大奇异值,则其 B 的配对不一定是。

一个简短的解释为什么它是可能的(也许是一个提供这个选项的实现的链接)或者不是很好。

1个回答

我不是这个领域的专家,但我是你的ABsparse、matlab 和 LAPACK 都不是一个好的选择。

对于稀疏矩阵,一个快速的文献搜索证实了用于计算一些极值广义奇异值的算法已经被描述,正如人们所期望的那样。(谷歌学者的一些随机结果:http: //www.win.tue.nl/~hochsten/pdf/jdgsvd.pdfhttp://www.cs.berkeley.edu/~richie/cs294.data/project/阅读/zha_sparse_gensvd.pdf.gz )

不幸的是,我不知道它们在可用库中的实现,但在这里我希望与知识渊博的人相矛盾。