要讲述SVD,首先来看一下EVD,也就是特征值分解
EVD
A是一个m * m的实对称矩阵(即
A
=
A
T
A = A^T
A=AT),那么他可以被分解为如下的形式
公式一:
A
=
Q
∑
Q
T
=
Q
[
λ
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
λ
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
λ
n
]
Q
T
A = Q \sum Q^T = Q \begin{bmatrix} \lambda_1 & ... &... &... &... \\ ... & \lambda_2 &... &... &...\\ ... & ... &... &... &... \\ ... & ... &... &... &\lambda_n \end{bmatrix} Q^T
A=Q∑QT=Q⎣⎢⎢⎡λ1............λ2.......................................λn⎦⎥⎥⎤QT
其中,Q为正交矩阵,即
Q
Q
T
=
I
QQ^T = I
QQT=I,
∑
\sum
∑为对角矩阵.
λ
i
\lambda_i
λi称之为特征值,Q里面的向量
Q
i
Q_i
Qi称之为特征向量。
SVD
对于一般矩阵而言,我们也想要这样的分解,可以么?答案是肯定的,这时候就需要我们下面所说的SVD分解
这里,A是一个m * n矩阵,我们将它分解为下面的形式:
A
=
U
∑
V
T
A = U\sum V^T
A=U∑VT
其中,U和V为单位正交阵(
U
U
T
=
I
UU^T = I
UUT=I,
V
V
T
=
I
VV^T = I
VVT=I),则,U称之为左奇异矩阵,V称之为右奇异矩阵。
∑
\sum
∑仅在主对角线上有值,我们称它为奇异值。且
U
∈
m
∗
m
,
∑
∈
m
∗
n
,
V
∈
n
∗
n
U \in m * m , \sum \in m * n , V \in n * n
U∈m∗m,∑∈m∗n,V∈n∗n,一般情况下,
∑
\sum
∑有如下形式
∑
=
[
σ
1
0
0
0
0
0
σ
2
0
0
0
0
0
.
.
.
0
0
0
0
0
0
0
]
\sum = \begin{bmatrix} \sigma_1 & 0 &0 &0 &0 \\ 0 & \sigma_2 &0 &0 &0\\ 0 & 0 &... &0 &0 \\ 0 & 0 &0 &0 &0 \end{bmatrix}
∑=⎣⎢⎢⎡σ10000σ20000...000000000⎦⎥⎥⎤
SVD求解
因为直接求U和V不方便,看如下推导过程
公式二:
A
A
T
=
U
∑
V
T
V
∑
T
U
T
=
U
∑
∑
T
U
T
AA^T = U\sum V^TV{\sum}^T U^T = U\sum {\sum}^TU^T
AAT=U∑VTV∑TUT=U∑∑TUT
公式三:
A
T
A
=
V
∑
T
U
T
U
∑
V
T
=
V
∑
T
∑
V
T
A^TA = V{\sum}^T U^TU\sum V^T = V{\sum}^T \sum V^T
ATA=V∑TUTU∑VT=V∑T∑VT
需要指出的是这里的
∑
∑
T
\sum {\sum}^T
∑∑T和
∑
T
∑
{\sum}^T \sum
∑T∑是不一样的,因为他们的维数不同,但是,他们在主对角线上的奇异值是相等的。
可以看出,公式2和公式3与公式1很相似,将
A
A
T
AA^T
AAT与
A
T
A
A^TA
ATA利用公式1求出U和V,然后对
∑
∑
T
\sum {\sum}^T
∑∑T和
∑
T
∑
{\sum}^T \sum
∑T∑开方,就可以得到所有的奇异值。
summary
从上面的图片的压缩结果中可以看出来,奇异值可以被看作成一个矩阵的代表值,或者说,奇异值能够代表这个矩阵的信息。当奇异值越大时,它代表的信息越多。因此,我们取前面若干个最大的奇异值,就可以基本上还原出数据本身。