奇异值分解

理论描述

奇异值分解(singular value decomposition)是线性代数中一种重要的矩阵分解,在信号处理,统计学等领域有重要应用。其是一个有着很明显物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。SVD是一个能够提取重要特征的方法。

线性变换

上文已经提到,对矩阵 A A A进行特征分解,会得到 A = W Σ W − 1 A=W \Sigma W^{-1} A=WΣW1,中 W W W A A A的特征向量组成的矩阵,和矩阵相乘其实就是做一次线性变换。如下两个例子:
(3) M = [ 3 0 0 1 ] M= \left[ \begin{matrix} 3& 0 \\ 0 & 1 \\ \end{matrix} \right] \tag{3} M=[3001](3)
其对应的线性变换就是如下形式:
在这里插入图片描述
我们可以根据数学的计算看到更加直观的结果:
[ 3 0 0 1 ] [ x y ] = [ 3 x y ] \left[ \begin{matrix} 3& 0 \\ 0 & 1 \\ \end{matrix} \right] \left[ \begin{matrix} x\\ y \\ \end{matrix} \right] = \left[ \begin{matrix} 3x\\ y \\ \end{matrix} \right] [3001][xy]=[3xy]
如上在矩阵为对角阵的情况下,拉伸和收缩都是沿着坐标轴的方向(也就是特征向量)的方向,而对于非对称的非对角矩阵,会有非坐标轴方向的拉伸和收缩。特征值对应的特征向量就是描述矩阵的变化方向,我们想要描述好一个变换,只需要描述好这个变换的主要变换方向就好了。通过特征值分解得到的前n个向量就是矩阵最主要的n个变化方向,利用这n个方向的变化来近似这个矩阵,也就是提取这个矩阵最重要的一部分特征(特征值分解的局限是变化的矩阵必须为方阵)。

正交矩阵

也称作酉矩阵, 一个正交矩阵的变换称作正交变换,这个变换的特点的是不改变向量额尺寸和向量间的夹角

在这里插入图片描述
假设二维空间中的向量 O A OA OA,它在标准坐标系(也就是 e 1 e1 e1 e 2 e2 e2表示的坐标系)中的表示为 ( a , b ) T (a,b)^{T} (a,b)T,其用另一组坐标 e 1 ′ e1^{'} e1, e 2 ′ e2^{'} e2表示为 ( a ′ , b ′ ) T (a^{'},b^{'})^{T} (a,b)T,那么存在矩阵 U U U使得 ( a ′ , b ′ ) T = U ( a , b ) T (a^{'},b^{'})^{T}=U(a, b)^T (a,b)T=U(a,b)T,而矩阵 U U U就是正交矩阵。

由上图可知,

  • 正交变换只是将变换向量用另一组正交基来表示,在这个过程中没有对向量做拉伸,也不会改变向量的空间位置
  • 两个向量同时做正交变换,变换前后两个向量的夹角也不会改变;
    上图是一个旋转的正交变换,可以把 e 1 ′ , e 2 ′ e1^{'}, e2^{'} e1,e2的坐标系看做是 e 1 , e 2 e1,e2 e1,e2坐标系经过旋转某个角度 θ \theta θ得到的, a ′ , b ′ a^{'}, b^{'} a,b实际上是 x x x e 1 ′ , e 2 ′ e1^{'}, e2^{'} e1,e2轴上投影的大小,所以直接做内积可得:
    [ a ′ b ′ ] = [ e 1 ′ e 2 ′ ] x \left[ \begin{matrix} a^{'}\\ b^{'} \\ \end{matrix} \right] = \left[ \begin{matrix} e1^{'}\\ e2^{'} \\ \end{matrix} \right] x [ab]=[e1e2]x
    从图中可以看出:
    e 1 ′ = [ c o s θ s i n θ ]    e 2 ′ = [ − s i n θ c o s θ ] e1^{'}= \left[ \begin{matrix} cos\theta\\ sin\theta \\ \end{matrix} \right]\ \ e2^{'}= \left[ \begin{matrix} -sin\theta\\ cos\theta \\ \end{matrix} \right] e1=[cosθsinθ]  e2=[sinθcosθ]
    所以: U = [ c o s θ s i n θ − s i n θ c o s θ ] U= \left[ \begin{matrix} cos\theta & sin\theta \\ -sin\theta & cos\theta \\ \end{matrix} \right] U=[cosθsinθsinθcosθ]
    总结:
    • 正交矩阵的行(列)向量都是两两正交的单位向量;
    • 它有两种表现:旋转和反射;
    • 正交矩阵将标准正交基映射为标准正交基(即图中从e1、e2到e1’、e2’)

