奇异值分解SVD原理
特征值和特征向量
特征值和特征向量表示:
其中A是一个(n imes n)的实对称矩阵,x是一个n维向量,则我们说(lambda)是一个特征值,而x是矩阵A的特征值(lambda)对应的特征向量。有了特征值和特征向量,我们就可以将矩阵分解。假设我们求出了n个特征值(lambda_1lelambda_2le...lelambda_n)以及这n个特征值的特征向量({w_1,w_2,...,w_n}),如果这n个特征向量线性无关,那么A就可以用下式表示
其中W是这n个特征向量所形成的(n imes n)维矩阵,而(Sigma)为这n个特征值为对角线的(n imes n)维矩阵。
一般我们会所W的这n个特征向量标准化,即满足(lVert w_i Vert_2=1),或者说(w_i^Tw_i=1),此时W的n个特征向量为标准正交基,满足(W^TW=I)即(W^T=W^{-1}),也就是说W为酉矩阵。
这样,我们的特征分解表达式可以写为
此时,A必须为方阵,如果A不是方阵那么就用到了SVD。
SVD定义
SVD进行矩阵分解时不要求矩阵为方阵,假设矩阵A为一个(m imes n)的矩阵,那么定义矩阵A的SVD为:
其中U是一个(m imes m)的矩阵;(Sigma)是一个(m imes n)的矩阵,除了主对角线外的元素都为0,主对角线上的元素都为奇异值;V是一个(n imes n)的矩阵。U和V都是酉矩阵,即满足(U^TU=I,V^TT=I)。
三个矩阵的求解:
使用A的转置矩阵,假设
这样(A^TA)是一个方阵,可得到其n个特征值和对应的特征向量(v),将特征向量组成一个(n imes n)的矩阵,这里就是我们SVD公式里的V矩阵,一般我们将V中的每个特征向量叫做A的右奇异向量。
如果
得到m个特征值和对应的m个特征向量,组成一个(m imes m)的矩阵,这里就是SVD公式里的U矩阵,一般将U中的特征向量叫做A的左奇异向量。
有了U和V后,只需要再求得(Sigma)只需求出每个奇异值(sigma)即可。
这样,我们就可以根据(A,v,u)求出所有的奇异值(sigma),进而得到矩阵(Sigma)。
另一种方法求解,我们说(A^TA)的特征向量矩阵就是我们SVD中的V矩阵,(AA^T)的特征向量组成的矩阵是我们SVD中的U矩阵,如何证明
上式证明用了:(U^TU=I,Sigma^TSigma=Sigma^2),可以看出(A^TA)的特征向量组成的矩阵确实是SVD中的V矩阵。
进一步,我们可以看出特征值矩阵等于奇异值矩阵的平方,也就是
我们可以不用(sigma_i=frac{Av_i}{u_i})来算奇异值,可以直接通过求出(A^TA)的特征值,取平方根来找到奇异值。
SVD的性质
奇异值由大到小排列,而且减小特别快,我们可以选择最大的k个奇异值,k比n小的多,这个重要的性质可以用于降维或数据压缩。SVD可以用于PCA降维。
SVD总结
PCA降维时,需要计算协方差矩阵(X^TX),有时样本数非常大时,不计算量非常大。SVD的实现可以不先求协方差矩阵(X^TX)也能求出右厅异阵V,使用SVD算法进行PCA降维时可以不用做特征分解。
SVD可以实现并行化,加速数据处理。