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公式為:
參考資料: