奇異值分解
借 SVD 實現 PCA
主成分分析問的是:我的數據沿哪些方向變化最大?給定一團數據點,PCA 找出一組正交的軸——主成分——並按序排列,使第一個捕獲最多方差,第二個捕獲剩餘中最多的,依此類推。投影到前幾個上,你便在壓縮維數的同時保留了大部分結構。
教科書的路線是經由協方差矩陣 C = (1/(n-1)) X^T X(對中心化數據 X);主成分是它的特徵向量,方差是它的特徵值。SVD 路線則完全跳過構造 C。對中心化數據取 SVD,X = U Sigma V^T。於是右奇異向量 v_i 就是主方向,沿第 i 個成分的方差為 sigma_i^2 / (n - 1)。
它之所以有效,是因為 X^T X = V Sigma^2 V^T 恰好是協方差矩陣(的某個標量倍)的特徵分解:特徵向量是諸 v,特徵值是諸 sigma_i^2。因此 X 的 SVD 給出與對角化協方差相同的主成分,外加免費的得分(投影)U Sigma。
為何偏愛 SVD?構造 X^T X 會把條件數平方,在浮點運算中可能毀掉那些雖小卻真實的變化方向——把 10^{-8} 的奇異值平方就把它埋到 10^{-16},低於機器精度。SVD 直接作用於 X 並保持完整精度。這正是每個嚴肅的數值庫都通過 SVD 而非協方差矩陣來計算 PCA 的原因。
X (centered) = U Sigma V^T -> PCs = columns of V, variance_i = sigma_i^2 / (n - 1)
右奇異向量是主方向;奇異值的平方給出各方差。
中心化很重要:PCA 假定你已先從每列減去均值。對未中心化數據做 SVD 給出的是過原點的方向,那是一種不同(通常也不想要)的分析。
又稱
另見