施工中,欢迎收藏点赞交流喔
由于面宇宙条的时候被面试官小哥强行问到了SVD推导,同时之前项目中也经常遇到过SVD,忽然想起去年双十一还买了本统计学习方法一直在吃灰,抽出半个下午的时间(事实上写了好几天)重新回顾一下,若有错误和困惑之处欢迎交流指正。
数据降维和矩阵分解
奇异值分解(Singular Value Decomposition, SVD)是一种通用的矩阵因子分解的方法,同时也是一种常用的数据降维的方法,其可以通过对数据矩阵分解来更好的反映矩阵的内在结构。
说到矩阵分解,可能读者或许在线性代数课程中接触过矩阵的特征值分解(Eigen Value Decomposition )。我们先从熟悉的矩阵特征值和特征向量的入手,理解矩阵分解的含义。
什么是矩阵的特征值和特征向量?事实上只有方阵才可以进行特征值分解。
对于方阵An×n,满足
Ax=λx
的所有标量λ和向量xn×1我们称为方阵A的一个特征值和其对应的特征向量。注意,特征值和特征向量可能有多个且成对出现。
这个定义的一种解释是,如果我们对于一个方阵A,能找到一个向量x,使它在矩阵A的变换作用下,不发生旋转而只有伸缩,那么说明这个向量能描述矩阵的一些内在特性,称为特征值向量。以二维为例,投影矩阵的特征向量是它投影轴上的向量,旋转矩阵的一个特征向量就是它的旋转轴上的向量。
而如果方阵A有n个线性无关的特征向量(或者是实对称矩阵),那么它分解为如下形式
P−1AP=Λ
其中Λ是由其特征值构成的对角阵。
特征值分解的一种理解是对矩阵A所描述的复杂变换,将其投影到正交的特征向量上,使得这个变换只需要数乘(伸缩)就可以描述。
然而由于特征值分解的限制条件过多,而现实中的大多数矩阵都不是方阵,因此我们引入了奇异值分解。
那么特征值分解和奇异值分解的关系是什么呢? 奇异值分解是建立在特征值分解的基础上的,并且将其条件从实对称矩阵An×n扩展到了任意实矩阵Am×n。
原理
对于任意矩阵 Am×n ,奇异值分解将矩阵A分解成三个矩阵乘积的形式
A=UΣVT
其中 Σm×n 为一个元素降序排列且非负的对角矩阵,称为奇异值矩阵,
Um×m,Vn×nT 为正交方阵,其列向量分别称为左奇异向量 和 右奇异向量。
(正交矩阵指的是矩阵的任意两个行/列向量相乘都为0,故有VTV=I以及VT=V−1的性质)
下面要解决的问题是,是不是任意一个矩阵都可以进行奇异值分解成上述形式?
答案是肯定的。
下面的推导通过构造式的证明方法,分三步来进行。
1. 构造右奇异向量V和奇异值矩阵
由于A不是方阵,无法进行特征值分解,我们自然想到对 W=ATA(注意顺序)这个实对称矩阵进行分解。
求得W的特征值后,我们可以对其进行特征值分解或对角化成
VT(ATA)V=Λ
其中的V即是由ATA的特征向量构成,而 Λ为其特征值λ构成的对角阵。
事实上,右奇异向量V是ATA的特征向量构成的方阵。
我们求得ATA特征值的平方根,称为A的奇异值
σ=λ
并对于所有正数奇异值,按降序排列
σ1≥σ2≥σ3⋯σr>0,构成对角的奇异值矩阵
Σ=(Σ1000)
其中
Σ1=⎝⎛σ1⋱σr⎠⎞
为奇异值矩阵的正数部分。
下面将推导一条关键性质。我们可以对V进行划分,将所有正数特征值对应的特征向量构成V1,特征值等于0的特征向量构成V2,即
V=[V1V2]
由于,V2列向量构成了ATA的零空间(指以A为系数矩阵的齐次线性方程组的解空间),也就是A的零空间,因此V2列向量构成了A的零空间的一组标准正交基,即
因此得到重要的引理1
A=AI=A(VVT)=AV1V1T(1)
2.构造左奇异向量
那么右奇异向量ui和矩阵A的关系是什么呢?
我们令
ui=σi1Avi
写成矩阵形式即得到关键引理2。
AV1=U1Σ1
事实上,U1的列向量是A的列空间的一组标准正交基。
令U2的列向量为为AT的零空间的标准正交基。即
最后构成
U=[U1U2]
事实上,U的列向量是AAT的特征向量,即
U(AAT)UT=Λ2
3.验证等于A
利用上述两个引理,就可以轻松证明
UΣVT=[U1U2](Σ1000)[V1V2]=U1Σ1V1T=AV1V1T=A(lemma 1:AV1=U1Σ1)(lemma 2:AV1V1T=A)
几何解释
如果把矩阵相乘看成坐标系的变化,那么奇异值分解中的三次矩阵相乘可以看做一次原坐标系的旋转,之后在新坐标系下伸缩,最后在新坐标下再旋转。
计算
应用
解方程组
矩阵近似
干货总结