Revisit SVD [统计学习方法第2版 读书笔记]

170 阅读5分钟

施工中,欢迎收藏点赞交流喔

由于面宇宙条的时候被面试官小哥强行问到了SVD推导,同时之前项目中也经常遇到过SVD,忽然想起去年双十一还买了本统计学习方法一直在吃灰,抽出半个下午的时间(事实上写了好几天)重新回顾一下,若有错误和困惑之处欢迎交流指正。

数据降维和矩阵分解

奇异值分解(Singular Value Decomposition, SVD)是一种通用的矩阵因子分解的方法,同时也是一种常用的数据降维的方法,其可以通过对数据矩阵分解来更好的反映矩阵的内在结构。

说到矩阵分解,可能读者或许在线性代数课程中接触过矩阵的特征值分解(Eigen Value Decomposition )。我们先从熟悉的矩阵特征值和特征向量的入手,理解矩阵分解的含义。 什么是矩阵的特征值和特征向量?事实上只有方阵才可以进行特征值分解。 对于方阵An×nA_{n \times n},满足

Ax=λxA x = \lambda x

的所有标量λ\lambda和向量xn×1x_{n \times 1}我们称为方阵AA的一个特征值和其对应的特征向量。注意,特征值和特征向量可能有多个且成对出现。

这个定义的一种解释是,如果我们对于一个方阵AA,能找到一个向量x,使它在矩阵A的变换作用下,不发生旋转而只有伸缩,那么说明这个向量能描述矩阵的一些内在特性,称为特征值向量。以二维为例,投影矩阵的特征向量是它投影轴上的向量,旋转矩阵的一个特征向量就是它的旋转轴上的向量。

而如果方阵A有n个线性无关的特征向量(或者是实对称矩阵),那么它分解为如下形式

P1AP=ΛP^{-1}AP = \Lambda

其中Λ\Lambda是由其特征值构成的对角阵。 特征值分解的一种理解是对矩阵A所描述的复杂变换,将其投影到正交的特征向量上,使得这个变换只需要数乘(伸缩)就可以描述。

然而由于特征值分解的限制条件过多,而现实中的大多数矩阵都不是方阵,因此我们引入了奇异值分解。

那么特征值分解和奇异值分解的关系是什么呢? 奇异值分解是建立在特征值分解的基础上的,并且将其条件从实对称矩阵An×nA_{n \times n}扩展到了任意实矩阵Am×nA_{m \times n}

原理

对于任意矩阵 Am×nA _ {m \times n} ,奇异值分解将矩阵AA分解成三个矩阵乘积的形式

A=UΣVTA = U \Sigma V^T

其中 Σm×n\Sigma _ {m \times n} 为一个元素降序排列且非负的对角矩阵,称为奇异值矩阵,
Um×mU _ {m \times m}Vn×nTV^T _ {n \times n}正交方阵,其列向量分别称为左奇异向量右奇异向量。 (正交矩阵指的是矩阵的任意两个行/列向量相乘都为0,故有VTV=IV^TV = I以及VT=V1V^T = V^{-1}的性质)

下面要解决的问题是,是不是任意一个矩阵都可以进行奇异值分解成上述形式?

答案是肯定的。

下面的推导通过构造式的证明方法,分三步来进行。

1. 构造右奇异向量VV和奇异值矩阵

由于AA不是方阵,无法进行特征值分解,我们自然想到对 W=ATAW = A^T A(注意顺序)这个实对称矩阵进行分解。 求得WW的特征值后,我们可以对其进行特征值分解或对角化成

VT(ATA)V=ΛV^T(A^TA)V = \Lambda

其中的VV即是由ATAA^TA的特征向量构成,而 Λ\Lambda为其特征值λ\lambda构成的对角阵。

事实上,右奇异向量VVATAA^TA的特征向量构成的方阵。

我们求得ATAA^TA特征值的平方根,称为A的奇异值

σ=λ\sigma = \sqrt\lambda

并对于所有正数奇异值,按降序排列 σ1σ2σ3σr>0\sigma_1 \geq \sigma_2 \geq \sigma_3 \cdots \sigma_r > 0,构成对角的奇异值矩阵

Σ=(Σ1000)\Sigma = \left( \begin{matrix} \Sigma_1 & 0 \\ 0 & 0 \end{matrix} \right)

其中

Σ1=(σ1σr)\Sigma_1 = \left(\begin{matrix} \sigma_1 & & \\ & \ddots &\\ & & \sigma_r\end{matrix}\right)

为奇异值矩阵的正数部分。

下面将推导一条关键性质。我们可以对V进行划分,将所有正数特征值对应的特征向量构成V1V_1,特征值等于00的特征向量构成V2V_2,即

V=[V1V2]V = \left[\begin{matrix} V_1 & V_2 \end{matrix} \right]

由于,V2V_2列向量构成了ATAA^TA的零空间(指以AA为系数矩阵的齐次线性方程组的解空间),也就是AA的零空间,因此V2V_2列向量构成了AA的零空间的一组标准正交基,即

AV2=0AV_2 = 0

因此得到重要的引理1

A=AI=A(VVT)=AV1V1T(1)A = AI = A(VV^T) = AV_1V_1^T \qquad (1)

2.构造左奇异向量

那么右奇异向量uiu_i和矩阵A的关系是什么呢?

我们令

ui=1σiAviu_i = \frac{1}{\sigma_i} A v_i

写成矩阵形式即得到关键引理2

AV1=U1Σ1AV_1 =U_1 \Sigma_1

事实上,U1U_1的列向量是A的列空间的一组标准正交基。

U2U_2的列向量为为ATA^T的零空间的标准正交基。即

ATU2=0A^TU_2 = 0

最后构成

U=[U1U2]U = \left[\begin{matrix} U_1 & U_2 \end{matrix} \right]

事实上,UU的列向量是AATAA^T的特征向量,即

U(AAT)UT=Λ2U(AA^T)U^T = \Lambda_2

3.验证等于A

利用上述两个引理,就可以轻松证明

UΣVT=[U1U2](Σ1000)[V1V2]=U1Σ1V1T=AV1V1T(lemma 1:AV1=U1Σ1)=A(lemma 2:AV1V1T=A)\begin{aligned} U \Sigma V^T &= \left[\begin{matrix} U_1&U_2 \end{matrix} \right] \left(\begin{matrix} \Sigma_1 & 0 \\ 0 & 0\end{matrix}\right) \left[\begin{matrix} V_1 \\ V_2 \end{matrix} \right] \\ &= U_1 \Sigma_1 V_1^T \\ &= A V_1 V_1^T \quad &(lemma\space 1:AV_1 = U_1 \Sigma_1)\\ &=A &\quad(lemma\space 2:AV_1V_1^T = A) \end{aligned}

几何解释

如果把矩阵相乘看成坐标系的变化,那么奇异值分解中的三次矩阵相乘可以看做一次原坐标系的旋转,之后在新坐标系下伸缩,最后在新坐标下再旋转。

计算

应用

解方程组

矩阵近似

干货总结