什么是SVD(奇异值分解)

时间:2009-02-10 08:16:06

标签: math matrix linear-algebra svd

它如何真正减少噪音..你能建议一些不错的教程吗?

5 个答案:

答案 0 :(得分:49)

SVD可以从几何意义上理解为方形矩阵作为向量上的变换。

考虑正方形n×n矩阵M乘以向量v以产生输出向量w:

w = M*v

奇异值分解M是三个矩阵M=U*S*V的乘积,因此w=U*S*V*v。 U和V是正交矩阵。从几何变换的角度来看(通过乘以它对矢量起作用),它们是旋转和反射的组合,它们不会改变它们相乘的矢量的长度。 S是一个对角矩阵,表示沿着n轴中的每一个的不同缩放因子(对角线项)的缩放或压缩。

因此,将向量v乘以矩阵M的效果是通过M的正交因子V旋转/反射v,然后用对角因子S对结果进行缩放/挤压,然后通过M的标准正交旋转/反映结果因素U。

从数值角度来看,希望SVD的一个原因是正交矩阵的乘法是可逆的extremely stable运算(条件数是1)。 SVD捕获对角缩放矩阵S中的任何病态条件。

答案 1 :(得分:18)

使用SVD降低噪音的一种方法是进行分解,将接近零的组件设置为零,然后重新组合。

这是SVD上的online tutorial

您可能需要查看Numerical Recipes

答案 2 :(得分:8)

奇异值分解是一种获取n×m矩阵M并将其“分解”为三个矩阵的方法,使得M = U S V. S是对角线方形(唯一的非零条目在从左上角到右下角的对角线上)矩阵,包含M. U和V的“奇异值”正交,这导致对SVD的几何理解,但是降低噪音不是必需的。

当M = U S V时,我们仍然有原始矩阵M,其所有噪声都是完整的。但是,如果我们只保留k个最大奇异值(这很容易,因为许多SVD算法计算分解,其中S的条目按非递增顺序排序),那么我们有一个原始矩阵的近似值。这是有效的,因为我们假设小值是噪声,并且数据中更重要的模式将通过与更大的奇异值相关联的向量来表示。

实际上,得到的近似值是原始矩阵的最准确的秩k近似值(具有最小的平方误差)。

答案 3 :(得分:6)

回答这个问题:SVD是特征值/特征向量到非平方矩阵的推广。 说, 在N \ times p $中,$ X \,然后X的SVD分解产生X = UDV ^ T,其中D是对角线,U和V是正交矩阵。 现在X ^ TX是一个平方矩阵,X ^ TX = VD ^ 2V的SVD分解,其中V等于X ^ TX和D ^ 2的特征向量,包含X ^ TX的特征值。

答案 4 :(得分:4)

SVD还可用于极大地简化全局(即同时对所有观察)将任意模型(在公式中表示)拟合到数据(关于两个变量并以矩阵表示)。 例如,数据矩阵 A = D * M T 其中 D 表示系统的可能状态和 M 表示它的变化(例如时间) 通过SVD, A (x,y)= U (x)* S * V T (y)因此 D * M T = U * S * V T
然后 D = U * S * V T * M < / strong> T + 其中“+”表示伪逆 然后可以采用进化的数学模型并将其拟合到 V 的列,每个列都是模型组件的线性组合(这很容易,因为每列是一维曲线)。这样可以获得生成 M 的模型参数(?表示它基于拟合)。
M * M ?+ * V = V 允许残差 R * S 2 = V - V 最小化,从而确定 D M

非常酷,嗯?

还可以检查 U V 的列以收集有关数据的信息;例如, V 列中的每个拐点通常表示模型的不同组件。

最后,实际上解决了你的问题,需要注意的是,虽然每个连续的奇异值(对角矩阵 S 的元素)及其伴随向量 U V 确实具有较低的信噪比,这些“不太重要”的矢量中模型组件的分离实际上更加明显。换句话说,如果数据是由一系列状态变化描述的,这些变化遵循指数或其他的总和,则每个指数的相对权重在较小的奇异值中变得更加接近。换句话说,后面的奇异值具有较少平滑(噪声较大)的向量,但其中每个分量表示的变化更多 distinct