为什么要用到SVD分解?
从特征值和特征向量说起:
首先回顾下特征值和特征向量的定义:其中A是一个m*m的实对称矩阵,x是一个m维向量,则我们说λ是矩阵A的一个特征值,而x是矩阵A的特征值λ所对应的特征向量。
求出特征值和特征向量有什么好处呢? 就是我们可以将矩阵A特征分解。假设我们已经求出了矩阵A的m个特征值:,以及这m个特征值所对应的特征向量。若这m个特征向量线性无关,那么矩阵A就可以用下式的特征分解表示:,其中是这m个特征向量所组成的m*m维矩阵,而为这m个特征值为主对角线的m*m维矩阵。
一般我们会把的这m个特征向量标准化,即满足 或者说,此时的m个特征向量为标准正交基,满足,即, 也就是说为酉矩阵。这样我们的特征分解表达式可以写的形式。
注意要进行特征分解,矩阵A必须为方阵。那么如果A不是方阵,即行和列不相同时,我们还可以对矩阵进行分解吗?答案是SVD。
SVD(Singular Value Decomposition),矩阵的奇异值分解。分解方法如下:
若A是m*n的矩阵,则可以分解为,(此式子就是奇异值分解)其中U=m*m,=m*n,V=n*n。
- U是标准正交矩阵。(是的特征向量进行标准化后的结果???)。U中第i列的向量被称为关于的左奇异向量。U可以看作是对A的正交“输入”或分析的基向量,这些向量是矩阵(mxm)的特征向量。
- V是的特征向量进行标准化后的结果,故V是标准正交矩阵。V中第i列的向量被称为关于的右奇异向量。U可以看作是对A的正交“输出”的基向量,这些向量是矩阵(nxn)的特征向量
- 是奇异值矩阵。(是m*n的非负实数对角矩阵,并且对角线上的元素是矩阵A的奇异值,非对角线上的元素为0。一般我们的习惯是将这些奇异值按照从大到小的顺序排列,即是由A唯一确定了)
什么样的矩阵可以进行SVD分解?
任何矩阵均有SVD分解。
将上述列表用矩阵来A表示: 矩阵A为6行5列矩阵,对其进行奇异值分解。
对A进行SVD分解,取k=2,。
矩阵的奇异值分解意义
对于奇异值,跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值减少的特别快。在很多情况下前10%甚至1%的奇异值的和就占了全部奇异值之和的99%以上。也就是说,我们可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩。如下:
什么是奇异值?
假设A是一个m*n的矩阵,则是一个n*n的方阵,且是个对陈矩阵。
假设:的特征值为,......,,特征向量为,......,。
- 则的特征值全部非负。即。
- ,称为A的奇异值。即A的奇异值为的特征值开根号后的结果。
- 是向量A的长度。
的两种计算方式:
矩阵的SVD分解计算过程:
如下有一个A矩阵:
(以一个简单的矩阵来计算推导)
特征值分解和奇异值分解不同之处?
首先,特征值只能作用在一个mm的正方矩阵上,而奇异值分解则可以作用在一个mn的长方矩阵上。其次,奇异值分解同时包含了旋转、缩放和投影三种作用,式中,U和V都起到了对A旋转的作用,而Σ起到了对A缩放的作用。特征值分解只有缩放的效果。
参考:https://www.cnblogs.com/endlesscoding/p/10033527.html
https://blog.csdn.net/qq_40438165/article/details/102879986
https://blog.csdn.net/u014157109/article/details/93141506