在线性代数中我们都学习过,对于满秩的方阵,有 A x = λ x Ax=λx Ax=λx成立,其中A是 n ∗ n n\ast n n∗n的矩阵,λ是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ΣW−1
其中W是n个特征向量所组成的 n ∗ n n\ast n n∗n的矩阵,∑是对角线元素为特征值的 n ∗ n n\ast n n∗n的矩阵。将n个特征向量标准化满足 ∣ ∣ w i ∣ ∣ 2 = 1 ||w_i||_2 =1 ∣∣wi∣∣2=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=W−1将其称为酉矩阵。根据 W T = W − 1 W^T=W^{-1} WT=W−1我们将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 m∗m的矩阵, Σ Σ Σ是 m ∗ n m \ast n m∗n的矩阵,只有对角线元素不为零,将其中的元素称之为奇异值,V是 n ∗ n n\ast n n∗n的矩阵。
那么我们如何求出这三个矩阵呢?
V的计算
将A的转置和A相乘,得到 n ∗ n n\ast n n∗n的方阵 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 n∗n的方阵,即 V V V。
U的计算
将A和A的转置相乘,得到 m ∗ m m \ast m m∗m的方阵 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 m∗m的方阵,即 U U U 。
Σ的计算
因为有 V T = V − 1 V^T = V^{-1} VT=V−1所以在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ΣVT⇒AV=UΣVTV⇒AV=UΣ⇒Avi=σiui⇒σi=Avi/ui
其中 σ i σ_{i} σi就是我们要求的奇异值,将其组合得到 Σ Σ Σ。
从中我们可以看到特征值矩阵等于奇异值矩阵的平方,即特征值和奇异值满足如下的关系: σ i = λ i \sigma_i = \sqrt{\lambda_i} σi=λi,这样我们通过λi就可以求出奇异值。
因此有了SVD后我们就可以分解任意形式的矩阵,可以这样说:任意的矩阵X都可以转换为正交矩阵、对角阵和另外一个正交矩阵的乘积。
下面这个图很形象的表示了SVD中各矩阵之间的关系
下面通过一个例子来看一下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/21/2);λ2=1;v2=(−1/21/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/62/61/6⎠⎞;λ2=1;u2=⎝⎛1/20−1/2⎠⎞;λ3=0;u3=⎝⎛1/3−1/31/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/21/2)=σ1⎝⎛1/62/61/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/21/2)=σ2⎝⎛1/20−1/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/62/61/61/20−1/21/3−1/31/3⎠⎞⎝⎛300010⎠⎞(1/2−1/21/21/2)
参考:
奇异值分解(SVD)原理与在降维中的应用
机器学习中SVD总结