特征分解定义及原理

首先回顾下特征值和特征向量的定义如下:
A x = λ x Ax=\lambda x Ax=λx
其中 A A A是个 n × n n \times n n×n的实对称矩阵 x x x是一个 n n n维向量, λ \lambda λ是矩阵 A A A的一个特征值,而 x x x是矩阵 A A A的特征值 λ \lambda λ所对应的特征向量。
求出特征向量和特征值之后可以将矩阵A进行特征分解。如果求出了矩阵 A A A的n个特征值 λ 1 ≤ λ 2 ≤ . . . ≤ λ n \lambda_1 \leq \lambda_2 \leq ... \leq \lambda_n λ1λ2...λn,以及这 n n n个特征值对应的特征向量 [ x 1 , x 2 , . . . , x n ] [x_1, x_2,..., x_n ] [x1,x2,...,xn],如果这 n n n个特征向量线性无关,那么矩阵 A A A可以用下式的特征分解表示:
A = U Σ U − 1 A=U \Sigma U^{-1} A=UΣU1
其中 U U U是这n个特征向量所组成的 n × n n \times n n×n维矩阵,而 Σ \Sigma Σ为这 n n n个特征值为主对角线的 n × n n \times n n×n维矩阵。
这里选择特殊的矩阵–对角阵

  • 对称矩阵不同特征值对应的特征向量两两正交。
  • 一个矩阵能够相似对角化说明其特征子空间即为列空间,若不能对角化说明其特征子空间为列空间的子空间。

由于对称阵特征向量两两正交,所以 U U U为正交阵,正交阵的逆矩阵等于其转置,此时满足 U T U = I U^TU=I UTU=I,即 U T = U − 1 U^T = U^{-1} UT=U1,也就是说 U U U酉矩阵。这样特征分解表达式就可以写成:
A = U Σ U T A = U \Sigma U^T A=UΣUT
矩阵 A A A分解了,其对应的映射也分解为三个映射,现在假设有 x x x向量,用矩阵A对其进行变换,变换到A的列空间中,那么首先由 U T U^T UT先对 x x x做变换:
A x = U Σ U T x Ax=U\Sigma U^Tx Ax=UΣUTx
U U U是正交阵 U T U^T UT也是正交阵,所以 U T U^T UT x x x的变换是正交变换,也就是将 x x x用新的坐标系来表示,这个坐标系就是 A A A的所有正交的特征向量构成的坐标系。将 x x x A A A的所有特征向量 [ x 1 , x 2 , . . . , x n ] [x_1, x_2,..., x_n ] [x1,x2,...,xn]表示为:
x = a 1 x 1 + a 2 x 2 + . . . + a m x m x=a_1x_1+a_2 x_2+...+a_m x_m x=a1x1+a2x2+...+amxm
则通过第一个变换就可以把 x x x表示为 [ a 1 , a 2 , . . . , a m ] T [a_1, a_2, ...,a_m]^T [a1,a2,...,am]T:
U Σ U T x = U Σ U\Sigma U^Tx=U \Sigma UΣUTx=UΣ

