SVD理论简介:
老铁,欢迎赶上二路公交车。让我们畅游一下SVD算法的理论推导与应用。奇异值分解(Singular Value Decomposition, SVD)是更为通用化的矩阵分解方式,与特征分解不(矩阵必须为方阵)同,SVD并不要求矩阵为方阵。这样SVD可以应用在图像压缩、去噪、降维、推荐系统等领域。下面就进行简单介绍SVD算法的计算步骤与实例操作。
SVD求解步骤:
假设我们需要对矩阵 A A A进行SVD分解操作,已知矩阵 A A A是一个 m × n m×n m×n的矩阵,其中m与n可以相等(特征分解)也可以不等(绝大多数情况不相等)。那么定义矩阵 A A A的SVD分解公式如下:
(1) A = U ∗ ∑ ∗ V T A=U*\sum{}*V^{T}\tag{1} A=U∗∑∗VT(1)
参数解释:
U U U是一个 m × m m×m m×m的矩阵, ∑ ∑ ∑是一个 m × n m×n m×n的对角矩阵(即:除了对角线上的元素意外全为0,对角线上的每个元素都为奇异值), V V V是一个 n × n n×n n×n的矩阵。 U U U和 V V V都是酉矩阵,即满足 U T U = E U^T U=E UTU=E, V T V = E V^T V=E VTV=E,其中 E E E为单位矩阵。
![](https://i-blog.csdnimg.cn/blog_migrate/eebbe4e7869e9d7e3debf40acf1329a8.png)
那么,SVD的求解就是求出公式等号右边矩阵 U U U、 ∑ ∑ ∑、 V T V^T VT这三个矩阵?
下面我们就来求解上述的 U U U、 ∑ ∑ ∑、 V T V^T VT三个矩阵步骤如下:
S t e p 1 Step1 Step1: 我们首先使用矩阵 A A A乘以 A T A^T AT( A A A的转置矩阵),那么会得到一个 m × m m×m m×m的方阵 A A T AA^T AAT。我们对方阵 A A T AA^T AAT进行特征分解,那么得到特征值与特征向量满足下式:
( A A T ) u i = α i u i (AA^{T})u_i=α_i u_i (AAT)ui=αiui
其中, α i α_i αi为方阵 A A T AA^T AAT的特征值, u i u_i ui为对应的特征向量。
我们知道方阵 A A T AA^T AAT为 m × m m×m m×m,那么特征分解后有 m m m个特征值,同时对应 m m m个特征向量 u i u_i ui。将 m m m个特征向量 u i u_i ui组成一个 m × m m×m m×m的矩阵 U U U,就是我们需要求解的公式1的矩阵 U U U。
S t e p 2 Step2 Step2: 使用矩阵 A T A^{T} AT( A A A的转置)乘以 A A A,那么会得到一个 n × n n×n n×n的方阵 A T A A^{T}A ATA。我们对方阵 A T A A^{T}A ATA进行特征分解,那么得到特征值与特征向量满足下式:
( A T A ) v i = β i v i (A^{T}A)v_i=β_i v_i (ATA)vi=βivi
其中, β i β_i βi为方阵 A T A A^{T}A ATA的特征值, v i v_i vi为对应的特征向量。
方阵 A T A A^T A ATA为 n × n n×n n×n,那么特征分解后有 n n n个特征值,同时对应 n n n个特征向量 v i v_i vi,将 n n n个特征向量 v i v_i vi组成一个 n × n n×n n×n的矩阵 V V V,将矩阵 V V V转置操作后就是我们需要求解公式1的矩阵 V T V^T VT。
S t e p 3 Step3 Step3: 接下来是要求解出中间的对角矩阵 ∑ ∑ ∑,我们知道 ∑ ∑ ∑除了对角线上以外都是0,所以我们只需要求解对角线上的奇异值就可以。
∑ = [ σ 0 0 0 . . . 0 0 0 0 σ 1 0 . . . 0 0 0 0 0 σ 2 . . . 0 0 0 0 0 0 . 0 0 0 0 0 0 0 . 0 0 0 0 0 0 0 . 0 0 0 0 . . . 0 0 σ m ] ∑= \left[ \begin{matrix} σ_{0} & 0 & 0 & ... & 0 & 0 & 0 \\ 0 & σ_{1} & 0 &... & 0 & 0 & 0 \\ 0 & 0 & σ_{2} & ... & 0 & 0 & 0 \\ 0 & 0 & 0 & . & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & . & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & . & 0 \\ 0 & 0 & 0 & ... & 0 & 0 & σ_{m} \end{matrix} \right] ∑=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡σ00000000σ10000000σ20000