1. 程式人生 > >Deep Learning 4_深度學習UFLDL教程:PCA in 2D_Exercise(斯坦福大學深度學習教程)

Deep Learning 4_深度學習UFLDL教程:PCA in 2D_Exercise(斯坦福大學深度學習教程)

前言

     本節練習的主要內容:PCA,PCA Whitening以及ZCA Whitening在2D資料上的使用,2D的資料集是45個數據點,每個資料點是2維的。要注意區別比較二維資料與二維影象的不同,特別是在程式碼中,可以看出主要二維資料的在PCA前的預處理不需要先0均值歸一化,而二維自然影象需要先0均值歸一化。本節是在學習UFLDL第二節和結合上節的博文:Deep Learning三:預處理之主成分分析與白化_總結(斯坦福大學UFLDL深度學習教程)的基礎上練習的,練習內容是Exercise:PCA in 2D,主要是講二維資料的PCA、PCA白化、ZCA白化,下一節講二維自然影象的PCA、PCA白化、ZCA白化。

實驗環境:win7 matlab2015b

一些matlab函式

彩色分散點圖函式:scatter(x,y,c,s) x, y為兩個向量,用於定位資料點,s為繪圖點的大小,c為繪圖所使用的色彩,s和c均可以以向量或表示式形式給出,s和c為與x或y同長度的向量時標記點尺 寸和顏色將按線性規律變化。在 scatter函式的前4各引數之後還可以增加第五個引數‘ filled‘,表示填充繪圖點。Scatter與plot 的最大差別在於Scatter可以繪製變尺寸、變顏色的點圖。
例:給定資料t=0:pi/10:2*pi, y=sin(t),觀察在不同輸入引數時函式的繪圖結果。
t=0:pi/10:2*pi; y=sin(t)
subplot(3,2,1); scatter(t,y)
subplot(3,2,2); scatter(t,y,'v')
subplot(3,2,3); scatter(t,y,(abs(y)+2).^4,'filled')
subplot(3,2,4); scatter(t,y,30,[0:2: 40],'v','filled')
subplot(3,2,5); scatter(t,y,(t+1).^3,y,'filled')

diag函式功能:矩陣對角元素的提取和建立對角陣

設以下X為方陣,v為向量

1、X = diag(v,k)當v是一個含有n個元素的向量時,返回一個n+abs(k)階方陣X,向量v在矩陣X中的第k個對角線上,k=0表示主對角線,k>0表示在主對角線上方,k<0表示在主對角線下方。例1:

v=[1 2 3];
diag(v, 3)

ans =

     0     0     0     1     0     0
     0     0     0     0     2     0
     0     0     0     0     0     3
     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0

注:從主對角矩陣上方的第三個位置開始按對角線方向產生資料的

例2:

v=[1 2 3];
diag(v, -1)
ans =
      0 0 0 0
      1 0 0 0
      0 2 0 0
      0 0 3 0

注:從主對角矩陣下方的第一個位置開始按對角線方向產生資料的

2、X = diag(v)

向量v在方陣X的主對角線上,類似於diag(v,k),k=0的情況。

例3:

v=[1 2 3];
diag(v)

ans =

1 0 0
0 2 0
0 0 3

注:寫成了對角矩陣的形式

 3、v = diag(X,k)

返回列向量v,v由矩陣X的第k個對角線上的元素形成

例4:

 v=[1 0 3;2 3 1;4 5 3];
diag(v,1)

ans =

     0
     1

注:把主對角線上方的第一個資料作為起始資料,按對角線順序取出寫成列向量形式

4、v = diag(X)返回矩陣X的主對角線上的元素,類似於diag(X,k),k=0的情況例5:

v=[1 0 0;0 3 0;0 0 3];
diag(v)

ans =

1
3
3

或改為:

v=[1 0 3;2 3 1;4 5 3];
diag(v)

ans =

1
3
3

注:把主對角線的資料取出寫成列向量形式

5、diag(diag(X))

取出X矩陣的對角元,然後構建一個以X對角元為對角的對角矩陣。
例6:

 X=[1 2;3 4]       
 diag(diag(X))

X =

     1     2
     3     4

ans =

     1     0
     0     4

實驗步驟及結果

1.載入45個二維資料點,並用scatter函式顯示出來。結果如下:

2.找到PCA的兩個主方向,即:PCA的基,在原始資料上顯示出來。先求出原始資料的協方差矩陣,再用svd函式求出該矩陣的特徵向量,這就是要求的基。注意:對二維資料,其原始資料的預處理並沒有0均值歸一化。結果如下:

3.把原始資料對映(投影)或旋轉到上一步所求的基方向上,得到資料\textstyle x_{\rm rot} ,然後用scatter函式把它顯示出來。結果如下:

