資料白化預先處理 隨機向量的“零均值化”和“空間解相關”是最常用的兩個預先處理過程,其中“零均值化”比較簡單,而“空間解相關”涉及一些矩陣的知識。 設有均值為零的隨機訊號向量 ,其 自相關矩陣為
很明顯, 是對稱矩陣,且是非負定的(所有特徵值都大於或等於0)。 現在,尋找一個線性變換 對 進行變換,即 ,使得
上式的含義是: y的各分量是不相關的,即 。通常將這個過程稱為“空間解相關”、“空間白化”或“球化”。 稱為空白間解相關矩陣(空間白化矩陣、球化矩陣)。 由 的性質可知,其存在特徵值分解:
是正交矩陣, 是對角矩陣,其對角元素是 特徵值。 令 \begin{equation}\label{eq:B}B=\Sigma^{-1/2} Q^T\end{equation} 則有
因此,通過矩陣 線性變換後, 的各個分量變得不相關了。 對於 來說,特徵值分解和奇異值分解是等價的,而奇異值分解的數值演算法位元征值分解的數值演算法具有更好的穩定性,因此一般都用奇異值分解來構造空間解相關矩陣 。 應該注意到, “空間解相關”不能保證各分量訊號之間的“獨立性”,但它能夠簡化盲分離演算法或改善分離演算法的效能。 註:以上來自戴老師《盲訊號處理》的課件。 最為熟知的例子是白色雜訊。元素 可以是一個時間序列在相繼時間點 的值,且在雜訊序列中沒有時間上得相關性。術語“白”來自於白色雜訊的能譜在所有頻率上是一個常數這一事實,就像含有各種顏色的白光譜一樣。 白化的本質就是去相關加縮放。 式\eqref{eq:B}的解相關矩陣 肯定不是唯一的白化矩陣。容易看到,任何矩陣 ( 為正交矩陣)也是白化矩陣。這是因為對 ,下式成立:
一個重要的例子是矩陣 。這也是一個白化矩陣,因為它是用正交矩陣 左乘式\eqref{eq:B}的 得到的。這個矩陣稱為 的逆均方根,並用 表示,因為它來自於均方根概念向矩陣的標準推廣。 註:以上來自《Independent Component Analysis》 關於 白化代碼的實現,其實很簡單,下面給一個 function [z_w varargout] = myWhiten(z) %-------------------------------------------------------------------------- % 文法:z_w = myWhiten(z); % [z_w T] = myWhiten(z); % 輸入:z是一個mxn的矩陣,包含m維隨機變數的各n個採樣點。 % 輸出:z_w是白化版本的z。T是mxm的白化變換矩陣。 %-------------------------------------------------------------------------- %% 計算樣本共變數 R = cov(z'); % 1表示除以N來計算共變數 %% 白化z [U D ~] = svd(R, 'econ'); % 用eig也行,[U, D] = eig(R); %% 下面求白化矩陣 T = U * inv (sqrt(D)) * U'; % 稱為共變數矩陣的逆均方根,inv計算不會太耗時間,因為D為對角陣。inv(sqrt(D))*U'也是一個可行白化矩陣 %% 乘以白化矩陣實現白化 z_w = T * z; if (nargout == 2) varargout{1} = T; end 另外可以直接利用 FastICA的白化函數whitenv,它要配合其提供的PCA函數pcamat.m完成白化,其提供的例子中有提示如下 % EXAMPLE % [E, D] = pcamat(vectors); % [nv, wm, dwm] = whitenv(vectors, E, D); 之前寫過關於FastICA工具箱的使用,再把使用 白化的例子給出來吧:
% 測試whitenv函數 clc clear close all % 載入matlab內建的資料 load cities stdr = std(ratings); sr = ratings./repmat(stdr,329,1); sr = sr'; figure boxplot(sr','orientation','horizontal','labels',categories) % 測試 firstEig = 1; lastEig = 9; s_interactive = 'off'; sr = remmean(sr); % 下面的pcamat和whitenv都沒有去均值,這裡先做取均值處理 [E, D] = pcamat(sr, firstEig, lastEig, s_interactive); [nv, wm, dwm] = whitenv(sr, E, D); figure boxplot(nv','orientation','horizontal','labels',categories)
結果如下
PCA: PCA的具有2個功能,一是維數約簡(可以加快演算法的訓練速度,減小記憶體消耗等),一是資料的可視化。 PCA並不是線性迴歸,因為線性迴歸是保證得到的函數是y值方面誤差最小,而PCA是保證得到的函數到所降的維度上的誤差最小。另外線性迴歸是通過x值來預測y值,而PCA中是將所有的x樣本都同等對待。 在使用PCA前需要對資料進行預先處理,首先是均值化,即對每個特徵維,都減掉該維的平均值,然後就是將不同維的資料範圍歸一化到同一範圍,方法一般都是除以最大值。但是比較奇怪的是,在對自然映像進行均值處理時並不是不是減去該維的平均值,而是減去這張圖片本身的平均值。因為PCA的預先處理是按照不同應用場合來定的。 自然映像指的是人眼經常看見的映像,其符合某些統計特徵。一般實際過程中,只要是拿正常相機拍的,沒有加入很多人工創作進去的圖片都可以叫做是自然圖片,因為很多演算法對這些圖片的輸入類型還是比較魯棒的。在對自然映像進行學習時,其實不需要太關注對映像做方差歸一化,因為自然映像每一部分的統計特徵都相似,只需做均值為0化就ok了。不過對其它的圖片進行訓練時,比如首先字識別等,就需要進行方差歸一化了。 PCA的計算過程主要是要求2個東西,一個是降維後的各個向量的方向,另一個是原先的樣本在新的方向上投影后的值。 首先需求出訓練樣本的共變數矩陣,如公式所示(輸入資料已經均值化過): 求出訓練樣本的共變數矩陣後,將其進行SVD分解,得出的U向量中的每一列就是這些資料樣本的新的方向向量了,排在前面的向量代表的是主方向,依次類推。用U’*X得到的就是降維後的樣本值z了,即: (其實這個z值的幾何意義是原先點到該方向上的距離值,但是這個距離有正負之分),這樣PCA的2個主要計算任務已經完成了。用U*z就可以將原先的資料樣本x給還原出來。 在使用有監督學習時,如果要採用PCA降維,那麼只需將訓練樣本的x值抽取出來,計算出主成分矩陣U以及降維後的值z,然後讓z和原先樣本的y值組合構成新的訓練樣本來訓練分類器。在測試過程中,同樣可以用原先的U來對新的測試樣本降維,然後輸入到訓練好的分類器中即可。
有一個觀點需要注意,那就是PCA並不能阻止過擬合現象。表明上看PCA是降維了,因為在同樣多的訓練樣本資料下,其特徵數變少了,應該是更不容易產生過擬合現象。但是在實際操作過程中,這個方法阻止過擬合現象效果很小,主要還是通過規則項來進行阻止過擬合的。 並不是所有ML演算法場合都需要使用PCA來降維,因為只有當原始的訓練樣本不能滿足我們所需要的情況下才使用,比如說模型的訓練速度,記憶體大小,希望可視化等。如果不需要考慮那些情況,則也不一定需要使用PCA演算法了。 Whitening: Whitening的目的是去掉資料之間的相關聯度,是很多演算法進行預先處理的步驟。比如說當訓練圖片資料時,由於圖片中相鄰像素值有一定的關聯,所以很多資訊是冗餘的。這時候去相關的操作就可以採用白化操作。資料的whitening必須滿足兩個條件:一是不同特徵間相關性最小,接近0;二是所有特徵的方差相等(不一定為1)。常見的白化操作有PCA whitening和ZCA whitening。 PCA whitening是指將資料x經過PCA降維為z後,可以看出z中每一維是獨立的,滿足whitening白化的第一個條件,這是只需要將z中的每一維都除以標準差就得到了每一維的方差為1,也就是說方差相等。公式為: ZCA whitening是指資料x先經過PCA變換為z,但是並不降維,因為這裡是把所有的成分都選進去了。這是也同樣滿足whtienning的第一個條件,特徵間相互獨立。然後同樣進行方差為1的操作,最後將得到的矩陣左乘一個特徵向量矩陣U即可。 ZCA whitening公式為