SVD和PCA是两种常用的降维方法,在机器学习学习领域有很重要的应用例如数据压缩、去噪等,并且面试的时候可能时不时会被面试官问到,最近在补课的时候也顺便查资料总结了一下。
对于样本集Xm×n={x1;x2;…;xm},每一行表示一个n维样本。PCA将n维样本xi投影到一个低维空间中去从而实现降维。具体来说,可以从两个角度来约束投影:最大化方差和最小化投影误差。有意思的是,从这两个方向推导最后会得到相同的结果。
从最大化方差的角度理解,假设投影的方向为v,数据的均值为xˉ=m1∑i=1mxi,那么使得X在方向v上的投影方差最大也就是
vmaxm1i=1∑m(xiv−xˉ)2=vmaxvTSv(1)
S为协方差矩阵,若提前对数据进行零均值化处理,则S=m1∑i=1mxiTxi=m1XTX,由于S是实对称矩阵,因此可以对其进行对角化处理
S=VLVT(2)
其中Vn×n为正交矩阵,即VTV=I,V的每一列都是S的一个特征向量。Ln×n为对角矩阵,对角线上的值为特征值,和V的每一列一一对应并且按值递减排列。将S代入目标函数(1)中去,可得
vTSv=vTVLVTv=λ(3)
所以方差最大值就是最大的特征值。也就是说当投影方向是最大特征值对应的特征向量时,数据在投影方向上的方差最大。因此,主成分分析选取较大的k个特征值对应的特征向量进行。投影后的数据为X=XVk,Vk为最大的k个特征值对应的特征矩阵。这样就将X从n维空间压缩到了k维。
再说奇异值分解。对于X进行奇异值分解可得
X=UΣVT(4)
其中,Um×m、Vn×n均为单位正交矩阵,Σ仅在主对角线上有非零值,就是奇异值。
经过奇异值分解可以得到X的另一种表达形式,此时再计算X的协方差矩阵可得(这里依旧假设X已经预先进行了零均值化处理):
S=m1XTX=m1VΣTUTUΣVT=VmΣ2VT(5)
现在对比式(5)和式(2)就会发现,X的奇异值和S的特征值存在一一对应关系: λi=mΣi2。 此时再将X投影到前k个主成分的方向上,可得
X=XVk=UΣVTVk=UkΣk(6)
其中,Uk为U的前k列,Σk为 Σ左上角的k×k部分。
- 对X进行奇异值分解后,V的每一列(特征向量)都是一个主成分的方向,UkΣk构成了主成分;
- X的奇异值和其协方差矩阵S的特征值存在一一对应关系: λi=mΣi2。且特征值λi也是对应主成分的方差;
- PCA只能获取单个方向上的主成分,而SVD可以获取两个方向上的主成分(行压缩,可以用来去除冗余样本):
S=n1XXT=n1UΣVTVΣTUT=UnΣ2UT
- 通过SVD也可以计算PCA,并且通常式更好的选择。因为PCA需要计算XTX,在X维数很大的时候计算量很大,并且某些情况下可能会丢失数据精度。
https://blog.csdn.net/wangjian1204/article/details/50642732 https://stats.stackexchange.com/questions/134282/relationship-between-svd-and-pca-how-to-use-svd-to-perform-pca