老饼讲解:一步一步上手学习
我们都知道,方阵可以进行特征值分解,从而剖析出方阵所对应的变换是什么,对应地,对于非方阵则可以使用奇异值分解(Singular Value Decomposition,SVD分解)来剖析矩阵对应的变换是什么。那下面我们就一起来看看奇异值分解(SVD分解)是什么,以及如何理解它背后的意义。
SVD(Singular Value Decomposition)也称为奇异值分解,它一般被认为是"方阵特征值分解"在非方阵上的拓展,简单来说,"对角化"是方阵的特征值分解方式,而SVD就是非方阵的特征值分解方式。
好了,我们先来看看SVD分解的定义和表示。
SVD分解是指:对于矩阵A,将其分解为、 和 三个矩阵,如下
其中,
:的酉矩阵
:半正定对角矩阵
:的酉矩阵
(1) 通常 对角元素由大到小排序,这样 、和是唯一的。
(2) 对角线上的元素称为A的奇异值。
备注:U和V都是酉矩阵,酉矩阵基本特点是,即酉矩阵的转置就是它的逆
可以看到,SVD分解与方阵特征值分解是很相似,毕竟它就是仿着方阵特征值分解造出来的东西。
好了,我们先来用python玩一玩SVD分解,在python中可以通过numpy的linalg.svd()函数来对矩阵进行SVD分解,具体代码示例如下:
'''
本代码展示在python中如何进行SVD分解
本代码来自《老饼讲解-机器学习》www.bbblearn.com
'''
import numpy as np
A = np.array([[2,3,4], [5,1, 1]]) # 要分解的矩阵A
U,S,VT = np.linalg.svd(A) # 对矩阵A进行SVD分解
print('U:',U) # 分解后的U
print('S:',S) # 分解后的S
print('VT:',VT) # 分解后的V^T代码运行结果如下:

可以看到,我们把矩阵A分解成了USV,进一步可以验证它们的积就是A,如下:
所以SVD简单来说,就是把A分解成三个矩阵,UV都是酉矩阵,而中间是一个对角矩阵。
好了,我们知道SVD大概是怎么一回事了,下面我们再来深入理解一下SVD分解后得到的UΣV三个矩阵到底是什么,这样会更加深刻一些。
由易得:
值得注意的是:
1. 与 都是对称方阵。
2. 与 分别是与的对角矩阵。
仔细观察上面的两个式子,就会发现:
分别是 与的 对角化矩阵。
对角元素是是 或的特征值的开方。
也就是, 是由的特征向量组成的矩阵,则是由 的特征向量组成的矩阵。而则是由或的特征值的开方组成的对角矩阵。
与方阵的对角化相对应,SVD也提供了以变换的角度来看待非方阵矩阵A的本质。下面我们从几何的角度来理解一下SVD分解把变换A拆成了什么变换。
从 可得:
(1)
(2)
(2)式的推导过程如下
需要注意的是,
1. U和V都是酉矩阵,都可以代表一组正交标准基。
2. U 代表一个m维空间的正交标准基。
3. V 代表一个n维空间的正交标准基。
从 可知,
A把V所代表的n维空间的每个基,映射到U所代表的m维空间中m个基中的n个基,并作伸缩:

这就意味着对所作的变换就是,把在中的坐标为的,映射为在的坐标为 的。
同样的,从可知,把 U 所代表的m维空间的m个基,映射到 V 所代表的n维空间的每个基,其中,在 U中只有前n个基,分别一一对应 V中的n个基,并且 作 伸缩,而其余的则映射到0中。
总的来说,方阵有特征值分解,而对应地,非方阵就造出了一个SVD奇异值分解,从数学角度来说,SVD把矩阵A分解为两个酉矩阵与对角矩阵的积,而从几何角度来说,则是把变换A拆解为从空间V到空间U的伸缩变换。
评论