特征值分解和SVD分解是两种将矩阵进行分解的经典方法,两者在机器学习的各类算法中被广泛使用(如PCA降维、文本LSI、推荐算法等等)、
定义:对于方阵 A \boldsymbol A A,若存在向量 ν \nu ν,使得线性变换 A ν \boldsymbol A\nu Aν相当于对 ν \nu ν进行了伸缩变换: A ν = λ ν \boldsymbol A\nu=\lambda\nu Aν=λν,则将 ν \nu ν称为方阵 A \boldsymbol A A的特征向量,而对应的 λ \lambda λ称为特征值。
若 A \boldsymbol A A存在与维度相同的 n n n个实数特征值(包括重根),则存在矩阵 V \boldsymbol V V(其各列即为各特征向量)和对角矩阵 Λ \boldsymbol \Lambda Λ(其对角线值为各特征值,一般从大到小排列)使得 A V = V Λ \boldsymbol {AV}= V\Lambda AV=VΛ,上式又可写成 A = V Λ V − 1 \boldsymbol {A=V \Lambda V^{-1}} A=VΛV−1。
也就是说 A ∼ Λ \boldsymbol A\sim \Lambda A∼Λ,根据相似矩阵的性质,线性算子 A \boldsymbol A A与在 V − 1 \boldsymbol V^{-1} V−1基定义下的线性算子 Λ \Lambda Λ作用一样,若 V − 1 \boldsymbol V^{-1} V−1各向量可写为单位正交向量,而 Λ \boldsymbol \Lambda Λ为对角阵,这些优势的性质使得矩阵运算更加方便。
若 A \boldsymbol A A为对称阵,可证明其不同特征值的特征向量两两正交,其特征向量构成的空间(特征空间)即为 A \boldsymbol A A的列空间。此时 A = V Λ V − 1 = V Λ V T \boldsymbol {A=V \Lambda V^{-1}=V \Lambda V^{T}} A=VΛV−1=VΛVT
假设 V − 1 \boldsymbol V^{-1} V−1中各特征向量的重要性一致,则各特征向量对应的特征值则体现了该方向特征的重要性。通过保留最大的若干个特征方向,可以在减小特征的基础上尽量的保证数据信息。
特征分解存在优良的性质,但其缺点是非常明显的——仅适用于方阵。真实的数据环境下,意味着特征维度=数据维度,这个前提过于严苛。而对于更一般的长方形矩阵,能否进行类似的基变换和矩阵分解呢?这就是更普适的SVD分解。
定义:对于长方形矩阵 A \boldsymbol A A,若存在向量 u \boldsymbol u u和向量 v \boldsymbol v v,以及一个标量 σ \sigma σ,使得 A v = σ u \boldsymbol {Av}=\sigma \boldsymbol u Av=σu且 A T u = σ v \boldsymbol {A^Tu}=\sigma \boldsymbol v ATu=σv,则称 u \boldsymbol u u和 v \boldsymbol v v分别是 A \boldsymbol A A的左奇异向量和右奇异向量, σ \sigma σ是 A \boldsymbol A A的一个奇异值。对于所有这样的列向量构成的左奇异矩阵 U \boldsymbol U U和右奇异矩阵 V \boldsymbol V V,以及对应奇异值构成的对角阵 Σ \boldsymbol \Sigma Σ,其与 A \boldsymbol A A满足如下的的奇异值分解:
A = U Σ V T \boldsymbol {A=U\Sigma V^T} A=UΣVT
特殊的,如果能否进一步取两组单位正交基分别构成左奇异矩阵 U \boldsymbol U U和右奇异矩阵 V \boldsymbol V V,从而通过长方形矩阵 A \boldsymbol A A及其转置可以实现这两组基之间的相互转换,那就更好不过了。
现假设存在一组单位正交基 v i , . . . , v j \boldsymbol {v_i},...,\boldsymbol {v_j} vi,...,vj,要使线性变换后仍为正交基,即 u i ∗ u j = v i T A T A v j = 0 \boldsymbol {u_i *u_j=v_i^TA^TAv_j=0} ui∗uj=viTATAvj=0,若取 v i \boldsymbol{v_i} vi为 A T A \boldsymbol {A^TA} ATA的特征向量,则上式可进一步写成 u i ∗ u j = λ j v i T v j = 0 \boldsymbol {u_i *u_j}=\lambda_j \boldsymbol{v_i^Tv_j}=0 ui∗uj=λjviTvj=0,显然变换后的向量满足正交性。对该向量进行单位化,取 u i = A v i ∣ ∣ A v i ∣ ∣ 2 = A v i v i T A T A v i = A v i λ i \boldsymbol {u_i }=\frac{\boldsymbol {A v_i }}{||\boldsymbol {A v_i }||_2}=\frac{\boldsymbol {A v_i }}{\sqrt{\boldsymbol {v_i^TA^TAv_i}}}=\frac{\boldsymbol {A v_i }}{\sqrt{\lambda_i}} ui=∣∣Avi∣∣2Avi=viTATAviAvi=λiAvi
称 σ i = λ i \sigma_i=\sqrt{\lambda_i} σi=λi为奇异值,则 σ i u i = A v i \sigma_i\boldsymbol {u_i }=\boldsymbol {Av_i } σiui=Avi,两边同乘以 A T \boldsymbol A^T AT,可得 σ i v i = A T u i \sigma_i\boldsymbol {v_i }=\boldsymbol {A^Tu_i} σivi=ATui,这就是前面所提到两组正交基之间可通过矩阵及其转置相互转换。
值的注意的是: A T A \boldsymbol {A^TA} ATA为对称阵,若为实对称阵,其特征值也为实数。根据 R a n k ( A T A ) ≤ R a n k ( A ) Rank{(\boldsymbol {A^TA})}\leq Rank(\boldsymbol A) Rank(ATA)≤Rank(A),可见对于 A m × n \boldsymbol A_{m\times n} Am×n,特征数 n n n一般小于样本数 m m m,这也意味着特征值可能会取0,此时对应左奇异向量和右奇异向量又该怎么取?
我们回到奇异值分解的最终目标上:
A = U Σ V T \boldsymbol {A=U\Sigma V^T} A=UΣVT
U \boldsymbol U U中的列向量可以视为 A \boldsymbol A A中的列空间的单位正交基; V \boldsymbol V V中的列向量可以视为 A \boldsymbol A A中的行空间的单位正交基。根据矩阵的4个子空间, A \boldsymbol A A的零空间与行空间向量彼此正交,而左零空间与列空间向量彼此正交。因此,我们可以用 A \boldsymbol A A的左零空间补充 U \boldsymbol U U中的剩余列向量;而用 A \boldsymbol A A的零空间补充 V \boldsymbol V V中的剩余列向量。
用分块矩阵可写成:
A = U Σ V T = [ U 1 U 2 ] [ σ 1 0 . . . 0 0 σ 2 . . . 0 . . . . . . σ k . . 0 0 . . . 0 ] [ V 1 V 2 ] T \boldsymbol {A=U\Sigma V^T=\left[\begin{matrix}U_1&U_2\end{matrix}\right]\left [ \begin{matrix}\sigma_1&0&...&0\\0&\sigma_2&...&0\\...&... &\sigma_k&..\\0&0&...&0\end{matrix}\right ]\left[\begin{matrix}V_1&V_2\end{matrix}\right]^T} A=UΣVT=[U1U2]⎣⎢⎢⎡σ10...00σ2...0......σk...00..0⎦⎥⎥⎤[V1V2]T
其中各向量的意义为:
V 1 \boldsymbol V_1 V1: A \boldsymbol A A的行空间对于的单位正交基。
V 2 \boldsymbol V_2 V2: A \boldsymbol A A的零空间对于的单位正交基。
U 1 \boldsymbol U_1 U1: A \boldsymbol A A的列空间对于的单位正交基。
U 2 \boldsymbol U_2 U2: A \boldsymbol A A的左零空间对于的单位正交基。
从线性算子的角度来看,奇异值分解可视为将线性算子 A \boldsymbol A A分解为三个子线性算子,对应于三个简单的线性变换:
(1)将输入向量投影到右奇异向量上;
(2)将右奇异向量按照对应的奇异值进行拉伸变换;
(3)将拉伸后的结果再投影到左奇异向量上。
通常将奇异值大小从大到小进行有序排列,对应的有序集合叫矩阵的谱,包含了矩阵的大量信息,比如奇异值之间的差异影响着矩阵解的稳定性,最大和最小的奇异值绝对值之间的比 率( 条件数 )影响着一个迭代求解器找到矩阵解的速度。
奇异值往往衰减特别快,因此可以用少量的几个奇异值和对应的奇异值向量去描述高维的空间。即:
A m × n = U m × k Σ k × k V k × m T \boldsymbol {A_{m\times n}=U_{m\times k}\Sigma_{k\times k} V^T_{k\times m}} Am×n=Um×kΣk×kVk×mT
所以奇异值广泛用于数据降维、噪声过滤、信息提取等领域。