奇异值分解(Singular Value Decomposition,以下简称SVD)是在优化等领域广泛应用的一种矩阵算法,因为近期多次使用到SVD分解。本文章对SVD做一个笔记,纯粹是笔记。本文参考于文章(https://zhuanlan.zhihu.com/p/29846048)。
1. 特征值和特征向量
关于特征值和特征向量
左侧A矩阵为
的矩阵,
其中
为
维的向量,即为特征向量
右侧
为特征向量
对应的特征值
基于分解的特征向量和特征值,可以将矩阵
作出以下分解:
其中
为
的特征向量矩阵,根据不同的特征值的大小,可以知道每个特征向量对应权重,或者重要性;同时矩阵被分解成几个特征向量与特征值的组合。但是只有当矩阵
不是方阵的时候,才可以进行特征值分解。那么当矩阵
不是方阵的时候,那么我们是否可以进行类似的分解?那么就引出我们强大的特征值分解SVD。
2. SVD定义与计算
- 定义SVD
SVD也是对特征值分解,但是和特征值分解不同,SVD分解并不要求被分解的矩阵为方阵,假设我们的矩阵
为
的矩阵,那么定义矩阵
的SVD为如下:
其中
是一个
的矩阵,
是一个
的矩阵,除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值,
是一个
的矩阵。
和
都是酉矩阵,即满足
下图可以很形象的看出上面SVD的定义:
- 计算SVD
如果我们将A的转置和A做矩阵乘法,那么会得到的一个方阵。既然是方阵,那么我们就可以进行特征分解,得到的特征值和特征向量满足下式:
这样我们就可以得到矩阵
的n个特征值和对应的n个特征向量v了。将
的所有特征向量张成一个n×n的矩阵V,就是我们SVD公式里面的V矩阵了。一般我们将V中的每个特征向量叫做A的右奇异向量。
如果我们将A和A的转置做矩阵乘法,那么会得到m×m的一个方阵
。既然
是方阵,那么我们就可以进行特征分解,得到的特征值和特征向量满足下式:
这样我们就可以得到矩阵
的m个特征值和对应的m个特征向量
了。将
的所有特征向量张成一个
的矩阵
,就是我们SVD公式里面的U矩阵了。一般我们将U中的每个特征向量叫做A的左奇异向量。
由于
除了对角线上是奇异值其他位置都是0,那我们只需要求出每个奇异值
就可以了。
也就是说矩阵
的奇异值为
对应的特征值的根号。
3. SVD的一些性质
对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。
也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。
也就是说:
其中k要比n小很多,也就是一个大的矩阵A可以用三个小的矩阵
来表示。如下图所示,现在我们的矩阵A只需要灰色的部分的三个小矩阵就可以近似描述了。
由于这个重要的性质,从直观的看,就可以发现SVD可以用于做数据压缩和去噪。比如做图像的压缩。
参考文献:
[1] https://zhuanlan.zhihu.com/p/29846048