主要内容

svdsketch

计算低秩矩阵草图的SVD

描述

例子

[S.V.) = svdsketch (一个返回输入矩阵的低秩矩阵草图的奇异值分解(SVD)一个。矩阵草图是一个低秩近似,只反映的最重要的特征一个(达到公差),这使得能够更快地计算与使用相比的大矩阵的部分SVD圣言会

例子

[S.V.) = svdsketch (一个托尔指定矩阵草图的公差。svdsketch使用托尔自适应地确定矩阵草图逼近的秩。随着容忍度的增大,越来越少的特性一个在矩阵示意图中使用。

例子

[S.V.) = svdsketch (一个托尔名称,价值指定具有一个或多个的其他选项名称,价值对参数。例如,您可以指定'maxtations'和调整用于形成矩阵草图的迭代次数的标量。

例子

[S.V.apxErr) = svdsketch (___另外返回一个向量apxErr包含了每次迭代的相对近似误差,常态(U * s * v'-a,'fro')/ norm(a,'fro')。向量的最后一项apxErr(结束)输出的相对近似误差是由svdsketch

例子

全部收缩

使用svdsketch计算低秩矩阵近似的奇异值分解因子。

使用画廊创建一个具有几何分布奇异值的200 × 200随机矩阵。

a =画廊(“randsvd”,200);

使用svdsketch计算低秩近似的SVD一个

[U, V] = svdsketch(一个);

检查输出的大小。

大小(年代)
ans =.1×2120 120.

结果表明低秩矩阵近似一个排名为120。

指定公差svdsketch计算低秩矩阵近似的奇异值分解因子。svdsketch根据规定的公差,自适应地确定矩阵草图的合适秩。

使用画廊创建一个具有几何分布奇异值的200 × 200随机矩阵。

a =画廊(“randsvd”,200);

使用svdsketch计算a的低秩近似值的奇异值分解(SVD)1)依照,并求出输出的大小S.来确定等级svdsketch用于矩阵草图。

托尔= 1飞行;[U, V] = svdsketch (A, tol);大小(年代)
ans =.1×260 60

结果表明低秩矩阵近似一个排名为60。

检查矩阵草图的近似程度一个通过比较一个U * * V”

规范(U * * V”——一个,“摇来摇去”/ qu(a,“摇来摇去”
ans = 0.0048

结果表明矩阵草图近似一个在规定的公差范围内1)依照

使用svdsketchmaxsubspacedimension.一个具有缓慢衰减奇异值的矩阵上的选项。您可以使用此选项强制svdsketch的特性的子集一个在矩阵的草图中。

用标准正态分布的值创建一个5000 × 5000的矩阵。观察矩阵奇异值的分布。

a = randn(5000);半径(SVD(A),'-O'

因为奇异值在一个慢慢地腐烂,一个有许多重要的特征,并且不适合低等级的近似。形成一个合理近似的矩阵草图一个,大多数或几乎所有的特性都需要保留。

使用svdsketch对矩阵的容忍度1 e-5。指定四个输出以返回SVD因子以及每次迭代中的相对近似误差。

托尔= 1 e-5;[U1, S1, V1, apxError1] = svdsketch (A, tol);大小(S1)
ans =.1×25000 5000

的大小S.表示为了满足公差,svdsketch需要保留所有的特征一个。对于大稀疏输入矩阵,这可以在低级近似以来呈现内存问题一个svdsketch大致相同一个因此可能不适合作为密集的矩阵的记忆。

检查输出的近似误差。自svdsketch保留一切一个在美国,计算出的答案是准确的,但这种计算只是一种昂贵的计算方法svd(x)

apxError1(结束)
ans = 1.9075 e-08

现在,执行相同的计算,但要指定maxsubspacedimension.as 650限制用于素描的子空间的大小一个。这是有用的强制svdsketch仅使用功能的子集一个形成矩阵示意图,减少输出尺寸。

(U2, S2, V2, apxError2) = svdsketch(托尔,'maxsubspacedimension', 650);大小(S2)
ans =.1×2650 650

现在输出的大小变小了。

检查新输出的近似误差。强制输出更小的权衡是在矩阵草图中需要省略许多重要特征,并得到的秩650近似一个不符合规定的公差。

apxError2(结束)
ans = 0.8214

输入参数

全部收缩

输入矩阵,指定为稀疏矩阵或全矩阵。一个通常,但并不总是,稀疏的矩阵。svdsketch最适合于操作具有相对较少特征的缺秩矩阵。

数据类型:|
复数支持:万博1manbetx是的

矩阵草图公差,在范围内指定为实数值标量sqrt(eps(class(A))) <= tol < 1

svdsketch使用的价值托尔自适应地确定哪些特征一个在低秩近似(矩阵示意图)中使用一个。的值托尔的增加,svdsketch使用较少的特性一个形成矩阵示意图。

例子:[u,s,v] = svdsketch(a,1e-4)

数据类型:|

名称值对参数

指定可选的逗号分离对名称,价值参数。的名字是参数名称和价值是对应的值。的名字必须出现在引号内。可以按任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:[u,s,v] = svdsketch(a,1e-10,'maxItrations',100)方法中使用100次迭代svdsketch算法。

最大子空间维数,指定为正整数标量。类的内存消耗由子空间维度控制svdsketch算法。如果算法因指定公差而耗尽内存,则可以指定较小的值maxsubspacedimension.这样算法就不会被占用。例如,当一个有折叠慢慢的奇异值。

当你指定maxsubspacedimension.选项,您可以在使用的矩阵草图的等级上设置最大值svdsketch。因此,如果svdsketch无法满足级别小于的指定公差maxsubspacedimension.,它使用最大允许秩,结果输出可能不满足指定的容差。

例子:(U, V) = svdsketch (1 e, MaxSubspaceDimension, 150)

数据类型:|

初始算法块大小,指定为正整数标量。块大小是每次迭代矩阵草图的秩增加的数字。更大的块大小通过在每个迭代中做更多的工作来减少所需的迭代数量,但也可能向计算中添加比实现收敛所需更多的信息。

随着算法的进行,svdsketch如果相对近似误差,可能会从初始值调整块大小以加速收敛apxErr没有足够快的腐烂。

如果您指定BlockSize,该值应小于maxsubspacedimension.

例子:(U, V) = svdsketch (1 e, BlockSize, 10)

数据类型:|

最大算法迭代次数,指定为正整数标量。更多迭代可以以更高的执行时间和更高的内存消耗产生更高质量的矩阵草图。

例子:(U, V) = svdsketch (1 e, MaxIterations, 25)

数据类型:|

功率迭代的数量,指定为非负整数标量。权力迭代改善了正交性V.输出。您通常应该选择要进行的功率迭代次数0.1,或2,因为较大的值反而会导致舍入误差。

例子:(U, V) = svdsketch (1 e, NumPowerIterations, 2)

数据类型:|

输出参数

全部收缩

左奇异向量的矩阵草图,返回一个矩阵。列的列它们是标准正交的,它们构成了一组基向量对于的矩阵草图的范围一个

的大小取决于价值托尔。作为托尔变大,svdsketch使用更少的输入矩阵的特征来形成矩阵素描,因此V.也要减少列数。

MATLAB的不同机器和版本®可以产生仍然是数值准确的不同奇异载体。相应的列V.可以翻转自己的符号,这样不会影响表达式的值吗a = u * s * v'

矩阵草图的奇异值,返回为一个正方形对角矩阵。的对角线元素S.是矩阵素描的严格正奇异值下降顺序。

的大小S.取决于价值托尔。随着耐受性的增加,svdsketch使用更少的输入矩阵的特征来形成矩阵素描,因此S.相应的行和列更少。

矩阵素描的右奇异载体,作为矩阵返回。列的列V.是正常的,它们形成了一组基础向量,用于矩阵素描的空白空间一个

的大小V.取决于价值托尔。作为托尔变大,svdsketch使用更少的输入矩阵的特征来形成矩阵素描,因此V.也要减少列数。

不同的机器和MATLAB版本可以产生不同的奇异向量,仍然是数值精确的。相应的列V.可以翻转自己的符号,这样不会影响表达式的值吗a = u * s * v'

每次迭代的相对近似误差,以向量形式返回。的长度apxErr等于?的迭代次数svdsketch算法。使用最大调整迭代次数。

参赛作品apxErr为每次迭代的相对近似误差,常态(U * s * v'-a,'fro')/ norm(a,'fro')。向量的最后一项apxErr(结束)输出的相对近似误差是由svdsketch

提示

  • 使用svdsketch当你不知道提前指定什么等级时圣言会但是,您知道SVD的近似应该满足的容忍度。

  • 圣言会计算SVD的最佳可能Quoul-K近似值(使用默认值“最大”方法)。svdsketch不能保证它的秩k近似是最好的,这说明它的速度优势圣言会

算法

svdsketch应用容差形成低秩矩阵近似 一个 问: B. 的输入矩阵一个。这种低级近似称为a矩阵草图。矩阵素描只能保留重要的功能一个,过滤掉不必要的信息。相对近似误差apxErr矩阵草图的目的是满足规定的公差托尔

E. 草图 = 问: B. 一个 F 一个 F T. O. L.

这个过程svdsketch遵循以形成矩阵素描是:

  • svdsketch迭代地形成矩阵草图,每次迭代都会添加新列问:然后新建行B.。通过提取特征来创建新的列和行一个使用随机样本矩阵。控件可以控制在每次迭代中添加的列和行数BlockSize名称-值对。

  • 在每一次迭代,svdsketch使用电源迭代来改进新列的正交性问:。控件可以调整功率迭代的次数NumPowerIterations名称-值对。

  • 迭代以形成矩阵素描停止时:列中的列数问:和行B.达到指定的值maxsubspacedimension.,迭代次数达到最大,或相对近似误差收敛(apxErr < =托尔)。

  • 为了提高收敛速度,svdsketch可能增加指定的初始值BlockSize从迭代到迭代,如果衰退在apxErr是不够的。

在矩阵草图之后 一个 问: B. 形成,svdsketch通过计算矩阵草图的奇异值分解(SVD)[U1,S,V] = SVD(B,'ECON'),这样

一个 问: B. = 问: 1 S. V. H = S. V. H

如果svdsketch能够过滤掉一些功能一个基于指定的容差,那么得到的奇异值分解因子所包含的奇异值和奇异向量要比在上进行全奇异值分解时少一个

参考文献

[1]宇,文主,余谷,姚明李。“高效的随机算法,用于固定精度低级矩阵近似。”矩阵分析及其应用39,没有。3(2018年1月):1339-59。https://doi.org/10.1137/17M1141977

在R2020B中介绍