奇异值分解(SVD)

在线性代数中我们都学习过,对于满秩的方阵,有 A x = λ x Ax=λx Ax=λx成立,其中A是 n ∗ n n\ast n nn的矩阵,λ是A的一个特征值,x为A对应λ的特征向量。

根据求出的特征值和特征向量,我们就可以将矩阵A分解,将其表达为另一种形式。假设A求出的特征值为 λ 1 ≤ λ 2 ≤ λ 3 ≤ … … ≤ λ n λ1≤ λ2 ≤ λ3≤…… ≤λn λ1λ2λ3λn,而对应的特征向量为 w 1 , w 2 , … … , w n w1,w2,……,wn w1,w2,,wn。如果特征向量间是线性无关的,则A可以表示为如下的形式 A = W Σ W − 1 A=W\Sigma W^{-1} A=WΣW1

其中W是n个特征向量所组成的 n ∗ n n\ast n nn的矩阵,∑是对角线元素为特征值的 n ∗ n n\ast n nn的矩阵。将n个特征向量标准化满足 ∣ ∣ w i ∣ ∣ 2 = 1 ||w_i||_2 =1 wi2=1 w i T w i = 1 w_i^Tw_i =1 wiTwi=1则这n个向量为标准正交基,满足 W T W = I W^TW=I WTW=I W T = W − 1 W^T=W^{-1} WT=W1将其称为酉矩阵。根据 W T = W − 1 W^T=W^{-1} WT=W1我们将A可以表达为 A = W Σ W T A=W\Sigma W^T A=WΣWT

比如在之前的线性回归算法中,如果X是这样的方阵,我们就可以求出它的闭式解。但是如果不是这样的方阵,该怎么解决呢?那就该奇异值分解SVD出场了。

首先给出使用SVD后A的表达式: A = U Σ V T A = U\Sigma V^T A=UΣVT其中U是 m ∗ m m\ast m mm的矩阵, Σ Σ Σ m ∗ n m \ast n mn的矩阵,只有对角线元素不为零,将其中的元素称之为奇异值,V是 n ∗ n n\ast n nn的矩阵。

那么我们如何求出这三个矩阵呢?

  • V的计算
    将A的转置和A相乘,得到 n ∗ n n\ast n nn的方阵 A A T AA^T AAT这样就可以使用方阵的分解方式,得到 ( A T A ) v i = λ i v i (A^TA)v_i = \lambda_i v_i (ATA)vi=λivi
    将n个特征值所对应的特征向量,将其同样组成 n ∗ n n\ast n nn的方阵,即 V V V

  • U的计算
    将A和A的转置相乘,得到 m ∗ m m \ast m mm的方阵 A T A A^TA ATA这样就可以使用方阵的分解方式,得到 ( A A T ) u i = λ i u i (AA^T)u_i = \lambda_i u_i (AAT)ui=λiui
    同样将m个特征值所对应的特征向量,将其同样组成 m ∗ m m\ast m mm的方阵,即 U U U

  • Σ的计算
    因为有 V T = V − 1 V^T = V^{-1} VT=V1所以在SVD的表达式两边同乘以V,有如下的推导
    A = U Σ V T ⇒ A V = U Σ V T V ⇒ A V = U Σ ⇒ A v i = σ i u i ⇒ σ i = A v i / u i A=U\Sigma V^T \Rightarrow AV=U\Sigma V^TV \Rightarrow AV=U\Sigma \Rightarrow Av_i = \sigma_i u_i \Rightarrow \sigma_i = Av_i / u_i A=UΣVTAV=UΣVTVAV=UΣAvi=σiuiσi=Avi/ui

其中 σ i σ_{i} σi就是我们要求的奇异值,将其组合得到 Σ Σ Σ

从中我们可以看到特征值矩阵等于奇异值矩阵的平方,即特征值和奇异值满足如下的关系: σ i = λ i \sigma_i = \sqrt{\lambda_i} σi=λi ,这样我们通过λi就可以求出奇异值。

因此有了SVD后我们就可以分解任意形式的矩阵,可以这样说:任意的矩阵X都可以转换为正交矩阵、对角阵和另外一个正交矩阵的乘积。

下面这个图很形象的表示了SVD中各矩阵之间的关系


奇异值分解(SVD)_第1张图片

下面通过一个例子来看一下SVD是如何操作。假设 A A A A = ( 0 1 1 1 1 0 ) \mathbf{A} = \left( \begin{array}{ccc} 0& 1\\ 1& 1\\ 1& 0 \end{array} \right) A=011110则根据上面所讲的原理求出相应的矩阵:
A A T = ( 0 1 1 1 1 0 ) ( 0 1 1 1 1 0 ) = ( 1 1 0 1 2 1 0 1 1 ) \mathbf{AA^T} = \left( \begin{array}{ccc} 0& 1\\ 1& 1\\ 1& 0 \end{array} \right) \left( \begin{array}{ccc} 0& 1 &1\\ 1&1& 0 \end{array} \right) = \left( \begin{array}{ccc} 1& 1 & 0\\ 1& 2 & 1\\ 0& 1& 1 \end{array} \right) AAT=011110(011110)=110121011 A A T = ( 0 1 1 1 1 0 ) ( 0 1 1 1 1 0 ) = ( 1 1 0 1 2 1 0 1 1 ) \mathbf{AA^T} = \left( \begin{array}{ccc} 0& 1\\ 1& 1\\ 1& 0 \end{array} \right) \left( \begin{array}{ccc} 0& 1 &1\\ 1&1& 0 \end{array} \right) = \left( \begin{array}{ccc} 1& 1 & 0\\ 1& 2 & 1\\ 0& 1& 1 \end{array} \right) AAT=011110(011110)=110121011

