转自:https://blog.51cto.com/u_15069450/2610934
问题引入
特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,突然看的话两者好像是差不多的,都可以用于信息的提取和转换,但是两者有啥区别呢?
问题解答
特征向量 (Eigenvector)
如果说一个向量 v v v是方阵 A A A的特征向量,将一定可以表示成下面的形式:
A v = λ v Av=\lambda v Av=λv
这时候 λ λ λ就被称为特征向量 v v v对应的特征值(Eigenvalue),一个矩阵的一组特征向量是一组正交向量。特征值分解(Eigendecomposition) 是将一个矩阵分解成下面的形式:
A = Q Λ Q − 1 A=Q\Lambda Q^{-1} A=QΛQ−1
其中 Q Q Q是这个矩阵 A A A的特征向量组成的矩阵, Λ \Lambda Λ是一个对角阵,每一个对角线上的元素就是一个特征值,里面的特征值是由大到小排列的。这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列),可以将每一个特征向量理解为一个线性的子空间,我们可以利用这些线性的子空间干很多的事情。不过,特征值分解也有很多的局限,比如说变换的矩阵必须是方阵。
奇异值
特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的,在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有 N N N个学生,每个学生有 M M M科成绩,这样形成的一个 N × M N \times M N×M的矩阵就不可能是方阵,我们怎样才能描述这样普通的矩阵呢的重要特征呢?奇异值分解(Singular Value Decomposition) 可以用来干这个事情,奇异值分解是一个能适用于任意的矩阵的一种分解的方法:
A = U Σ V T A=U\Sigma V^{\rm T} A=UΣVT
那么奇异值和特征值是怎么对应起来的呢?我们将一个矩阵A的转置乘以 A A A,并对求特征值,则有下面的形式:
( A T A ) V = λ V (A^{\rm T}A)V=\lambda V (ATA)V=λV
这里 V V V就是上面的右奇异向量,另外还有:
σ
i
=
λ
i
\sigma_{i}=\sqrt {\lambda_{i}}
σi=λi
u
i
=
1
σ
i
A
u_{i}=\frac{1}{\sigma_{i}}A
ui=σi1A (?)
这里的 σ \sigma σ就是奇异值, u u u就是上面说的左奇异向量。奇异值跟特征值类似,在矩阵中也是从大到小排列,而且的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前 r r r ( r ≪ m , n r \ll m,n r≪m,n)个的奇异值来近似描述矩阵,即部分奇异值分解