【线性代数08】奇异值分解SVD及其应用

  这篇文章围绕SVD(Singular Value Decomposition)展开,先展示其基本流程,再说明其如何用于一般性地求违逆和用于PCA降维时的内在机理,当然,这只是SVD应用中的两个典型。另,MIT18.06课程的相关内容到此告一段落,有空将追下一部18.065。


SVD

先来看SVD的定义
A = U Σ V ∗ A = U\Sigma V^* A=UΣV
也就是说,奇异值分解将一个矩阵分解成3部分,与特征值分解一样完成了对A的近似对角化。提醒一下,酉矩阵是标准正交矩阵在复数域上的推广:对于实矩阵而言,其逆就等于其转置,对于复矩阵而言,其逆就等于其共轭转置。


几何变换

从几何变换视角去看,其是两次旋转与一次拉伸的组合:
在这里插入图片描述
相应解释如下

The SVD separates a matrix into three steps: (orthogonal) x (diagonal) x (orthogonal). Ordinary words can express the geometry behind it: (rotation) x (stretching) x (rotation)

当用矩阵乘法对照到空间变换时,应遵循从右向左看的规则。于是奇异值分解对空间变换而言,是先进行一次旋转,再进行一次拉伸,最后又进行一次旋转,即图中所展示出的流程。


求解

如何求出这三个部分呢?来看一段提纲挈领的话

The singular value theorem for A A A is the eigenvalue theorem for A T A A^T A ATA and A A T AA^T AAT.

所谓 A A A的奇异值定理,即是 A T A A^T A ATA A A T AA^T AAT的特征值定理。鉴于 U U U(m阶)和 V ∗ V^* V(n阶)均为酉矩阵,所以可以想到 A T A A^TA ATA A A T AA^T AAT(对称矩阵)其实将消去一个酉矩阵的影响,即
A A T = U Σ T V ∗ V Σ U ∗ = U Σ T Σ U ∗ A T A = V Σ U ∗ U Σ T V ∗ = V Σ Σ T V ∗ AA^T=U\Sigma^T V^* V\Sigma U^*=U\Sigma^T\Sigma U^* \\ A^TA=V\Sigma U^*U\Sigma^T V^* =V\Sigma\Sigma^T V^* AAT=UΣTVVΣU=UΣTΣUATA=VΣUUΣTV=VΣΣTV
可见, A A T AA^T AAT可用酉矩阵 U U U进行对角化, A T A A^TA ATA可用酉矩阵 V V V进行对角化,而 Σ T Σ \Sigma^T\Sigma ΣTΣ Σ Σ T \Sigma \Sigma^T ΣΣT的对角线元素都是 σ i 2 \sigma_i^2 σi2,其余为0。于是此问题进一步变成对 A T A A^T A ATA A A T AA^T AAT进行特征值分解的问题。利用行列式,就可求得它们对应的特征值


比如求解这么个例子
A = [ 1 2 3 4 5 6 ] A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} A=[142536]
计算 A T A A^TA ATA
A T A = [ 1 4 2 5 3 6 ] [ 1 2 3 4 5 6 ] = [ 17 22 27 22 29 36 27 36 45 ] A^TA= \begin{bmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{bmatrix} \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}= \begin{bmatrix} 17 & 22 & 27 \\ 22 & 29 & 36 \\ 27 & 36 & 45 \end{bmatrix} ATA= 123456 [142536]= 172227222936273645
然后计算其特征值
∣ A T A − λ E ∣ = ∣ 17 − λ 22 27 22 29 − λ 36 27 36 45 − λ ∣    ? |A^TA-\lambda E|=\begin{vmatrix} 17-\lambda & 22 & 27 \\ 22 & 29-\lambda & 36 \\ 27 & 36 & 45-\lambda \end{vmatrix} \ \ ? ATAλE= 17λ22272229λ36273645λ   ?
求解出特征值后再利用 ( A T A − λ E ) (A^TA - \lambda E) (ATAλE)的线性相关性即可求得特征向量,最后组合即可求得酉矩阵V。


验证

我们可以在Matlab中验证上述过程,其中奇异值分解的命令为svd

>> A = [1,2,3;4,5,6];
>> B = A'*A  % 求得酉矩阵V