它们所对应的特征值和特征向量为
λ 1 = 3 ; v 1 = ( 1 / 2 1 / 2 ) ; λ 2 = 1 ; v 2 = ( − 1 / 2 1 / 2 ) \lambda_1= 3; v_1 = \left( \begin{array}{ccc} 1/\sqrt{2} \\ 1/\sqrt{2} \end{array} \right); \lambda_2= 1; v_2 = \left( \begin{array}{ccc} -1/\sqrt{2} \\ 1/\sqrt{2} \end{array} \right) λ1=3;v1=(1/2 1/2 );λ2=1;v2=(1/2 1/2 )

λ 1 = 3 ; u 1 = ( 1 / 6 2 / 6 1 / 6 ) ; λ 2 = 1 ; u 2 = ( 1 / 2 0 − 1 / 2 ) ; λ 3 = 0 ; u 3 = ( 1 / 3 − 1 / 3 1 / 3 ) \lambda_1= 3; u_1 = \left( \begin{array}{ccc} 1/\sqrt{6} \\ 2/\sqrt{6} \\ 1/\sqrt{6} \end{array} \right); \lambda_2= 1; u_2 = \left( \begin{array}{ccc} 1/\sqrt{2} \\ 0 \\ -1/\sqrt{2} \end{array} \right); \lambda_3= 0; u_3 = \left( \begin{array}{ccc} 1/\sqrt{3} \\ -1/\sqrt{3} \\ 1/\sqrt{3} \end{array} \right) λ1=3;u1=1/6 2/6 1/6 ;λ2=1;u2=1/2 01/2 ;λ3=0;u3=1/3 1/3 1/3

利用 λ i λ_{i} λi求出奇异值: ( 0 1 1 1 1 0 ) ( 1 / 2 1 / 2 ) = σ 1 ( 1 / 6 2 / 6 1 / 6 ) ⇒ σ 1 = 3 \left( \begin{array}{ccc} 0& 1\\ 1& 1\\ 1& 0 \end{array} \right) \left( \begin{array}{ccc} 1/\sqrt{2} \\ 1/\sqrt{2} \end{array} \right) = \sigma_1 \left( \begin{array}{ccc} 1/\sqrt{6} \\ 2/\sqrt{6} \\ 1/\sqrt{6} \end{array} \right) \Rightarrow \sigma_1=\sqrt{3} 011110(1/2 1/2 )=σ11/6 2/6 1/6 σ1=3

( 0 1 1 1 1 0 ) ( − 1 / 2 1 / 2 ) = σ 2 ( 1 / 2 0 − 1 / 2 ) ⇒ σ 2 = 1 \left( \begin{array}{ccc} 0& 1\\ 1& 1\\ 1& 0 \end{array} \right) \left( \begin{array}{ccc} -1/\sqrt{2} \\ 1/\sqrt{2} \end{array} \right) = \sigma_2 \left( \begin{array}{ccc} 1/\sqrt{2} \\ 0 \\ -1/\sqrt{2} \end{array} \right) \Rightarrow \sigma_2=1 011110(1/2 1/2 )=σ21/2 01/2 σ2=1

则A使用SVD可表示为
A = U Σ V T = ( 1 / 6 1 / 2 1 / 3 2 / 6 0 − 1 / 3 1 / 6 − 1 / 2 1 / 3 ) ( 3 0 0 1 0 0 ) ( 1 / 2 1 / 2 − 1 / 2 1 / 2 ) A=U\Sigma V^T = \left( \begin{array}{ccc} 1/\sqrt{6} & 1/\sqrt{2} & 1/\sqrt{3} \\ 2/\sqrt{6} & 0 & -1/\sqrt{3}\\ 1/\sqrt{6} & -1/\sqrt{2} & 1/\sqrt{3} \end{array} \right) \left( \begin{array}{ccc} \sqrt{3} & 0 \\ 0 & 1\\ 0 & 0 \end{array} \right) \left( \begin{array}{ccc} 1/\sqrt{2} & 1/\sqrt{2} \\ -1/\sqrt{2} & 1/\sqrt{2} \end{array} \right) A=UΣVT=1/6 2/6 1/6 1/2 01/2 1/3 1/3 1/3 3 00010(1/2 1/2 1/2 1/2 )

参考:

奇异值分解(SVD)原理与在降维中的应用

机器学习中SVD总结

你可能感兴趣的:(Machine,Learning)