U Σ U T x = U Σ [ x 1 T x 2 T . . . x m T ] ( a 1 x 1 + a 2 x 2 + . . . + a m x m ) = U Σ [ a 1 a 2 . . . a m ] U \Sigma U^Tx=U\Sigma \left[ \begin{matrix} x_1^T \\ x_2^T \\ ... \\ x_m^T \end{matrix} \right] (a_1x_1+a_2 x_2+...+a_m x_m)=U\Sigma \left[ \begin{matrix} a_1 \\ a_2 \\ ... \\ a_m \end{matrix} \right] UΣUTx=UΣx1Tx2T...xmT(a1x1+a2x2+...+amxm)=UΣa1a2...am
紧接着,在新的坐标系下,由中间那个对角 矩阵对新的向量坐标变换,其结果就是将向量往各个轴方向拉伸或压缩:
U Σ [ a 1 a 2 . . . a m ] = U [ λ 1 ⋯ 0 ⋮ ⋱ ⋮ 0 ⋯ λ m ] [ a 1 a 2 ⋮ a m ] = U [ λ 1 a 1 λ 2 a 2 ⋮ λ m a m ] U\Sigma \left[ \begin{matrix} a_1 \\ a_2 \\ ... \\ a_m \end{matrix} \right]=U \left[ \begin{matrix} \lambda_1 & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & \lambda_m\\ \end{matrix} \right] \left[ \begin{matrix} a_1 \\ a_2 \\ \vdots\\ a_m \end{matrix} \right] = U \left[ \begin{matrix} \lambda_1 a_1 \\ \lambda_2 a_2 \\ \vdots\\ \lambda_m a_m \\ \end{matrix} \right] UΣa1a2...am=Uλ100λma1a2am=Uλ1a1λ2a2λmam

从上图可以看到,如果 A A A不是满秩的话,那么就是说对角阵的对角线上元素存在0,这时候就会导致维度退化,这样就会使映射后的向量落入m维空间的子空间中。从上图可以看到,如果 A A A不是满秩的话,那么就是说对角阵的对角线上元素存在0,这时候就会导致维度退化,这样就会使映射后的向量落入m维空间的子空间中。
最后一个变换就是 U U U对拉伸或压缩后的向量做变换,由于 U U U U T U^T UT是互为逆矩阵,所以 U U U变换是 U T U^T UT变换的逆变换。
因此,从对称阵的分解对应的映射分解来分析一个矩阵的变换特点是非常直观的。假设对称阵特征值全为1那么显然它就是单位阵,如果对称阵的特征值有个别是0其他全是1,那么它就是一个正交投影矩阵,它将m维向量投影到它的列空间中。

根据对称阵 A A A的特征向量,如果 A A A是2 * 2的,那么就可以在二维平面中找到这样一个矩形,是的这个矩形经过 A A A变换后还是矩形:
在这里插入图片描述
这个矩形的选择就是让其边都落在A的特征向量方向上,如果选择其他矩形的话变换后的图形就不是矩形了!

注意到要进行特征分解,矩阵 A A A必须为方阵。那么如果 A A A不是方阵,就需要SVD登场了。

SVD的定义