4.降維後近似還原原始資料,即:對上一步的資料結果降維,並顯示出來。先計算設定要保留下來的主成份個數k,從而計算出降維後還原的原始資料 \textstyle \hat{x}。結果如下:

5.PCA白化,即把原始資料利用PCA whitening的方法去相關後,得到的原資料顯示出來。結果如下:

6.ZCA白化,即把原始資料利用ZCA whitening的方法去相關後,得到的原資料顯示出來。結果如下:

程式碼

pca_2d.m

close all

%%================================================================
%% Step 0: Load data
%  We have provided the code to load data from pcaData.txt into x.
%  x is a 2 * 45 matrix, where the kth column x(:,k) corresponds to
%  the kth data point.Here we provide the code to load natural image data into x.
%  You do not need to change the code below.

x = load('pcaData.txt','-ascii');
figure(1);
scatter(x(1, :), x(2, :));
title('Raw data');


%%================================================================
%% Step 1a: Implement PCA to obtain U 
%  Implement PCA to obtain the rotation matrix U, which is the eigenbasis
%  sigma. 

% -------------------- YOUR CODE HERE -------------------- 
u = zeros(size(x, 1)); % You need to compute this
[n m] = size(x);
%x = x-repmat(mean(x,2),1,m);%預處理,均值為0
sigma = (1.0/m)*x*x';
[u s v] = svd(sigma);


% -------------------------------------------------------- 
hold on
plot([0 u(1,1)], [0 u(2,1)]);%畫第一條線
plot([0 u(1,2)], [0 u(2,2)]);%第二條線
scatter(x(1, :), x(2, :));
hold off

%%================================================================
%% Step 1b: Compute xRot, the projection on to the eigenbasis
%  Now, compute xRot by projecting the data on to the basis defined
%  by U. Visualize the points by performing a scatter plot.

% -------------------- YOUR CODE HERE -------------------- 
xRot = zeros(size(x)); % You need to compute this
xRot = u'*x;


% -------------------------------------------------------- 

% Visualise the covariance matrix. You should see a line across the
% diagonal against a blue background.
figure(2);
scatter(xRot(1, :), xRot(2, :));
title('xRot');

%%================================================================
%% Step 2: Reduce the number of dimensions from 2 to 1. 
%  Compute xRot again (this time projecting to 1 dimension).
%  Then, compute xHat by projecting the xRot back onto the original axes 
%  to see the effect of dimension reduction

% -------------------- YOUR CODE HERE -------------------- 
k = 1; % Use k = 1 and project the data onto the first eigenbasis
xHat = zeros(size(x)); % You need to compute this
xHat = u*([u(:,1),zeros(n,1)]'*x);


% -------------------------------------------------------- 
figure(3);
scatter(xHat(1, :), xHat(2, :));
title('xHat');


%%================================================================
%% Step 3: PCA Whitening
%  Complute xPCAWhite and plot the results.

epsilon = 1e-5;
% -------------------- YOUR CODE HERE -------------------- 
xPCAWhite = zeros(size(x)); % You need to compute this
xPCAWhite = diag(1./sqrt(diag(s)+epsilon))*u'*x;



% -------------------------------------------------------- 
figure(4);
scatter(xPCAWhite(1, :), xPCAWhite(2, :));
title('xPCAWhite');

%%================================================================
%% Step 3: ZCA Whitening
%  Complute xZCAWhite and plot the results.

% -------------------- YOUR CODE HERE -------------------- 
xZCAWhite = zeros(size(x)); % You need to compute this
xZCAWhite = u*diag(1./sqrt(diag(s)+epsilon))*u'*x;

% -------------------------------------------------------- 
figure(5);
scatter(xZCAWhite(1, :), xZCAWhite(2, :));
title('xZCAWhite');

%% Congratulations! When you have reached this point, you are done!
%  You can now move onto the next PCA exercise. :)

  二維資料:pcaData.txt

  -6.7644914e-01  -6.3089308e-01  -4.8915202e-01  -4.8005424e-01  -3.7842021e-01  -3.3788391e-01  -3.2023528e-01  -3.1108837e-01  -2.3145555e-01  -1.9623727e-01  -1.5678926e-01  -1.4900779e-01  -1.0861557e-01  -1.0506308e-01  -8.0899829e-02  -7.1157518e-02  -6.3251073e-02  -2.6007219e-02  -2.2553443e-02  -5.8489047e-03  -4.3935323e-03  -1.7309716e-03   7.8223728e-03   7.5386969e-02   8.6608396e-02   9.6406046e-02   1.0331683e-01   1.0531131e-01   1.1493296e-01   1.3052813e-01   1.6626253e-01   1.7901863e-01   1.9267343e-01   1.9414427e-01   1.9770003e-01   2.3043613e-01   3.2715844e-01   3.2737163e-01   3.2922364e-01   3.4869293e-01   3.7500704e-01   4.2830153e-01   4.5432503e-01   5.4422436e-01   6.6539963e-01
  -4.4722050e-01  -7.4778067e-01  -3.9074344e-01  -5.6036362e-01  -3.4291940e-01  -1.3832158e-01   1.2360939e-01  -3.3934986e-01  -8.2868433e-02  -2.4759514e-01  -1.0914760e-01   4.2243921e-01  -5.2329327e-02  -2.0126541e-01   1.3016657e-01   1.2293321e-01  -3.4787750e-01  -1.4584897e-01  -1.0559656e-01  -5.4200847e-02   1.6915422e-02  -1.1069762e-01   9.0859816e-02   1.5269096e-01  -9.4416463e-02   1.5116385e-01  -1.3540126e-01   2.4592698e-01   5.1087447e-02   2.4583340e-01  -5.9535372e-02   2.9704742e-01   1.0168115e-01   1.4258649e-01   1.0662592e-01   3.1698532e-01   6.1577841e-01   4.3911172e-01   2.7156501e-01   1.3572389e-01   3.1918066e-01   1.5122962e-01   3.4979047e-01   6.2316971e-01   5.2018811e-01

