主要内容

svdsketch

计算低秩矩阵草图的奇异值分解

描述

例子

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

例子

U年代V= svdsketch(一个托尔指定矩阵草图的容差。svdsketch使用托尔自适应地确定矩阵草图逼近的秩。随着公差的增大,特征的减少一个在矩阵草图中使用。

例子

U年代V= svdsketch(一个托尔名称,值使用一个或多个指定其他选项名称,值对参数。例如,您可以指定“MaxIterations”以及一个用于调整迭代次数的标量,用于形成矩阵草图。

例子

U年代VapxErr= svdsketch(___另外返回一个向量apxErr它包含了每次迭代的相对近似误差,规范(U * * V”- A,“来回”)/规范(A,“来回”).向量的最后一项apxErr(结束)返回的输出的相对近似误差是svdsketch

例子

全部折叠

使用svdsketch来计算低秩矩阵近似的SVD因子。

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

画廊(“randsvd”, 200);

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

[U,S,V] = svdsketch(A);

检查输出的大小。

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

的低秩矩阵近似一个排名120。

使用svdsketch来计算低秩矩阵近似的SVD因子。svdsketch根据指定的公差自适应地确定矩阵草图的适当等级。

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

画廊(“randsvd”, 200);

使用svdsketch来计算a的低秩近似值的SVD1)依照,求输出的大小年代来确定等级svdsketch用于矩阵草图。

Tol = 1e-2;[U,S,V] = svdsketch(A,tol);大小(年代)
ans =1×260 60

的低秩矩阵近似一个排名为60。

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

范数(U*S*V' - A,“摇来摇去”) /规范(,“摇来摇去”
Ans = 0.0048

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

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

用从标准正态分布中抽取的值创建一个5000乘5000的矩阵。查看矩阵奇异值的分布。

A = randn(5000);semilogy计算(一)“o”

图中包含一个轴对象。axis对象包含一个line类型的对象。

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

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

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

的大小年代表示为满足公差,svdsketch需要保留所有的特征一个.对于大型稀疏输入矩阵,这可能会出现内存问题,因为的低秩近似一个形成的svdsketch大小大致相同一个因此可能不适合在内存中作为一个密集矩阵。

检查输出的近似误差。自svdsketch保存所有的东西一个,计算出的答案是准确的,但计算只是一种昂贵的计算方式圣言(X)

apxError1(结束)
Ans = 1.2362e-07

现在,做同样的计算,但指定MaxSubspaceDimension如650限制子空间的大小用于素描一个.这对强制是有用的svdsketch中的特性的子集一个形成矩阵草图,减小输出尺寸。

[U2,S2,V2,apxError2] = svdsketch(A,tol,“MaxSubspaceDimension”, 650);大小(S2)
ans =1×2650 650

现在输出的大小变小了。

检查新输出的近似误差。迫使输出更小的代价是,在矩阵草图中需要省略A的许多重要特征,从而得到秩650的近似一个不符合规定的公差。

apxError2(结束)
Ans = 0.8214

输入参数

全部折叠

输入矩阵,指定为稀疏或全矩阵。一个是典型的(但不总是)大而稀疏的矩阵。svdsketch最适合操作具有相对较少特征的秩亏矩阵。

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

矩阵草图公差,指定为范围内的实数标量√(eps(类(A))) <= tol < 1

svdsketch使用的值托尔自适应地确定…的特征一个的低秩近似(矩阵草图)中使用一个.作为价值托尔的增加,svdsketch使用较少的特性一个形成矩阵草图。

例子:[U,S,V] = svdsketch(A,1e-4)

数据类型:|

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来名字在报价。

例子:[U,S,V] = svdsketch(A,1e-10,'MaxIterations',100)中使用100次迭代svdsketch算法。

最大子空间维数,指定为正整数标量。子空间维控制的内存消耗svdsketch算法。如果算法用完指定容差的内存,则可以指定较小的值MaxSubspaceDimension这样算法就能保存在内存中。例如,当一个具有缓慢衰减的奇异值。

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

例子:[U,S,V] = svdsketch(A,1e-7,'MaxSubspaceDimension',150)

数据类型:|

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

随着算法的进行,svdsketch如果相对近似误差,可以从初始值调整块大小以加快收敛速度apxErr衰减得不够快。

如果你指定BlockSize,该值应小于MaxSubspaceDimension

例子:[U,S,V] = svdsketch(A,1e-7,'BlockSize',10)

数据类型:|

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

例子:[U,S,V] = svdsketch(A,1e-7,'MaxIterations',25)

数据类型:|

幂迭代数,指定为非负整数标量。幂迭代改进了函数的正交性UV输出。通常应该选择幂次迭代的次数01,或2,因为较大的值会导致舍入误差。

例子:[U,S,V] = svdsketch(A,1e-7,'NumPowerIterations',2)

数据类型:|

输出参数

全部折叠

留下奇异向量的矩阵草图,作为矩阵返回。的列U都是标准正交的,它们构成了一组基向量在矩阵草图的范围内一个

的大小U取决于的值托尔.作为托尔变大,svdsketch使用较少的输入矩阵的特征来形成矩阵草图,所以UV也有更少的列。

不同的机器和MATLAB版本®可以产生不同的奇异向量,在数值上仍然是准确的。中的对应列UV可以翻转它们的符号,因为这并不影响表达式的值A = u * s * v '

奇异值的矩阵草图,返回为对角方阵。的对角线元素年代是矩阵草图的严格正奇异值,按递减顺序排列。

的大小年代取决于的值托尔.随着耐受性的增加,svdsketch使用较少的输入矩阵的特征来形成矩阵草图,所以年代相应的行和列更少。

右奇异向量的矩阵草图,返回为一个矩阵。的列V是标准正交的,它们构成了一组基向量对于矩阵草图的零空间一个

的大小V取决于的值托尔.作为托尔变大,svdsketch使用较少的输入矩阵的特征来形成矩阵草图,所以UV也有更少的列。

不同的机器和MATLAB版本可以产生不同的奇异向量,它们在数值上仍然是准确的。中的对应列UV可以翻转它们的符号,因为这并不影响表达式的值A = u * s * v '

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

的条目apxErr是每次迭代的相对近似误差,规范(U * * V”- A,“来回”)/规范(A,“来回”).向量的最后一项apxErr(结束)返回的输出的相对近似误差是svdsketch

提示

  • 使用svdsketch当你事先不知道用什么等级来指定时圣言会,但是你知道SVD的近似应该满足什么公差。

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

算法

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

e 草图 = B 一个 F 一个 F t o l

这个过程svdsketch下面形成矩阵草图为:

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

  • 在每次迭代中,svdsketch中使用幂迭代来改善新列的正交性.属性可以调整幂次迭代的次数NumPowerIterations名称-值对。

  • 生成矩阵草图的迭代在以下情况停止:中的列数排在里面B的指定值MaxSubspaceDimension,迭代次数达到MaxIterations,或相对近似误差收敛(apxErr <= tol).

  • 为了提高收敛速度,svdsketch的指定初始值BlockSize从一个迭代到另一个迭代apxErr是不够的。

在矩阵草图之后 一个 B 形成,svdsketch计算矩阵草图的奇异值分解(SVD)[U1,S,V] = svd(B,'econ'),以致于

一个 B = U 1 年代 V H = U 年代 V H

如果svdsketch是否能过滤掉某些特征一个基于指定的公差,那么结果的奇异值分解因子包含的奇异值和奇异向量比完整的奇异值分解更少一个

参考文献

[1]于文健顾宇李耀航。固定精度低秩矩阵逼近的有效随机算法。矩阵分析与应用杂志39岁的没有。3(2018年8月):1339-1359。https://doi.org/10.1137/17M1141977

扩展功能

版本历史

R2020b中介绍