翻看了许多的博客和资料,我认为讲述的透彻的就是reference当中的第一博客。接下来可能和博客上讲的以及截图都一样,其中也会加入我自己添加的一些细节,显示在括号,以及用蓝字表示中。
奇异值分解(SVD),在许多的地方都被用到,比如求解最小二乘解,还有数据压缩等等方面。当我们看到了奇异值分解的时候,我们往往就和联想到特征值和特征向量这两个概念。那我们就先来看一下特征值分解,渐渐推导到奇异值分解。
(1)特征值分解(EVD)
首先,我们先看一个对角矩阵(即只有对角线上有元素)。
从几何的角度,矩阵可以描述为一个变换。即用矩阵乘法将平面上的点(x, y)变换成另外一个点(3x, y)。
这种变换的效果如下:平面在水平方向被拉伸了3倍,在竖直方向无变化。
再看下这个矩阵
它会产生如下的效果
如果我们把网格旋转45度,再观察一下。
(这里对原博客进行一点补充,自己想的,将格网旋转45°就是相当于在原来的基础上,原始坐标X先和一个旋转矩阵相乘,这里因为是45°,所以应该是[(1/2)^(1/2),-(1/2)^(1/2);(1/2)^(1/2),(1/2)^(1/2)])
这时候我们发现了,这个新的网格被转换的方式与原始的网格被对角矩阵转换的方式是完全一致的,也就是都在原始网格在某一方向上被拉伸了3倍。
(这里对原博客进行一点补充,也是自己想的,就是我们先旋转了45°,也就是原始的坐标X先和旋转矩阵相乘得到旋转后的坐标,也就是上左图,接着我们再乘以了M矩阵,得到上右图,但是此时上右图旋转-45°,那么我们就可以在公式直观看出x和y的拉伸关系。于是我们再乘以一个之前45°的旋转矩阵的转置矩阵,因为旋转矩阵是一个正交矩阵,正交矩阵的逆就是正交矩阵的转置,而且旋转-45°就是乘以一个45°的旋转矩阵的逆。接着,乘了之后我们发现,最后把所有的矩阵乘完之后得到的结果就是[3x,y])
说的更数学化一些,给定一个对称矩阵M,我们可以找到一组正交向量vi使得M vi等于vi和标量的乘积。那就是下面这个式子(上面也有一定的说明和推导):
Mvi = λivi
这里λi是标量。从几何意义上讲,这意味着当vi乘上矩阵M时被简单地拉伸或者反射了,也可以理解为M矩阵在vi上的投影向量。因为这个性质,我们称vi是M的特征向量;标量λi被称为特征值。一个可以被证明的重要的事实是:对称矩阵不同的特征值对应的特征向量是正交的。如果我们把对称矩阵的特征向量和网格对齐,那么矩阵对网格的拉伸或反射的方式,与矩阵对特征向量的拉伸或反射的方式,两者是完全一致的。
(2)奇异值分解(SVD)
上面的特征值分解的A矩阵是对称阵,根据EVD可以找到一个(超)矩形使得变换后还是(超)矩形,也即A可以将一组正交基映射到另一组正交基!那么现在来分析:对任意M*N的矩阵,能否找到一组正交基使得经过它变换后还是正交基?答案是肯定的,它就是SVD分解的精髓所在。
用向量解释这个现象:选择适当的正交的单位向量v1和v2,向量Mv1和Mv2也是正交的。
(补充,我们就是为了找到对应v和u向量,且满足条件—v之间正交和u之间正交,所以Mv1和Mv2一定正交,因为与u共线)
用u1和u2来表示Mv1和Mv2方向上的单位向量Mv1和Mv2的长度用σ1和σ2来表示量化了网格在特定方向上被拉伸的效果。σ1和σ2被称为M的奇异值。
由此,我们有
M v1 = σ1 u1
M v2 = σ2 u2
现在给出矩阵M作用于向量x(点坐标)的简单描述。因为向量v1和v2是正交的单位向量,我们有
x = (v1 · x) v1 + (v2 · x) v2
这意味着(v1点乘x是一个标量)
M x = (v1 · x) M v1 + (v2 · x) M v2
M x = (v1 · x) σ1 u1 + (v2 · x) σ2 u2
注意点积可以用向量的转置来计算
v · x = vT x
我们有
M x = u1 σ1 v1T x + u2 σ2 v2T x
M = u1 σ1 v1T + u2 σ2 v2T
通常表述成
M = U Σ VT
其中关于奇异值。(根据另外一篇博客,推导出了奇异值的算法)
现在假设存在M*N矩阵A,事实上,A矩阵将n维空间中的向量映射到k(k<=m)维空间中,k=Rank(A)。现在的目标就是:在n维空间中找一组正交基,使得经过A变换后还是
则A矩阵将这组基映射为:
如果要使他们两两正交
根据假设,存在
所以如果正交基v选择为A'A的特征向量的话,由于A'A是对称阵,v之间两两正交,那么
这样就找到了正交基使其映射后还是正交基了,现在,将映射后的正交基单位化,因为
所以有
所以取单位向量
由此可得
这里U是列向量u1和u2组成的矩阵,Σ是非零项为σ1 和 σ2的对角矩阵,V是列向量v1和v2组成的矩阵。带有上标T的矩阵V是矩阵V的转置。
上面描述了怎样将矩阵M分解成三个矩阵的乘积:V描述了原始空间中的正交基,U描述了相关空间的正交基,Σ描述了V中的向量变成U中的向量时被拉伸的倍数。
(3)SVD求解最小二乘的方法:
奇异值分解,是在A不为方阵时的对特征值分解的一种拓展。奇异值和特征值的重要意义相似,都是为了提取出矩阵的主要特征。
对于齐次线性方程 A*X =0;当A的秩大于列数时,就需要求解最小二乘解,在||X||=1的约束下,其最小二乘解为矩阵A'A最小特征值所对应的特征向量。
那么为什么是最小的特征值对应的x能够是目标函数最小证明齐次线性方程组的最小二乘问题呢?
求解方法有两种(matlab):
1.[V D] =eig(A'*A);D为A'*A的特征值对角矩阵,V为对应的特征向量。找到最小特征值对应的V中的特征向量即为最小二乘解。
2.使用SVD分解矩阵A,[U S V] = svd(A); U 由 A*A'的特征向量组成,V 由 A'*A的特征向量组成,因此,奇异值矩阵S中最小的奇异值对应的V中的奇异向量即为最小二乘解。
Reference:
https://blog.csdn.net/yuxiangyunei/article/details/50114759
https://blog.csdn.net/zhongkejingwang/article/details/43053513
https://blog.csdn.net/ningyaliuhebei/article/details/45058065
https://blog.csdn.net/dsbatigol/article/details/9625211
https://blog.csdn.net/qingcaichongchong/article/details/54972406