B =

    17    22    27
    22    29    36
    27    36    45

>> [V,D]= eig(B)

V =

   -0.4082   -0.8060    0.4287
    0.8165   -0.1124    0.5663
   -0.4082    0.5812    0.7039


D =

   -0.0000         0         0
         0    0.5973         0
         0         0   90.4027
         
>> C = A * A'  % 求得酉矩阵U

C =

    14    32
    32    77

>> [U,D]= eig(C)

U =

   -0.9224    0.3863
    0.3863    0.9224


D =

    0.5973         0
         0   90.4027

>> [U,S,V]=svd(A)  % svd 验证

U =

   -0.3863   -0.9224
   -0.9224    0.3863

% 交换Σ中两个奇异值的次序,其对应的特征向量也要交换次序,特征向量的正负并不影响正交性

S =

    9.5080         0         0
         0    0.7729         0

% S中的奇异值是之前特征值的平方

V =

   -0.4287    0.8060    0.4082
   -0.5663    0.1124   -0.8165
   -0.7039   -0.5812    0.4082

违逆

通过奇异值分解就可一般性地求得违逆(Pseudo inverse),这是我们在【线性代数01】矩阵的转置和逆中按下不表的内容。现在我们具体地谈谈。


空间展示

先来看其空间展示:
在这里插入图片描述
为什么矩阵的逆不存在?两个直观的原因,一是对 m × n m \times n m×n矩阵缺乏定义;二是 n × n n \times n n×n矩阵未能满秩。在空间展示中,这两个面临的含义是一致的,即展现为列空间和行空间中彼此秩为r的空间转换。具体来看,即是

A A + AA^+ AA+ = projection matrix onto the column space of A A A      A + A A^+A A+A = projection matrix onto the row space of A A A

这正是figure 7.6中标题所阐明的内容: A A A所在列空间中的m维向量 A x + Ax^+ Ax+ m × 1 m \times 1 m×1 )( x + x^+ x+是对 A A A所在列空间中基底的线性组合,故 A x + Ax^+ Ax+ A A A的列空间中),通过左乘 A + A^+ A+,将回到 A A A所在的行空间,即 A + A x + = x + A^+Ax^+=x^+ A+Ax+=x+,其中 x + x^{+} x+的大小为 n × 1 n \times 1 n×1。于是我们理论上应该有:

Trying for A + A = I A^+A = I A+A=I (投影后能尽量像一个单位阵)

而这实际上也就是逆的定义, A + A A^+A A+A实现的功能也就是将向量投影到 A A A所在的行空间中。


求解

考虑到A的奇异值分解为
A = U Σ V T A = U\Sigma V^T A=UΣVT
如果我们构造违逆 A + A^+ A+
A + = V Σ + U T A^+ = V\Sigma ^+ U^T A+=VΣ+UT
其中 Σ + \Sigma ^+ Σ+ Σ \Sigma Σ的违逆:先取 Σ \Sigma Σ的转置,由于其近似为对角阵,故非零元素取其共轭的倒数,零元素仍旧为零即可。即
Σ + = [ 1 / σ 1 1 / σ 2 ⋱ 0 ] n × m \Sigma^+ = \begin{bmatrix} 1/\sigma_1 & & & \\ & 1/\sigma_2 & & \\ & & \ddots & \\ & & & 0 \end{bmatrix}_{n \times m} Σ+= 1/σ11/σ20 n×m
我们来看 A A + AA^+ AA+ A + A A^+A A+A
A A + = U Σ V T V Σ + U T = U Σ Σ + U T = U [ I 0 ] m × m U T = U D m U T AA^+ = U\Sigma V^T V\Sigma ^+ U^T=U\Sigma\Sigma^+ U^T=U \begin{bmatrix}I & \\ & 0 \end{bmatrix} _{m \times m}U^T=U D_mU^T AA+=UΣVTVΣ+UT=UΣΣ+UT=U[I0]m×mUT=UDmUT
A + A = V Σ + U T U Σ V T = V Σ + Σ V T = V [ I 0 ] n × n V T = V D n V T A^+A = V\Sigma ^+ U^T U\Sigma V^T= V\Sigma ^+ \Sigma V^T=V \begin{bmatrix}I & \\ & 0 \end{bmatrix} _{n \times n}V^T=VD_nV^T A+A=VΣ+UTUΣVT=VΣ+ΣVT=V[I0]n×nVT=VDnVT
中间的对角阵 D D D最大程度上逼近了单位阵 I I I ,可以想象,如果 D D D就是 I I I,那么对应矩阵乘法的结果也就是 I I I这也是为什么列满秩矩阵( r = n ≤ m r = n \le m r=nm )有左逆矩阵(有 D n = I D_n=I Dn=I,对应 A + A = I A^+A = I A+A=I);行满秩矩阵( r = m ≤ n r = m \le n r=mn )有右逆矩阵(有 D m = I D_m=I Dm=I,对应 A A + = I AA^+ = I AA+=I);而当行列均满秩,即取了满秩的方阵时,逆存在(有 D n = I D_n=I Dn=I D m = I D_m=I Dm=I,对应 A + A = A A + = I A^+A = AA^+ = I A+A=AA+=I);而行列均不满秩时,违逆则保留了对单位阵最大程度的逼近。


