SVD和PCA是兩種常用的降維方法,在機器學習學習領域有很重要的應用例如數據壓縮、去噪等,並且面試的時候可能時不時會被面試官問到,最近在補課的時候也順便查資料總結了一下。
主成分分析PCA
對於樣本集\(X_{m\times n}=\left \{x_{1};x_{2};\dots ;x_{m}\right \}\),每一行表示一個n維樣本。PCA將\(n\)維樣本\(x_i\)投影到一個低維空間中去從而實現降維。具體來說,可以從兩個角度來約束投影:最大化方差和最小化投影誤差。有意思的是,從這兩個方向推導最后會得到相同的結果。
從最大化方差的角度理解,假設投影的方向為\(v\),數據的均值為\(\bar{x}=\frac{1}{m}\sum_{i=1}^{m}x_i\),那么使得\(X\)在方向\(v\)上的投影方差最大也就是
\(S\)為協方差矩陣,若提前對數據進行零均值化處理,則\(S=\frac{1}{m}\sum_{i=1}^{m} x_i^Tx_i =\frac{1}{m}X^TX\),由於\(S\)是實對稱矩陣,因此可以對其進行對角化處理
其中\(V_{n\times n}\)為正交矩陣,即\(V^TV=I\),\(V\)的每一列都是\(S\)的一個特征向量。\(L_{n\times n}\)為對角矩陣,對角線上的值為特征值,和\(V\)的每一列一一對應並且按值遞減排列。將\(S\)代入目標函數(1)中去,可得
所以方差最大值就是最大的特征值。也就是說當投影方向是最大特征值對應的特征向量時,數據在投影方向上的方差最大。因此,主成分分析選取較大的\(k\)個特征值對應的特征向量進行。投影后的數據為\(\widetilde{X}=XV_k\),\(V_k\)為最大的\(k\)個特征值對應的特征矩陣。這樣就將\(X\)從\(n\)維空間壓縮到了\(k\)維。
奇異值分解SVD
再說奇異值分解。對於\(X\)進行奇異值分解可得
其中,\(U_{m \times m}\)、\(V_{n \times n}\)均為單位正交矩陣,\(\Sigma\)僅在主對角線上有非零值,就是奇異值。
經過奇異值分解可以得到\(X\)的另一種表達形式,此時再計算\(X\)的協方差矩陣可得(這里依舊假設\(X\)已經預先進行了零均值化處理):
現在對比式(5)和式(2)就會發現,\(X\)的奇異值和\(S\)的特征值存在一一對應關系: \(\lambda_i=\frac {\Sigma_i^2}{m}\)。
此時再將\(X\)投影到前\(k\)個主成分的方向上,可得
其中,\(U_k\)為\(U\)的前\(k\)列,\(\Sigma_k\)為 \(\Sigma\)左上角的\(k\times k\)部分。
PCA和SVD區別與聯系
- 對\(X\)進行奇異值分解后,\(V\)的每一列(特征向量)都是一個主成分的方向,\(U_k \Sigma_k\)構成了主成分;
- \(X\)的奇異值和其協方差矩陣\(S\)的特征值存在一一對應關系: \(\lambda_i=\frac {\Sigma_i^2}{m}\)。且特征值\(\lambda_i\)也是對應主成分的方差;
- PCA只能獲取單個方向上的主成分,而SVD可以獲取兩個方向上的主成分(行壓縮,可以用來去除冗余樣本):
- 通過SVD也可以計算PCA,並且通常式更好的選擇。因為PCA需要計算\(X^TX\),在\(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