本文目录
奇异值分解
奇异值分解(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)=(λ1→u1,λ2→u2,…,λm→um)=(→u1,→u2,…,→um)[λ1⋯0⋮⋱⋮0⋯λm]⇒AU=UΛ⇒A=UΛU−1\]特别的,当矩阵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,…,→pm是AAT的特征向量,也被称为矩阵A的左奇异向量(left singular vector);矩阵Q=(→q1,→q2,…,→qn)的大小为n×n,列向量→q1,→q2,…,→qn是ATA的特征向量,也被称为矩阵A的右奇异向量(right singular vector);矩阵Λ1大小为m×m,矩阵Λ2大小为n×n,两个矩阵对角线上的非零元素相同(即矩阵AAT和矩阵ATA的非零特征值相同,推导过程见附录1);矩阵Σ的大小为m×n,位于对角线上的元素被称为奇异值(singular value)。
证明(为什么这么取P和Q ):
\[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远小于m和n,我们只需要存储k(m+n+1)个元素就能得到原矩阵A,即k个奇异值、km个左奇异向量的元素和kn个右奇异向量的元素;若采用一个秩r矩阵A1+A2+…+Ar去逼近,我们则只需要存储更少的r(m+n+1)个元素。因此,奇异值分解是一种重要的数据压缩方法。
由于这个重要的性质,SVD可以用于PCA降维,来做数据压缩和去噪。也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需求来做推荐。同时也可以用于NLP中的算法,比如潜在语义索引(LSI)。