主成分分析與白化是在做深度學習訓練時最常見的兩種預處理的方法,主成分分析是一種我們用的很多的降維的一種手段,通過PCA降維,我們能夠有效的降低數據的維度,加快運算速度。而白化就是為了使得每個特征能有同樣的方差,降低相鄰像素的相關性。
主成分分析PCA
PCA算法可以將輸入向量轉換為一個維數低很多的近似向量。我們在這里首先用2D的數據進行試驗,其數據集可以在UFLDL網站的相應頁面http://ufldl.stanford.edu/wiki/index.php/Exercise:PCA_in_2D找到並下載。
第一步:首先我們需要獲取旋轉矩陣U,為了實現這一目的,我們使用MATLAB里面的SVD函數:
u = zeros(size(x, 1)); % You need to compute this [n,m]=size(x) sigma=(x*(x'))/m; [u,s,v]=svd(sigma);
我們把旋轉矩陣的向量,第一個向量和第二個向量顯示出來
可以看到,U的兩列分別代表着在數據集的各個方向,第一列是從左下到右上,第二列的是左上到右下的那一條。
xRot = zeros(size(x)); % You need to compute this xRot=u'*x;
第二步降維:第一列代表着整個數據的主方向,因此我們可以用第一列的轉置與x相乘來將數據映射到一維。對於這個一維的數據,在用第一列與之相乘,即可得到降維之后的結果。
xHat = zeros(size(x)); % You need to compute this xHat=(u(:,1:k))*(u(:,1:k)')*x;
白化
白話的左右