白化(Whitening) PCA白化 ZCA白化

白化是一種重要的預處理過程,其目的就是降低輸入數據的冗餘性,使得經過白化處理的輸入數據具有如下性質:(i)特徵之間相關性較低;(ii)所有特徵具有相同的方差

 

白化處理分PCA白化和ZCA白化,PCA白化保證數據各維度的方差爲1,而ZCA白化保證數據各維度的方差相同。PCA白化可以用於降維也可以去相關性,而ZCA白化主要用於去相關性,且儘量使白化後的數據接近原始輸入數據。


1. PCA白化

 根據白化的兩個要求,我們首先是降低特徵之間的相關性。在PCA中,我們選取前K大的特徵值的特徵向量作爲投影方向,如果K的大小爲數據的維度n,把這K個特徵向量組成選擇矩陣U(每一列爲一個特徵向量),爲旋轉後的數據。如果K<n,就是PCA降維,如果K=n,則降低特徵間相關性降低。


                                  原始數據                                               PCA旋轉

上圖顯示了原始數據和經過PCA旋轉之後的數據,可以發現數據之間的相對位置都沒有改變,僅僅改變了數據的基,但這種方法就降低了數據之後的相關性。(原始數據的相關性爲正,因爲x1增加時,x2也增加;而處理之後的數據的相關性明顯降低)

 

第二個要求是每個輸入特徵具有單位方差,以直接使用作爲縮放因子來縮放每個特徵,計算公式,經過PCA白化處理的數據分佈如下圖所示,此時的協方差矩陣爲單位矩陣I。

 

                                           PCA白化                                     ZCA白化

2. ZCA白化

ZCA白化的定義爲:

         

ZCA白化只是在PCA白化的基礎上做了一個旋轉操作,使得白化之後的數據更加的接近原始數據。

ZCA白化首先通過PCA去除了各個特徵之間的相關性,然後是輸入特徵具有單位方差,此時得到PCA白化後的處理結果,然後再把數據旋轉回去,得到ZCA白化的處理結果,感覺這個過程讓數據的特徵之間有具有的一定的相關性,下面實驗進行驗證。

 

在實驗中,我分別計算了原始數據,旋轉後數據,PCA白化以及ZCA白化的協方差矩陣,數據用的是UFLDL的實驗數據,是個協方差矩陣分別爲:

 

從上面的4個協方差矩陣可以發現,正如上面所述,旋轉之後降低了特徵之間的相關性,rotate協方差矩陣的主對角線以爲的值都接近零。我猜測ZCA白化後的數據的相關性會比PCA白化的要強,在該實驗室中表明好像我的感覺是對的,ZCA白化後主對角線以外的值的絕對值大於PCA白化後(今天看了下發現這個有問題),雖然這種比較可以忽略不計,應該他們的值都是非常的接近的。


3. PCA白化和ZCA白化的區別

PCA白化ZCA白化都降低了特徵之間相關性較低,同時使得所有特徵具有相同的方差。

1.   PCA白化需要保證數據各維度的方差爲1,ZCA白化只需保證方差相等。

2.   PCA白化可進行降維也可以去相關性,而ZCA白化主要用於去相關性另外。

3.   ZCA白化相比於PCA白化使得處理後的數據更加的接近原始數據。


4. 正則化

實踐中需要實現PCA白化或ZCA白化時,有時一些特徵值在數值上接近於0,這樣在縮放步驟時我們除以將導致除以一個接近0的值,這可能使數據上溢 (賦爲大數值)或造成數值不穩定。因而在實踐中,我們使用少量的正則化實現這個縮放過程,即在取平方根和倒數之前給特徵值加上一個很小的常數 :

當x在區間 [-1,1] 上時, 一般取值爲


5. 參考:

UFLDL   Tutorial 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章