參考資料:

相關推薦

Deep Learning 4_深度學習UFLDL教程PCA in 2D_Exercise斯坦福大學深度學習教程

前言      本節練習的主要內容:PCA,PCA Whitening以及ZCA Whitening在2D資料上的使用,2D的資料集是45個數據點,每個資料點是2維的。要注意區別比較二維資料與二維影象的不同,特別是在程式碼中,可以看出主要二維資料的在PCA前的預處理不需要先0均值歸一化,而二維自然影象需要先

Deep Learning 5_深度學習UFLDL教程PCA and Whitening_Exercise斯坦福大學深度學習教程

close all; % clear all; %%================================================================ %% Step 0a: Load data % Here we provide the code to load n

Deep Learning 1_深度學習UFLDL教程Sparse Autoencoder練習斯坦福大學深度學習教程

1前言           本人寫技術部落格的目的,其實是感覺好多東西,很長一段時間不動就會忘記了,為了加深學習記憶以及方便以後可能忘記後能很快回憶起自己曾經學過的東西。      首先,在網上找了一些資料,看見介紹說UFLDL很不錯,很適合從基礎開始學習,Adrew Ng大牛寫得一點都不裝B,感覺非常好

Deep Learning 19_深度學習UFLDL教程Convolutional Neural Network_Exercise斯坦福大學深度學習教程

基礎知識 概述       CNN是由一個或多個卷積層(其後常跟一個下采樣層)和一個或多個全連線層組成的多層神經網路。CNN的輸入是2維影象(或者其他2維輸入,如語音訊號)。它通過區域性連線和權值共享,再通過池化可得到平移不變特徵。CNN的另一個優點就是易於訓練

Deep Learning 11_深度學習UFLDL教程資料預處理斯坦福大學深度學習教程

資料預處理是深度學習中非常重要的一步!如果說原始資料的獲得,是深度學習中最重要的一步,那麼獲得原始資料之後對它的預處理更是重要的一部分。 1.資料預處理的方法: ①資料歸一化: 簡單縮放:對資料的每一個維度的值進行重新調節,使其在 [0,1]或[ − 1,1] 的區間內 逐樣本均值消減:在每個

Deep Learning 13_深度學習UFLDL教程Independent Component Analysis_Exercise斯坦福大學深度學習教程

前言 實驗環境:win7, matlab2015b,16G記憶體,2T機械硬碟 難點:本實驗難點在於執行時間比較長,跑一次都快一天了,並且我還要驗證各種代價函式的對錯,所以跑了很多次。 實驗基礎說明:      ①不同點:本節實驗中的基是標準正交的,也是線性獨立的,而Deep Learni

Deep Learning 7_深度學習UFLDL教程Self-Taught Learning_Exercise斯坦福大學深度學習教程

前言 理論知識:自我學習 練習環境:win7, matlab2015b,16G記憶體,2T硬碟       一是用29404個無標註資料unlabeledData(手寫數字資料庫MNIST Dataset中數字為5-9的資料)來訓練稀疏自動編碼器,得到其權重引數opttheta。這一步的目的是提取這

Deep Learning 2_深度學習UFLDL教程向量化程式設計斯坦福大學深度學習教程

1前言     本節主要是讓人用向量化程式設計代替效率比較低的for迴圈。     在前一節的Sparse Autoencoder練習中已經實現了向量化程式設計,所以與前一節的區別只在於本節訓練集是用MINIST資料集,而上一節訓練集用的是從10張圖片中隨機選擇的8*8的10000張小圖塊。綜上,只需要在

