首页 > 代码库 > 矩阵的奇异值分解(SVD)

矩阵的奇异值分解(SVD)

MIT 线性代数课程中讲过的矩阵分解有很多种,但是据我所知最重要的应该是SVD分解了,假如现在想把行空间的正交基通过A左乘的方法变换到列空间的正交基,既有:


需要说明的一点是,我们可以轻易得到行空间的正交基,但是并不是所有的A都能满足变换过去后还是正交基的条件,所以,这个A需要满足条件,或者说A和U,V需要满足一定的关系。将上式左右两边都乘以V的转置,就可以得到矩阵奇异值分解的公式,SVD的分解式子如下:

假如原来X是n*m的矩阵,那么U一般是n*r,sigma一般是r*r,V一般是m*r。

当r=Rank(X)的时候,是准确的分解,当r<Rank(X)的时候,是近似分解。

一般来说,sigma是一个对角矩阵,且对角线元素是方阵和方阵特征值的正平方根,且按照降序排放。

可以发现,V的每列都是的特征向量,U的每列都是的特征向量,他们分别都是按照特征值下降的顺序排放。

SVD能解决哪些问题呢?第一就是解决PCA,可以发现

这个式子左边的矩阵,其实就是X这个数据集(已经预处理,均值为0)协方差矩阵(设为M)的前K个特征值所对应的特征向量转置排列后而成。易得=m*M(m是数据个数),那么与M所对应特征向量是相同的,如果奇异值分解也取近似(取r=k<Rank(X)),只需要用SVD分解后的乘以X就能得到主成分分析的X‘。


矩阵的奇异值分解(SVD)