主成分分析法(PCA)原理和步驟


主成分分析法(PCA)原理和步驟

主成分分析(Principal Component Analysis,PCA)是一種多變量統計方法,它是最常用的降維方法之一,通過正交變換將一組可能存在相關性的變量數據,轉換為一組線性不相關的變量,轉換后的變量被稱為主成分。
可以使用兩種方法進行 PCA,分別是特征分解或奇異值分解(SVD)。

准備工作

PCA 將 n 維輸入數據縮減為 r 維,其中 r<n。簡單地說,PCA 實質上是一個基變換,使得變換后的數據有最大的方差,也就是通過對坐標軸的旋轉和坐標原點的平移,使得其中一個軸(主軸)與數據點之間的方差最小,坐標轉換后去掉高方差的正交軸,得到降維數據集。
這里使用 SVD 方法進行 PCA 降維,假定有 p×n 維數據樣本 X,共有 p 個樣本,每行是 n 維,p×n 實矩陣可以分解為:

這里,正交陣 U 的維數是 p×n,正交陣 V 的維數是 n×n(正交陣滿足:UUT=VTV=1),Σ 是 n×n 的對角陣。接下來,將 Σ 分割成 r 列,記作 Σr;利用 U 和 V 便能夠得到降維數據點 Yr

具體做法

  1. 導入所需的模塊,除了 TensorFlow,還需要 numpy 進行基本的矩陣計算,用 matplotlib、mpl_toolkit 和 seaborn 繪制圖形:


  1. 加載數據集,此處使用常用的 MNIST 數據集:                                                                                                                                                       
  2. 定義類 TF_PCA,此類初始化如下:                                                                                                     
  3. 定義 fit 函數,計算輸入數據的 SVD。定義計算圖,以此計算奇異值和正交矩陣 U,self._X 以占位符的形式讀入數據 self.data,tf.svd 以遞減順序返回形狀為 [...,p] 的奇異值 s(singular_values),然后使用 tf.diag 將奇異值轉換為對角矩陣:                                                                                                                                      
  4. 現在有了 sigma 矩陣、正交矩陣 U 和奇異值,下面定義 reduce 函數來計算降維數據。該方法需要 n_dimensions 和 keep_info 兩個輸入參數之一,n_dimensions 參數表示在降維數據中保持的維數,keep_info 參數表示保留信息的百分比(0.8意味着保持 80% 的原始數據)。該方法創建一個計算圖,對 sigma 矩陣進行分割並計算降維數據集 YrTF_PCA 類已經准備就緒,下面會將 MNIST 的每個輸入數據從維度為 784(28×28)減小到每個維度為 3。在這里為了對比效果只保留了 10% 的信息,但通常情況下需要保留大約 80% 的信息:TF_PCA 類已經准備就緒,下面會將 MNIST 的每個輸入數據從維度為 784(28×28)減小到每個維度為 3。在這里為了對比效果只保留了 10% 的信息,但通常情況下需要保留大約 80% 的信息:
  5.       TF_PCA 類已經准備就緒,下面會將 MNIST 的每個輸入數據從維度為 784(28×28)減小到每個維度為 3。在這里為了對比效果只保留了 10% 的信息,但通常情況下需要保留大約 80% 的信息:                                                                                                                                                 

代碼輸出如下:

  1. 繪制三維空間中的 55000 個數據點:

     

     

解讀分析

前面的代碼對 MNIST 圖像進行了降維操作。原圖的大小為 28×28,利用 PCA 方法把尺寸壓縮得更小。通常在圖像處理中經常用到降維操作,因為太大的圖像尺寸包含大量的冗余數據。
TensorFlow 中的 embeddings 技術可以實現從對象到向量的映射,TensorBoard 中的 Embedding Projector 可以交互式地對模型的 embeddings 進行可視化,並提供了三種降維的方法:PCA、t-SNE 和自定義方式,可以使用 Embeddings Projector 來得到與上面類似的結果。
這需要從 tensorflow.contrib.tensorboard.plugins 中導入 projector,並且通過簡單的三個步驟就可以完成:

  1. 加載數據:                                                                                                                                           
  2. 新建一個 metadata 文件(用制表符分隔的 .tsv 文件):                                                                                                                                  
  3. 將 embeddings 保存在 Log_DIR 中:

    現在就可以使用 TensorBoard 查看 embeddings 了,通過命令行 tensorboard--logdir=log,在 Web 瀏覽器中打開 TensorBoard,然后進入 EMBEDDINGS 選項卡。下圖顯示的就是使用 PCA 方法運算的前三個主成分為軸的 TensorBoard 投影:

 

 


 


免責聲明!

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



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