Processing math: 100%

奇异值分解

Posted by MaggicQ on September 18, 2018

本文目录

奇异值分解

奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算法的基石。下面对SVD的数学原理做一个回顾。

特征值和特征向量

特征值和特征向量的定义如下:

\[Ax = \lambda x\]

其中A是一个m×m的是矩阵,x是一个m维向量,则我们说λ是矩阵A的一个特征值,而x是矩阵A的特征值λ对应的特征向量。

假设矩阵A的n个特征值 λ1λ2λm,且这m个特征值对应的m个线性无关的特征向量为 u1,u2,.um,假设矩阵U=[u1,u2,,um],即U的列向量是矩阵A的特征向量,那么由特征向量的定义有:

\[AU=A(u1,u2,,um)=(λ1u1,λ2u2,,λmum)=(u1,u2,,um)[λ100λm]AU=UΛA=UΛU1\]

特别的,当矩阵A是一个实对称矩阵时,则存在一个对称对角化分解,即:

\[A = Q\Lambda Q^T\]

其中,Q的每一列都是相互正交的特征向量(正交矩阵, 即QTQ=QQT=I),且都是单位向量,Λ对角线上的元素是从大到小排列的特征值(实对称矩阵必存在对角化分解)。

SVD的数学含义

SVD同样是对矩阵进行分解,但不要求矩阵A一定是方阵,假设矩阵A=Am×n ,那么容易得到,AAT的大小为m×m的实对称方阵,ATA的大小为n×n的实对称方阵, 由上述可知,实对称方阵存在对称对角化分解,假设 AAT=PΛ1PT,ATA=QΛ2QT,则矩阵A的奇异值分解为

\[A = P\Sigma Q^T\]

其中,矩阵P=(p1,p2,,pm)的大小为m×m,列向量p1,p2,,pmAAT的特征向量,也被称为矩阵A左奇异向量(left singular vector);矩阵Q=(q1,q2,,qn)的大小为n×n,列向量q1,q2,,qnATA的特征向量,也被称为矩阵A右奇异向量(right singular vector);矩阵Λ1大小为m×m,矩阵Λ2大小为n×n,两个矩阵对角线上的非零元素相同(即矩阵AAT和矩阵ATA的非零特征值相同,推导过程见附录1);矩阵Σ的大小为m×n,位于对角线上的元素被称为奇异值(singular value)。

证明(为什么这么取PQ ):

\[A=P \Sigma Q^{T} \Rightarrow A^{T}=Q \Sigma^{T} P^{T} \Rightarrow A^{T} A=Q \Sigma^{T} P^{T} P \Sigma Q^{T}=Q \Sigma^{2} Q^{T} \\ 同理可得 AA^T = P\Sigma^2P^T\]

容易看出(AAT 或者说是ATA的)特征值矩阵等于奇异值矩阵的平方,也就是说特征值和奇异值满足以下的关系:

\[\sigma_{i}=\sqrt{\lambda_{i}}\]

SVD示意图:

SVD的性质以及应用

对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。也就是说:

\[A_{m \times n}=P_{m \times m} \Sigma_{m \times n} Q_{n \times n}^{T} \approx P_{m \times k} \Sigma_{k \times k} Q_{k \times n}^{T}\]

用低秩逼近去近似矩阵A有什么价值呢?给定一个很大的矩阵,大小为m×n,我们需要存储的元素数量是mn个,当矩阵A的秩k远小于mn,我们只需要存储k(m+n+1)个元素就能得到原矩阵A,即k个奇异值、km个左奇异向量的元素和kn个右奇异向量的元素;若采用一个秩r矩阵A1+A2++Ar去逼近,我们则只需要存储更少的r(m+n+1)个元素。因此,奇异值分解是一种重要的数据压缩方法。

由于这个重要的性质,SVD可以用于PCA降维,来做数据压缩去噪。也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需求来做推荐。同时也可以用于NLP中的算法,比如潜在语义索引(LSI)。

参考

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

奇异值分解的揭秘(一):矩阵的奇异值分解过程