Deep Learning 10_深度學習UFLDL教程Convolution and Pooling_exercise斯坦福大學深度學習教程

前言 實驗環境:win7, matlab2015b,16G記憶體,2T機械硬碟 實驗內容:Exercise:Convolution and Pooling。從2000張64*64的RGB圖片(它是 the STL10 Dataset的一個子集)中提取特徵作為訓練資料集,訓練softmax分類器,然後從

Deep Learning 3_深度學習UFLDL教程預處理之主成分分析與白化_總結斯坦福大學深度學習教程

1PCA     ①PCA的作用:一是降維;二是可用於資料視覺化; 注意:降維的原因是因為原始資料太大,希望提高訓練速度但又不希望產生很大的誤差。     ② PCA的使用場合:一是希望提高訓練速度;二是記憶體太小;三是希望資料視覺化。     ③用PCA前的預處理:(1)規整化特徵的均值大致為0;(

Deep Learning 8_深度學習UFLDL教程Stacked Autocoders and Implement deep networks for digit classification_Exercise斯坦福大學深度學習教程

前言 2.實驗環境:win7, matlab2015b,16G記憶體,2T硬碟 3.實驗內容:Exercise: Implement deep networks for digit classification。利用深度網路完成MNIST手寫數字資料庫中手寫數字的識別。即:用6萬個已標註資料(即:6萬

Deep Learning 12_深度學習UFLDL教程Sparse Coding_exercise斯坦福大學深度學習教程

前言 實驗環境:win7, matlab2015b,16G記憶體,2T機械硬碟 本節實驗比較不好理解也不好做,我看很多人最後也沒得出好的結果,所以得花時間仔細理解才行。 實驗內容:Exercise:Sparse Coding。從10張512*512的已經白化後的灰度影象(即:Deep Learnin

Deep Learning 6_深度學習UFLDL教程Softmax Regression_Exercise斯坦福大學深度學習教程

前言      練習內容:Exercise:Softmax Regression。完成MNIST手寫數字資料庫中手寫數字的識別,即:用6萬個已標註資料(即:6萬張28*28的影象塊(patches)),作訓練資料集,然後利用其訓練softmax分類器,再用1萬個已標註資料(即:1萬張28*28的影象塊(pa

Deep Learning 9_深度學習UFLDL教程linear decoder_exercise斯坦福大學深度學習教程

前言 實驗基礎說明: 1.為什麼要用線性解碼器,而不用前面用過的棧式自編碼器等?即:線性解碼器的作用? 這一點,Ng已經在講解中說明了,因為線性解碼器不用要求輸入資料範圍一定為(0,1),而前面用過的棧式自編碼器等要求輸入資料範圍必須為(0,1)。因為a3的輸出值是f函式的輸出,而在普通的spa

實時翻譯的發動機矢量語義斯坦福大學課程解讀

處理 多個 abi rod 進一步 ews 有一種 deb rac

Keras TensorFlow教程如何從零開發一個複雜深度學習模型

Keras 是提供一些高可用的 Python API ,能幫助你快速的構建和訓練自己的深度學習模型,它的後端是 TensorFlow 或者 Theano 。本文假設你已經熟悉了 TensorFlow 和卷積神經網路,如果,你還沒有熟悉,那麼可以先看看這個10分鐘入門 TensorFlow 教程和卷積

斯坦福大學公開課機器學習advice for applying machine learning | learning curves 改進學習算法高偏差和高方差與學習曲線的關系

繪制 學習曲線 pos 情況 但我 容量 繼續 並且 inf 繪制學習曲線非常有用,比如你想檢查你的學習算法,運行是否正常。或者你希望改進算法的表現或效果。那麽學習曲線就是一種很好的工具。學習曲線可以判斷某一個學習算法,是偏差、方差問題,或是二者皆有。 為了繪制一條學習曲

《TensorFlow實戰Google深度學習框架》——5.4 模型持久化模型儲存、模型載入

目錄 1、持久化程式碼實現 2、載入儲存的TensorFlow模型 3、載入部分變數 4、載入變數時重新命名 1、持久化程式碼實現 TensorFlow提供了一個非常簡單的API來儲存和還原一個神經網路模型。這個API就是tf.train.Saver類。一下程式碼給出了儲

斯坦福大學深度學習筆記邏輯迴歸

z 邏輯迴歸(LOGISTIC REGRESSION)            Logistic regression (邏輯迴歸)是當前業界比較常用的機器學習方法,用於估計某種事物的可能性。之前在經典之作《數學之美》中也看到了它用於廣告預測,也就是根據某廣告被使用者點選的可