验证

沿用这个A的例子
A = [ 1 2 3 4 5 6 ] A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} A=[142536]
其违逆即
A + = V Σ + U T A^+ = V\Sigma ^+ U^T A+=VΣ+UT
借用第一部分中svd分解的结果,用Matlab验证如下(列的符号和次序略有差异):

>> pA = V*[1/9.5080,0;0,1/0.7729;0,0]*U'

pA =

    0.4444    0.9444
    0.1111    0.1111
   -0.2222   -0.7222

>> pinv(A)

ans =

   -0.9444    0.4444
   -0.1111    0.1111
    0.7222   -0.2222

PCA

因为在机器学习领域的广泛应用,这可能是最被经常提及的应用了。在Python的sckit-learn库中,其PCA实现算法的内在机理也是应用SVD来实现的。来看定义

PCA(principal components analysis),即主成分分析技术,旨在利用降维的思想,把多指标转化为少数几个综合指标

面对庞大的数据量,降维是必要的,同数据压缩的一般性原则一样,其为我们保留了原始数据中最有效的部分。这些问题的关键都在于选取一组合适的基底去描述数据,实现用最简便的系数和方式去表示出这些数据的最大有效成分


我们先来看一组均值中心 (需建立) 在原点的数据直观感受一下:

% 二维数据降为一维数据

x1 = [3,-4,7,1,-4,-3]; %特征1
x2 = [7,-6,8,-1,-1,-7]; %特征2
scatter(x1,x2); % 数据点
hold on;
plot(mean(x1),mean(x2),'rd'); % 均值中心
A = [x1;x2]; % m行(特征),n列(样本点)

[U,S,V] = svd(A); % svd分解
hold on;syms x;
fplot(x*U(2,1)/U(1,1)); 
hold on;
fplot(x*U(2,2)/U(1,2)); 
a = [U(1,1);U(2,1)]; % 方向1有更大的奇异值
P = a*a'/(a'*a); % 投影矩阵
B = P*A;
hold on;
scatter(B(1,:),B(2,:),'+');%投影点

在这里插入图片描述
给出解释:

1.Data often comes in a matrix: n samples and m measurements per sample.
2.Center each row of the matrix A by subtracting the mean from each measurement.
3.The SVD finds combintions of the data that contain the most information.
4.Largest singular value σ 1 \sigma_1 σ1 ↔ \leftrightarrow greatest variance ↔ \leftrightarrow most information in u 1 ⃗ \vec{u_1} u1

也就是说,PCA的目的在于通过计算协方差矩阵 X X T XX^T XXT保留下样本方差最大的方向(相当于此时样本间特征的差异性最大,从而保留了主要特征)。


更具体地说,通过SVD分解,我们将奇异值从大到小排序,选择其中最大的 k k k 个,然后将其对应的 k k k 个特征向量作为列向量组成新的特征向量矩阵,从而实现将 n n n 维数据转换到由 k k k 个特征向量构建的 k k k 维新空间中,这同直接对协方差矩阵进行特征值分解(而特征值分解其实有方阵的条件限制)得到的效果是一致的。

猜你喜欢

转载自blog.csdn.net/weixin_47305073/article/details/126326764
今日推荐