C語言中文網 目錄
TensorFlow
1 TensorFlow是什么
2 TensorFlow安裝和下載
3 第一個TensorFlow程序
4 TensorFlow程序結構
5 TensorFlow常量、變量和占位符
6 TensorFlow矩陣基本操作
7 TensorFlow TensorBoard數據流圖可視化
8 TensorFlow代碼自動升級為1.0版本
9 TensorFlow XLA
10 TensorFlow指定CPU和GPU設備
11 TensorFlow與深度學習
12 TensorFlow常用Python擴展包
13 回歸算法有哪些
14 TensorFlow損失函數
15 TensorFlow優化器
16 TensorFlow csv文件讀取數據
17 TensorFlow實現簡單線性回歸
18 TensorFlow實現多元線性回歸
19 TensorFlow邏輯回歸處理MNIST數據集
20 感知機與神經網絡
21 TensorFlow常用激活函數(6種)
22 TensorFlow實現單層感知機
23 TensorFlow實現反向傳播算法
24 TensorFlow多層感知機實現MINIST分類
25 TensorFlow多層感知機函數逼近
26 TensorFlow超參數
27 TensorFlow Keras
28 CNN卷積神經網絡
29 三維卷積神經網絡預測MNIST數字
30 卷積神經網絡分類圖片
31 遷移學習
32 DeepDream網絡
33 TensorFlow實現文本情感分析
34 VGG網絡濾波器
35 VGGNet、ResNet、Inception和Xception
36 預建深度學習提取特征及實現
37 TensorFlow實現InceptionV3
38 TensorFlow WaveNet聲音合成
39 TensorFlow視頻分類(6種方法)
40 RNN循環神經網絡
41 神經機器翻譯(seq2seq RNN)
42 注意力機制(基于seq2seq RNN)
43 RNN訓練模型并生成文本
44 RNN循環神經網絡實現預測比特幣價格
45 主成分分析法(PCA)
46 k均值聚類算法
47 SOM自組織映射法
48 受限玻爾茲曼機訓練
49 推薦系統的實現(基于RBM)
50 基于DBN實現情緒檢測
51 自編碼器
52 標準自編碼器
53 稀疏自編碼器
54 去燥自編碼器
55 卷積自編碼器
56 堆疊自編碼器
57 強化學習
58 OpenAI Gym安裝和使用
59 全連接神經網絡實現玩Pac-Man游戲
60 Q learning實現Cart-Pole平衡游戲
61 DQN算法(深度Q網絡)
62 David Silver策略梯度算法
63 深度學習在移動端的應用
64 Android移動端部署TensorFlow mobile
65 iPhone移動端部署TensorFlow mobile
66 移動端優化TensorFlow代碼
67 GAN生成式對抗網絡
68 GAN生成式對抗網絡虛構MNIST圖像
69 DCGAN虛構MNIST圖像
70 DCGAN虛構名人面孔和其他數據集
71 VAE變分自編碼器
72 CapsNet膠囊網絡
73 TensorFlow分布式
74 TensorFlow GPU的安裝和使用
75 TensorFlow分布式
76 TensorFlow分布式訓練MNIST分類器
77 TensorFlow Serving運行Docker容器
78 TensorFlow分布式在谷歌云平臺運行
79 TensorFlow分布式在谷歌CloudML運行
80 TensorFlow分布式在Microsoft Azure上運行
81 TensorFlow分布式在Amazon AWS上運行
首頁 > TensorFlow 閱讀:1,173

主成分分析法(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 繪制圖形:


     
  2. 加載數據集,此處使用常用的 MNIST 數據集:


     
  3. 定義類 TF_PCA,此類初始化如下:


     
  4. 定義 fit 函數計算輸入數據的 SVD。定義計算圖,以此計算奇異值和正交矩陣 U,self._X 以占位符的形式讀入數據 self.data,tf.svd 以遞減順序返回形狀為 [...,p] 的奇異值 s(singular_values),然后使用 tf.diag 將奇異值轉換為對角矩陣:


     
  5. 現在有了 sigma 矩陣、正交矩陣 U 和奇異值,下面定義 reduce 函數來計算降維數據。該方法需要 n_dimensions 和 keep_info 兩個輸入參數之一,n_dimensions 參數表示在降維數據中保持的維數,keep_info 參數表示保留信息的百分比(0.8意味著保持 80% 的原始數據)。該方法創建一個計算圖,對 sigma 矩陣進行分割并計算降維數據集 Yr:


     
  6. TF_PCA 類已經準備就緒,下面會將 MNIST 的每個輸入數據從維度為 784(28×28)減小到每個維度為 3。在這里為了對比效果只保留了 10% 的信息,但通常情況下需要保留大約 80% 的信息:


     
    代碼輸出如下:


     
  7. 繪制三維空間中的 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 投影:

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo