1. 程式人生 > >白化(Whitening): PCA 與 ZCA (轉)

白化(Whitening): PCA 與 ZCA (轉)

最簡 ldl 原因 log 都是 如何 矩陣 -1 數據集

本文討論白化(Whitening),以及白化與 PCA(Principal Component Analysis) 和 ZCA(Zero-phase Component Analysis) 的關系。

白化

什麽是白化?

維基百科給出的描述是:

技術分享

即對數據做白化處理必須滿足兩個條件:

  1. 使數據的不同維度去相關;

  2. 使數據每個維度的方差為1;

條件1要求數據的協方差矩陣是個對角陣;條件2要求數據的協方差矩陣是個單位矩陣。

為什麽使用白化?

教程給出的解釋是:

假設訓練數據是圖像,由於圖像中相鄰像素之間具有很強的相關性,所以用於訓練時輸入是冗余的。白化的目的就是降低輸入的冗余性。

比如在獨立成分分析(ICA)中,對數據做白化預處理可以去除各觀測信號之間的相關性,從而簡化了後續獨立分量的提取過程,而且,通常情況下,數據進行白化處理與不對數據進行白化處理相比,算法的收斂性較好。

PCA白化 與 ZCA白化

PCA 白化

我曾在 這篇 文章裏詳細介紹了 PCA 的原理。

給定訓練數據集(假設每個特征都具有零均值):

技術分享

n 是數據維度;m 是樣本個數。

數據的協方差矩陣為:

技術分享

對協方差矩陣做奇異值分解:

技術分享

U 是 Σ 的特征向量矩陣,S 是其特征值矩陣;因為 Σ 是對稱方陣,所以 V=U‘,Σ=USV。

PCA 白化的定義如下:

技術分享

其中,Xrotate 就是原數據在主成分軸上的投影,而 S^(-1/2) 相當於對每一個主軸上的數據做一個縮放,縮放因子就是除以對應特征值的平方根。

所以:

技術分享

上式第 2 步是把 XPCAwhite 表達式帶入得到的;第 3 步利用了矩陣 S 是對角陣的特性;第 4 步是將 Σ 作奇異值分解得到的;第 5 步利用了 U 是酉矩陣的性質(U‘U=UU‘=I)。

可見數據在經過 PCA 白化以後,其協方差矩陣是一個單位矩陣,即各維度變得不相關,且每個維度方差都是 1。

ZCA 白化

教程裏給 ZCA 白化的定義是:

技術分享

相當於將經過 PCA 白化後的數據重新變換回原來的空間。

所以:

技術分享

可見 ZCA 白化也是一個合法的白化。

PCA 白化 與 ZCA 白化

如何理解兩者之間的關系?

首先,PCA 白化將原數據變換(投影)到主成分軸上,這一步消除了特征之間的相關性;

其次,PCA 白化對每一個主成分軸上的數據進行縮放,使其方差為 1;

因為以上的線性變換是在主成分空間中完成的,為了使白化後的數據盡可能接近原數據,可以把處理過的數據再變換回原空間,也就是 ZCA 白化。

ZCA 白化的全稱是 Zero-phase Component Analysis Whitening。我對【零相位】的理解就是,相對於原來的空間(坐標系),白化後的數據並沒有發生旋轉(坐標變換)。

放一張來自網絡的圖片幫助讀者直觀理解:

技術分享

*圖片來自 這裏

正則化

在實踐中,PCA 與 ZCA 白化都需要被正則化(Regularization)。即在縮放這個步驟之前,給每一個特征值先加上一個正則化項:

技術分享

教程給出的原因有兩個:

  1. 有時一些特征值在數值上接近0,在縮放步驟時將導致除以一個接近0的值;這可能使數據上溢或造成數值不穩定;

  2. 對圖像來說,正則化項對輸入圖像也有一些平滑去噪(或低通濾波)的作用,可改善學習到的特征。

以 PCA 白化為例,經過正則化的數據協方差矩陣為:

技術分享

相當於減小了每個像素的不確定性(方差)。

關於低通濾波,可以這樣理解:

最簡單的低通濾波就是把一個像素的色值替換為其周圍像素色值的算術平均。可以想象,經過處理之後的圖像色彩變化更平緩,圖像變得更模糊。

為什麽要這樣做?首先,數字圖像總是伴隨著噪點。其次,噪點總是伴隨著色值的劇烈變化,因為每個噪點都是獨立產生的。但是原圖像的像素之間並不是獨立的,表現為多像素構成的“色塊”。

低通濾波器對“劇烈的"、"高頻的”變化更敏感,所以它對噪音的影響大於對原圖像的影響。經過低通濾波處理的圖像可以展示出原本被噪音掩蓋的細節。

這篇文章 對低通濾波的解釋很直觀。

課後練習

這次提交了 3 組代碼:

技術分享

pca_2d 和 pca_exercise 是教程的作業;pca_vs_zca 是我編寫的用來對二者作比較的代碼。

代碼不復雜,所以這裏直接給出 pca_vs_zca 的運行結果:

圖1:原始數據

技術分享

圖2:零均值化以後的數據

技術分享

圖3:PCA 白化所使用的基

技術分享

圖4:ZCA 白化所使用的基:

本例使用的圖片尺寸均為 12×12,數據具有 144 個維度,可以認為ZCA 白化的每一個基都處於其中一個維度(一個像素),即 ZCA 白化針對原數據每一個維度分別提取特征,而 PCA 白化是針對進行主成分變換後的數據的每一個維度提取特征,前者是高度局部化的,後者著眼於全局。

技術分享

圖5:PCA 白化後的數據

技術分享

圖6:ZCA 白化後的數據:

顯然 ZCA 白化相比 PCA 白化更接近原數據。

技術分享

白化(Whitening): PCA 與 ZCA (轉)