白化(預處理步驟)【轉】
介紹
我們已經了解了如何使用PCA降低數據維度。在一些算法中還需要一個與之相關的預處理步驟,這個預處理過程稱為白化。舉例來說,假設訓練數據是圖像,由於圖像中相鄰像素之間具有很強的相關性,所以用於訓練時輸入是冗余的。白化的目的就是降低輸入的冗余性;更正式的說,我們希望通過白化過程使得學習算法的輸入具有如下性質:(i)特征之間相關性較低;(ii)所有特征具有相同的方差。
2D的例子
下面我們先用前文的2D例子描述白化的主要思想,然后分別介紹如何將白化與平滑和PCA相結合。
如何消除特征之間的相關性?在前文計算時實際上已經消除了輸入特征
之間的相關性。得到的新特征
的分布如下圖所示:
這個數據的協方差矩陣如下:
(注:嚴格地講,這部分許多關於“協方差”的陳述僅當數據均值為0時成立。下文的論述都隱式地假定這一條件成立,不過即使數據均值不為0,下文的說法仍然成立,所以你無需擔心這個。)
協方差矩陣對角元素的值為
和
絕非偶然。並且非對角元素值為0; 因此,
和
是不相關的, 滿足我們對白化結果的第一個要求 (特征間相關性降低)。
為了使每個輸入特征具有單位方差,我們可以直接使用作為縮放因子來縮放每個特征
。具體地,我們定義白化后的數據
如下:
繪制出 ,我們得到:
這些數據現在的協方差矩陣為單位矩陣I。我們說, 是數據經過PCA白化后的版本:
中不同的特征之間不相關並且具有單位方差。
白化與降維相結合:如果你想要得到經過白化后的數據,並且比初始輸入維數更低,可以僅保留 中前
個成分。當我們把PCA和正則化結合起來時(在稍后討論),
中最后的少量成分將總是接近於0,因而舍棄這些成分不會帶來很大的問題。
ZCA白化
最后要說明的是,是數據的協方差矩陣變為單位矩陣I的方式並不唯一。具體地,如果R是任意正交矩陣,即滿足(說它正交不太嚴格,R可以是旋轉或反射矩陣),那么
仍然具有單位協方差。在ZCA白化中,令
。我們定義ZCA白化的結果為:
繪制,得到:
可以證明,對所有可能的R,這種旋轉式的盡可能地接近原始輸入數據x。當使用ZCA白化時(不同於PCA白化),我們通常保留數據的全部n個維度,不嘗試去降低它的維數。
正則化
實踐中需要實現PCA白化或ZCA白化時,有時一些特征值在數值上接近於0,這樣在縮放步驟時我們除以
將導致除以一個接近0的值;這可能會導致數據上溢(賦為最大值)或造成數值不穩定。因而在實踐中,我們使用少量的正則化實現這個縮放過程,即在取平方根和倒數之前給特征值加上一個很小的常數
:
當 在區間
上時, 一般取值為
。
對圖像來說,這里加上,對輸入圖像也有一些平滑(或低通濾波)的作用。這樣處理還能消除在圖像的像素信息獲取過程中產生的噪聲,改善學習到的特征。
ZCA白化是一種數據預處理方法,它將數據從 映射到
。
事實證明這也是一種生物眼睛(視網膜)處理圖像的粗糙模型。具體而言,當你的眼睛感知圖像時,由於一幅圖像中相鄰的部分在亮度上十分相關,大多數臨近的“像素”在眼中被感知為相近的值。因此,如果人眼需要分別傳輸每個像素值(通過視覺神經)到大腦中,會非常不划算。取而代之的是,視網膜進行一個與ZCA中相似的去相關操作(這是由視網膜上的ON-型和OFF-型光感受器細胞將光信號轉變為神經信號完成的)。由此得到對輸入圖像的更低冗余的表示,並將它傳輸到大腦。