特征分解和奇异值分解

特征分解

特征值和特征向量的定义如下: A x ⃗ = λ x ⃗ A\vec x=\lambda\vec x Ax =λx 假设 A A A n × n n\times n n×n 的矩阵,现在如果我们求出了 A A A n n n 个特征值 λ 1 ≤ λ 2 ≤ ⋯ λ n \lambda_1\leq\lambda_2\leq\cdots\lambda_n λ1λ2λn 以及对应的特征向量 x ⃗ 1 , x ⃗ 2 , ⋯   , x ⃗ n \vec x_1,\vec x_2,\cdots,\vec x_n x 1,x 2,,x n,那么 A A A 就可以用下式的特征分解表示: A = W Σ W − 1 A=W\Sigma W^{-1} A=WΣW1其中 W W W 是这 n n n 个特征向量所张成的 n × n n\times n n×n 维矩阵,而 Σ \Sigma Σ n n n 个特征值为主对角线的 n n n 维方阵。一般我们会把 W W W 的每个向量标准化,即 ∣ ∣ w ⃗ i ∣ ∣ 2 = 1 ||\vec w_i||_2=1 w i2=1,或者 w ⃗ i T w ⃗ i = 1 \vec w_i^T\vec w_i=1 w iTw i=1。此时满足 W T W = I W^TW=I WTW=I,即 W T = W − 1 W^T=W^{-1} WT=W1,这样特征分解表达式可以写成: A = W Σ W T A=W\Sigma W^T A=WΣWT要进行特征分解,矩阵A必须为方阵。那么如果A不是方阵,我们还可以对矩阵进行分解吗?答案是可以,此时就要用到 SVD



奇异值分解

奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算法的基石。本文就 SVD 的原理做一个总结,并讨论在 PCA 降维算法中是如何运用SVD的。

和特征分解不同,SVD 不要求分解的矩阵为方阵。假设 A A A m × n m\times n m×n 的矩阵,那么它的 SVD 为: A = U Σ V T A=U\Sigma V^T A=UΣVT其中 U U U 是一个 m × m m\times m m×m 方阵, Σ \Sigma Σ m × n m\times n m×n 矩阵,除了主对角线上的元素以外全是 0,主对角线上的元素称为奇异值。 V V V n × n n\times n n×n 方阵。

那么如何求出 U , Σ , V U,\Sigma,V U,Σ,V 这三个矩阵呢?

通过 A T A A^TA ATA 我们可以得到一个 n × n n\times n n×n 方阵,然后特征分解: A T A v ⃗ i = λ i v ⃗ i A^TA\vec v_i=\lambda_i\vec v_i ATAv i=λiv i 所有特征向量 v ⃗ i \vec v_i v i 即可组成 n × n n\times n n×n 方阵 V V V
同理,通过如下分解: A A T u ⃗ i = λ i u ⃗ i AA^T\vec u_i=\lambda_i\vec u_i AATu i=λiu i即可得到 U U U
Σ \Sigma Σ 即是 A A A 的奇异值 σ i \sigma_i σi A = U Σ V T ⇒ A V = U Σ V T V ⇒ σ i = A v i u i A=U\Sigma V^T\Rightarrow AV=U\Sigma V^TV\Rightarrow \sigma_i=\frac{Av_i}{u_i} A=UΣVTAV=UΣVTVσi=uiAvi

一些性质

  1. A = U Σ V T ⇒ A T = V Σ U T ⇒ A T A = V Σ 2 V T A=U\Sigma V^T\Rightarrow A^T=V\Sigma U^T\Rightarrow A^TA=V\Sigma^2V^T A=UΣVTAT=VΣUTATA=VΣ2VT 也就是说: σ i 2 = λ i \sigma_i^2=\lambda_i σi2=λi(求解奇异值的第二个方法)
  2. 对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。 由于这个重要的性质,SVD可以用于PCA降维,来做数据压缩和去噪。




同步更新于:SP-FA 的博客


你可能感兴趣的:(线性代数,机器学习,算法,数据挖掘,线性代数)