PCA,到底在做什么


很久以前寫過一篇 PCA 的小白教程,不過由於當時對 PCA 的理解流於表面,所以只是介紹了一下 PCA 的算法流程。今天在數圖課上偶然聽到 PCA 在圖像壓縮上的應用,突然明白了一點實質性的東西,這里趁熱記錄一波。

PCA 算法

首先還是簡單回顧下 PCA 的算法流程。

我們把樣本數據 \(x\) 歸一化后,計算其協方差矩陣 \(C_x\),然后計算 \(C_x\) 的特征向量,構造出一個特征向量矩陣 \(A\),最后把 \(x\) 通過該矩陣映射到一個新的空間,得到的向量 \(y\) 就是能體現 \(x\) 主要成分的向量了。

PCA 在做什么

那么,這種空間映射有什么意義呢?問題要回到協方差矩陣 \(C_x\) 上。我們知道,協方差矩陣是一個對稱矩陣,在線性代數中,對稱矩陣的特征向量是相互正交的。而我們把 \(x\) 通過這個特征向量矩陣映射到 \(y\),其實就是把原來的數據由最初的 \([e_1, e_2, \dots, e_n]\) 的單位坐標系,調整到這些正交的特征向量組成的坐標系下,如下圖所示:

這種坐標變換的意義又在哪呢?

如果仔細分析,我們就會發現,這些新得到的向量 \(y\) 的均值為 \(0\),而且它們的協方差矩陣為:

\[C_y=AC_xA^T=\begin{bmatrix} \lambda_1 & & & 0 \\ & \lambda_2 & & \\ & & \ddots & \\ 0 & & & \lambda_n \end{bmatrix} \]

這里,\(A\) 是由 \(C_x\) 的特征向量組成的矩陣,它的第一行表示最大特征值對應的特征向量,第二行表示第二大特征值對應的特征向量。\(C_y\) 對角線上的 \(\lambda_k\) 代表 \(C_x\) 的特征值,而且是按照從大到小排序的(\(\lambda_1 > \lambda_2 > \dots > \lambda_n\))。

這個新的協方差矩陣有一個很重要的性質,除了對角線上的元素,其他元素通通是 0。要知道,協方差矩陣中,對角線上的元素表示方差,非對角線上的元素表示協方差。這說明,經過 PCA 處理后,我們把原本的數據 \(x\),轉變成各個分量之間沒有任何關系(協方差為 0)的數據 \(y\)!我認為這正是 PCA 的精髓所在,也是我們使用 PCA 算法的根本目標。

另外,PCA 還經常用於降維處理,那么為什么 PCA 的降維效果會那么好?

首先要明確一點,降維不是隨便都能降的,最好的降維方法是要盡量保留重要的信息,而忽略次要的信息。在 PCA 中,我們一般是對協方差矩陣的特征值按從大到小排序,然后舍棄一些比較小的特征值(以及這些特征值對應的特征向量),這樣重新計算得到 \(y\) 后,它的協方差矩陣可能是這個樣子的:

\[C_y=\begin{bmatrix} \lambda_1 & & & 0 \\ & \lambda_2 & & \\ & & \ddots & \\ 0 & & & \lambda_k \end{bmatrix} \]

(我們舍棄掉了 \(n-k\) 個特征向量,將數據由 \(n\) 維降到 \(k\) 維)

要知道,這些特征值(或者說方差)都是按照從大到小排序的,也就是說,我們在降維時,舍棄掉了那些特征值比較小的分量。這么做是符合常理的,因為數據的方差越大,證明分布越廣,這樣,我們還原這些數據的難度是越大的,而方差越小,證明數據分布越集中,還原它們的難度就越小(方差為 0 的話,用一個數就可以代表所有樣本了)。所以,降維時,我們盡量保留那些方差大的數據,而忽略那些方差小的。本文開篇的圖中給出一個形象的解釋,我們把一個二維的數據映射到一維時,也是優先映射到方差大的那一維上,這樣,原數據的分布規律可以最大限度的保留下來,信息的保留也是最完整的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM