网上各种思想解释SVD的太多了。这篇博文想从一个实际的矩阵出发,阐述SVD究竟干了什么。——非数学系的cver
0.基础
我是通过这篇博文理解SVD基本意义的
1.初始理论部分
SVD的基本公式:
A
=
U
m
×
m
Σ
m
×
n
V
n
×
n
T
(1)
A=U_{m\times m} \Sigma_{m\times n} V_{n\times n}^T \tag{1}
A=Um×mΣm×nVn×nT(1)
注意
U
m
×
m
U_{m\times m}
Um×m,
V
n
×
n
V_{n\times n}
Vn×n是不同尺寸的方阵。中间的
Σ
m
×
n
=
[
Σ
1
0
0
0
]
\Sigma_{m\times n}=\begin{bmatrix}\Sigma_1 & 0 \\ 0 & 0\end{bmatrix}
Σm×n=[Σ1000]
Σ
1
=
d
i
a
g
(
σ
1
,
σ
1
,
…
,
σ
r
)
\Sigma_1=diag(\sigma_1,\sigma_1,\dots,\sigma_r)
Σ1=diag(σ1,σ1,…,σr)
这个
σ
i
\sigma_i
σi就是所谓的奇异值。也是特征值开根号。
2.一个简单的例子
借鉴这篇博客例子。
我们要计算矩阵 A的奇异值分解。
A
=
[
1
1
1
1
0
0
]
A=\begin{bmatrix} 1&1\\1&1\\0&0\end{bmatrix}
A=⎣⎡110110⎦⎤
这个时候要记得m=3,n=2。我们的问题变成了如(2)式展开分解。
A
=
U
3
×
3
Σ
3
×
2
V
2
×
2
T
(2)
A=U_{3\times 3} \Sigma_{3\times 2} V_{2\times 2}^T \tag{2}
A=U3×3Σ3×2V2×2T(2)
-
计算协方差矩阵 A T A = [ 2 2 2 2 ] A^TA=\begin{bmatrix} 2&2 \\ 2&2 \end{bmatrix} ATA=[2222]
这是个协方差矩阵,对其进行特征分解,计算特征值和特征向量。
特征值 4, 0
特征向量 [ 1 2 , 1 2 ] T , [ − 1 2 , 1 2 ] T [\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}}]^T, [-\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}}]^T [21,21]T,[−21,21]T -
计算另一个方向的协方差 A A T = [ 2 2 0 2 2 0 0 0 0 ] AA^T=\begin{bmatrix} 2&2&0\\2&2&0\\0&0&0\end{bmatrix} AAT=⎣⎡220220000⎦⎤
相当于对A做了转置,计算其协方差,然后对其进行特征分解,计算特征值和特征向量。
特征值 4,0,0
特征向量 [ 1 2 , 1 2 , 0 ] T , [ − 1 2 , 1 2 , 0 ] T , [ 0 , 0 , 1 ] T [\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}},0]^T,[-\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}},0]^T,[0,0,1]^T [21,21,0]T,[−21,21,0]T,[0,0,1]T -
把两个协方差矩阵的非零特征值从大到小排列。(注意是非零)
这个是为了求 Σ 3 × 2 \Sigma_{3\times 2} Σ3×2。注意其实只有一个非零特征值4。而 Σ m n = [ Σ 1 0 0 0 ] \Sigma_{mn}=\begin{bmatrix}\Sigma_1 & 0 \\ 0 & 0\end{bmatrix} Σmn=[Σ1000]。所以维度刚好凑够。需要清楚,两个协方差矩阵的非零特征值应该相同。 -
最后,写出SVD表达式
A = U Σ V T = [ 1 2 − 1 2 0 1 2 1 2 0 0 0 1 ] [ 2 0 0 0 0 0 ] [ 1 2 − 1 2 1 2 1 2 ] T = [ 1 1 1 1 0 0 ] A=U \Sigma V^T= \begin{bmatrix} \frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}}&0 \\ \frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}&0 \\ 0&0&1 \end{bmatrix} \begin{bmatrix} 2&0 \\ 0&0 \\ 0&0 \end{bmatrix} {\begin{bmatrix} \frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{bmatrix}}^T=\begin{bmatrix} 1&1\\1&1\\0&0\end{bmatrix} A=UΣVT=⎣⎡21210−21210001⎦⎤⎣⎡200000⎦⎤[2121−2121]T=⎣⎡110110⎦⎤
特征向量按照特征值大小排序,构成左奇异值矩阵和右奇异值矩阵。
3. 理 解 SVD
我们可以首先类比PCA(主成分分析法),首先,特征值只能作用在一个m* m的正方矩阵上,而奇异值分解则可以作用在一个m*n的长方矩阵上。其次,奇异值分解同时包含了旋转、缩放和投影三种作用,(1)式中,U和V都起到了对A旋转的作用,而Σ起到了对A缩放的作用。特征值分解只有缩放的效果。PCA只用到了一个协方差矩阵,但是奇异值分解相当于两个方向做PCA,所以其实PCA可以使用SVD实现。
网上看到有人画了个草图,如下。然后说在几何中,我们可以把矩阵看做空间上的线性变换。奇异值分解的几何含义是:对于任何的一个矩阵,我们都能找到一组坐标轴,它是由原来的坐标轴通过旋转和缩放得到的。奇异值的含义是:这组变换后新的坐标轴的长度。这个U我不知道
4.reference
1.https://towardsdatascience.com/svd-8c2f72e264f
2.https://byjiang.com/2017/11/18/SVD/
3.https://bainingchao.github.io/2018/10/11/%E4%B8%80%E6%AD%A5%E6%AD%A5%E6%95%99%E4%BD%A0%E8%BD%BB%E6%9D%BE%E5%AD%A6%E5%A5%87%E5%BC%82%E5%80%BC%E5%88%86%E8%A7%A3SVD%E9%99%8D%E7%BB%B4%E7%AE%97%E6%B3%95/