奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的矩阵分解算法,这里对SVD原理 应用和代码实现做一个总结。
1 实对称方阵的矩阵分解
对于一个\(n\times n\)实对称方阵\(A\),如果存在一个向量\(v\)是矩阵\(A\)的特征向量,可以表示成下面的形式:\(Av=\lambda v\)
其中,\(\lambda\)是特征向量\(v\)对应的特征值。如果矩阵\(A\)有\(n\)个线性无关的特征向量,那么矩阵\(A\)可以分解为: \(A=Q\Sigma Q^{-1}\)
其中,\(Q\)是矩阵\(A\)的特征向量组成的\(n\times n\)的方阵,\(\Sigma\)是对角矩阵,每一个对角线元素就是一个特征值。注意到,特征值分解是有局限的,这里的矩阵是方阵,实际应用中,常见矩阵并不全是方阵。下面介绍SVD,SVD可以对任意矩阵进行分解。
2 奇异值分解(SVD)
假设矩阵\(A\)是\(m\times n\)的矩阵,则\(AA^{T}\)是\(m\times m\)的方阵,\(A^{T}A\)是\(n\times n\)的方阵,对这两个方阵矩阵分解:\(AA^{T}=U\Lambda _{1}U^{T}\) \(A^{T}A=V\Lambda _{2}V^{T}\)
其中,\(\Lambda _{1}\)和\(\Lambda _{2}\)是对角矩阵,且对角线上非零元素均相同,也就是说两个方阵有相同的非零特征值,令非零特征值为\(\sigma _{1},\sigma _{2},\cdots ,\sigma _{k}\),注意,\(k\leq m\),\(k\leq n\)。根据\(\sigma _{1},\sigma _{2},\cdots ,\sigma _{k}\)可以得到矩阵\(A\)的特征值为:\(\lambda _{1}=\sqrt{\sigma _{1}},\lambda _{2}=\sqrt{\sigma _{2}},\cdots ,\lambda _{k}=\sqrt{\sigma _{k}}\)
下面就可以得到奇异值分解的表达式为: \[A=U\Lambda V^{T}\]
其中,\(U\)是一个\(m\)