SVD和特征分解不同,其不要求分解的矩阵为方阵。假设我们的矩阵 A A A是一个 m × n m \times n m×n的就矩阵,那么矩阵 A A A的SVD为:
A = U Σ V T A = U\Sigma V^T A=UΣVT
其中 U U U m × m m \times m m×m阶酉矩阵; Σ \Sigma Σ m × n m \times n m×n阶非负实数对角矩阵;而 V T V^T VT V V V的共轭转置,是 n × n n \times n n×n阶酉矩阵。 Σ \Sigma Σ对角线上的元素 Σ i , i \Sigma_{i,i} Σi,i即为 M M M的奇异值。(酉矩阵: U U U V V V都是酉矩阵, 既满足 U T U = I , V T V = I U^TU=I, V^TV=I UTU=I,VTV=I
在这里插入图片描述

如何求解SVD

  • 右奇异向量
    如果将 A T A^T AT A A A做矩阵乘法,那么得到一个 n × n n \times n n×n的一个方阵 A T A A^TA ATA,既然 A T A A^TA ATA是方针,那么我们就可以进行特征分解,得到的特征值和特征向量满足下式:
    ( A T A ) v i = λ i v i (A^TA)v_i = \lambda_i v_i (ATA)vi=λivi
    那么我们就可以得到矩阵 A T A A^TA ATA n n n个特征值和对应的 n n n个特征向量 v v v了。将 A T A A^TA ATA的所有特征向量张成一个 n × n n \times n n×n的矩阵 V V V,就是我们SVD里面的 V V V矩阵了。一般我们将 V V V中的每个特征向量叫做 A A A的右奇异向量。

  • 左奇异向量
    A A A A A A的转置做矩阵乘法,那么会得到 m × m m \times m m×m的一个方针 A A T AA^T AAT,同理可以对其进行特征分解,得到的特征值和特征向量满足下式:
    ( A A T ) μ i = λ i μ i (AA^T)\mu_i = \lambda_i \mu_i (AAT)μi=λiμi
    那么就可以得到矩阵 A A T AA^T AAT的m个特征值和对应的m个特征向量 μ i \mu_i μi了。将其所有特征向量张成一个 m × m m \times m m×m的矩阵 U U U,就是SVD矩阵里面的 U U U矩阵,一般将 U U U中的每个特征向量叫做 A A A的记忆向量。

  • 奇异值矩阵
    想要求 Σ \Sigma Σ,只需要求出其对角线上每个奇异值 σ \sigma σ,我们注意到:
    A = U Σ V T ⇒ A V = U Σ V T V ⇒ A V = U Σ ⇒ A v i = σ i μ i ⇒ σ i = A v i / μ i A = U \Sigma V^T \Rightarrow AV= U \Sigma V^TV \Rightarrow AV= U \Sigma \Rightarrow Av_i = \sigma_i \mu_i \Rightarrow \sigma_i = Av_i/\mu_i A=UΣVTAV=UΣVTVAV=UΣAvi=σiμiσi=Avi/μi
    这样就可以求出我们的每个奇异值,进而求出奇异值矩阵 Σ 。 \Sigma。 Σ

上面说 A T A A^TA ATA的特征向量组成的就是 V V V矩阵,这有什么根据呢?这个很容易证明,以矩阵 V V V为例:

A = U Σ V T ⇒ A T = V Σ T U T ⇒ A T A = V Σ T U T U Σ V T = V Σ 2 V T A = U \Sigma V^T \Rightarrow A^T = V\Sigma^T U^T \Rightarrow A^TA = V\Sigma^T U^T U \Sigma V^T = V \Sigma^2V^T A=UΣVTAT=VΣTUTATA=VΣTUTUΣVT=VΣ2VT
可以看出 A T A A^TA ATA的特征向量组成的的确就是我们SVD中的 V V V矩阵( A T A V = V Σ 2 A^TAV=V\Sigma^2 ATAV=VΣ2),类似的方法可以的到 A A T AA^T AAT的特征向量组成的就是我们SVD中的 U U U矩阵。

进一步还可以看出特征值矩阵等于奇异值矩阵的平方,也就是特征值和奇异值满足如下关系:
σ i = λ i \sigma_i = \sqrt{\lambda_i} σi=λi
这样也就是说,我们可以不用 σ i = A v i / μ i \sigma_i = Av_i/\mu_i σi=Avi/μi来计算奇异值,也可以通过求出 A T A A^TA ATA的特征值取平方根来求奇异值。

SVD原理

上面的特征值分解的 A A A矩阵是对称阵,根据特征分解可以找到一个超矩阵使得变换后还是超矩阵( A A A可以将一组正交基映射到另一组正交基)。那么对于现在来分析:对任意 M × N M \times N M×N的矩阵,是否能够找到一组正交基使得经过它的变换后仍然还是正交基?答案是肯定的,它就是SVD分解的精髓所在。

现在的目标是在 n n n维空间在红找到一组正交基,使得经过 A A A变换后还是正交的。假设已经找到这样一组正交基:
{ v 1 , v 2 , . . . , v n } \{ v_1, v_2, ..., v_n\} {v1,v2,...,vn}
则矩阵 A A A将这组基映射为:
{ A v 1 , A v 2 , . . . , A v n } \{ Av_1, Av_2, ..., Av_n\} {Av1,Av2,...,Avn}
如果它们两两正交,即:
A v i ⋅ A v j = ( A v i ) T A v j = v i T A T A v j = 0 Av_i \centerdot Av_j = (Av_i)^TAv_j=v_i^TA^TAv_j=0 AviAvj=(Avi)TAvj=viTATAvj=0
根据假设,存在:
v i T v j = v i v j = 0 v_i^Tv_j = v_i v_j=0 viTvj=vivj=0
所以如果选择正交基 v v v A T A A^TA ATA的特征向量的话,由于 A T A A^TA ATA是对称阵, v v v之间两两正交,那么:
v i T A T A v j = v i T λ j v j = λ j v i T v j = λ j v i ⋅ v j = 0 v_i^TA^TAv_j=v_i^T \lambda_j v_j=\lambda_j v_i^T v_j =\lambda_jv_i \centerdot v_j=0 viTATAvj=viTλjvj=λjviTvj=λjvivj=0
这样就找到了一组正交基 v v v,使其映射后还是正交基。现在将映射后的正交基单位化,因为:
A v i ⋅ A v i = λ i v i ⋅ v i = λ i Av_i \centerdot Av_i= \lambda_i v_i \centerdot v_i = \lambda_i AviAvi=λivivi=λi
所以
∣ A v i ∣ 2 = λ i ≥ 0 |Av_i|^2=\lambda_i \geq 0 Avi2=λi0
所以取单位向量:
A v i = σ i μ i , σ i = λ i , 0 ≤ i ≤ k , k = R a n k ( A ) Av_i = \sigma_i \mu_i, \sigma_i = \sqrt{\lambda_i}, 0 \leq i \leq k, k=Rank(A) Avi=σiμi,σi=λi ,0ik,k=Rank(A)

k &lt; i &lt; = m k &lt; i &lt;= m k<i<=m时,对 μ 1 , μ 2 , … , μ k \mu_1,\mu_2,…,\mu_k μ1μ2μk进行扩展 μ k + 1 , … , μ m \mu_{k+1},…,\mu_m μk+1μm,使得 μ 1 , μ 2 , … , μ m \mu_1,\mu_2,…,\mu_m μ1μ2μm为m维空间中的一组正交基,即将 { μ 1 , μ 2 , … , μ k } \{ \mu_1,\mu_2,…,\mu_k \} {μ1μ2μk}正交基扩展成 { μ 1 , μ 2 , … , μ m } R m \{ \mu_1,\mu_2,…,\mu_m \} R^m {μ1μ2μm}Rm空间的单位正交基,同样的,对 v 1 , v 2 , … , v k v_1,v_2,…,v_k v1v2vk进行扩展 v ( k + 1 ) , … , v n v_{(k+1)},…,v_n v(k+1),,vn(这n-k个向量存在于 A A A的零空间中,即 A x = 0 Ax=0 Ax=0的解空间的基),使得 v 1 , v 2 , … , v n v_1,v_2,…,v_n v1v2vn n n n维空间中的一组正交基,即: 在A的零空间中选择 { v k + 1 , v k + 2 , … , v n } \{v_{k+1},v_{k+2},…,v_n\} {vk+1vk+2vn}使得 A v i = 0 , i &gt; k Av_i = 0,i &gt; k Avi=0i>k并取 σ i = 0 \sigma_i = 0 σi=0则可得到:在这里插入图片描述
继而得到 A A A矩阵的奇异值分解:
A = U Σ V T A=U \Sigma V^T A=UΣVT

现在可以来对A矩阵的映射过程进行分析了:如果在n维空间中找到一个(超)矩形,其边都落在 A T A A^TA ATA的特征向量的方向上,那么经过A变换后的形状仍然为(超)矩形!
v i v_i vi A T A A^TA ATA的特征向量,称为 A A A的右奇异向量, μ i = A v i \mu_i=Av_i μi=Avi实际上为 A A T AA^T AAT的特征向量,称为 A A A的左奇异向量。

在这里插入图片描述
利用矩阵分块乘法展开得到:
在这里插入图片描述
在这里插入图片描述
另:
在这里插入图片描述
在这里插入图片描述
A = X Y A=XY A=XY即是A的满秩分解。

SVD的一些性质

对于奇异值,它和我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列的,而且奇异值减少的特别快。在很多情况下,前10%甚至1%的奇异值的和就占了全部奇异值之和的99%以上的比例。也就是说我们可以用最大的k个奇异值和对应的左右奇异值向量来近似描述矩阵:
A m × n = U m × m Σ m × n V n × n T ≈ U m × k Σ k × k V k × n T A_{m \times n}=U_{m \times m} \Sigma_{m \times n}V^T_{n \times n} \approx U_{m \times k} \Sigma_{k \times k} V^T_{k \times n} Am×n=Um×mΣm×nVn×nTUm×kΣk×kVk×nT
其中k要比n小很多,也就是一个大的矩阵 A A A 可以用三个小的矩阵来表示。如下图所示,矩阵 A A A只需要灰色部分的三个小矩阵就可以 近似描述了。k越接近于n,结果越接近于A。
在这里插入图片描述
由于SVD的这个重要性质,SVD可以用于PCA降维,来做数据压缩和去噪,也可以用于推荐算法,将效用矩阵进行特征分解,得到隐含的用户需求来做推荐。同时也可以用于NLP中的算法,比如潜在语义分析(LSI)。

SVD用于PCA降维

主成分分析PCA被用于降维,需要找到样本协方差矩阵 X T X X^TX XTX的最大的d个特征向量,然后用这最大的d个特征向量张成的矩阵来做低维投影降维。可以看出,在这个过程中需要先求出协方差矩阵 X T X X^TX XTX,当样本数和特征数很多的时候,这个计算量是很大的。

而SVD也可以得到协方差矩阵 X T X X^TX XTX最大的d个特征向量张成的矩阵。但是SVD的一个好处是,一些实现算法可以不先求出协方差矩阵 X T X X^TX XTX,也能够求出右奇异矩阵 V V V。也就是说,我们的PCA算法可以不用做特征分解,而是通过SVD来完成的。这个方法在样本量很大的时候很有效。实际上,scikit-learn的PCA算法的背后真正的实现就是用的SVD,而不是我们我们认为的暴力特征分解。

可以看出,PCA仅仅使用了右奇异矩阵,右奇异矩阵可以用于列数即特征维度的压缩,那么相应的左奇异矩阵可以用于行数的压缩:假设我们的样本是 m × n m \times n m×n的矩阵 X X X,如果我们通过SVD找到了矩阵 X X T XX^T XXT最大的d个特征向量张成的 m × d m \times d m×d维矩阵 U U U,则我们如果进行如下处理:
X d × n ′ = U d × m T X m × n X^{&#x27;}_{d \times n} = U^{T}_{d \times m} X_{m \times n} Xd×n=Ud×mTXm×n
可以得到一个 d × n d \times n d×n的矩阵 X ′ X^{&#x27;} X,这个矩阵和我们原来的 m × n m \times n m×n维样本 X X X相比,行数从m减到了d,借鉴,左奇异矩阵可以用于行数的压缩。

SVD小结

在很多的机器学习算法中都有它的身影,它有很多的优点:

  • 可以实行并行化
  • 原理简单

而缺点:

  • 分解出的矩阵解释性不强,但是不影响使用。

参考资料

  1. 奇异值分解(SVD)原理与在降维中的应用

  2. 奇异值分解(SVD)原理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值