Stanford UFLDL教程 主成分分析(PCA)
Stanford UFLDL教程 主成分分析
Contents?[hide]
|
引言
主成分分析(PCA)是一種能夠極大提升無監督特征學習速度的數據降維算法。更重要的是,理解PCA算法,對實現白化算法有很大的幫助,很多算法都先用白化算法作預處理步驟。
假設你使用圖像來訓練算法,因為圖像中相鄰的像素高度相關,輸入數據是有一定冗余的。具體來說,假如我們正在訓練的16x16灰度值圖像,記為一個256維向量??,其中特征值??對應每個像素的亮度值。由于相鄰像素間的相關性,PCA算法可以將輸入向量轉換為一個維數低很多的近似向量,而且誤差非常小。
實例和數學背景
在我們的實例中,使用的輸入數據集表示為??,維度??即??。假設我們想把數據從2維降到1維。(在實際應用中,我們也許需要把數據從256維降到50維;在這里使用低維數據,主要是為了更好地可視化算法的行為)。下圖是我們的數據集:
這些數據已經進行了預處理,使得每個特征??和??具有相同的均值(零)和方差。
為方便展示,根據??值的大小,我們將每個點分別涂上了三種顏色之一,但該顏色并不用于算法而僅用于圖解。
PCA算法將尋找一個低維空間來投影我們的數據。從下圖中可以看出,??是數據變化的主方向,而??是次方向。
也就是說,數據在??方向上的變化要比在??方向上大。為更形式化地找出方向??和??,我們首先計算出矩陣??,如下所示:
假設??的均值為零,那么??就是x的協方差矩陣。(符號??,讀"Sigma",是協方差矩陣的標準符號。雖然看起來與求和符號??比較像,但它們其實是兩個不同的概念。)
可以證明,數據變化的主方向??就是協方差矩陣??的主特征向量,而??是次特征向量。
注:如果你對如何得到這個結果的具體數學推導過程感興趣,可以參看CS229(機器學習)PCA部分的課件(鏈接在本頁底部)。但如果僅僅是想跟上本課,可以不必如此。
你可以通過標準的數值線性代數運算軟件求得特征向量(見實現說明).我們先計算出協方差矩陣的特征向量,按列排放,而組成矩陣:
此處,??是主特征向量(對應最大的特征值),??是次特征向量。以此類推,另記??為相應的特征值。
在本例中,向量??和??構成了一個新基,可以用來表示數據。令??為訓練樣本,那么??就是樣本點??在維度??上的投影的長度(幅值)。同樣的,??是??投影到??維度上的幅值。
旋轉數據
至此,我們可以把??用??基表達為:
(下標“rot”來源于單詞“rotation”,意指這是原數據經過旋轉(也可以說成映射)后得到的結果)
對數據集中的每個樣本??分別進行旋轉:??for every??,然后把變換后的數據??顯示在坐標圖上,可得:
這就是把訓練數據集旋轉到?,?基后的結果。一般而言,運算??表示旋轉到基?,, ...,?之上的訓練數據。矩陣??有正交性,即滿足?,所以若想將旋轉后的向量??還原為原始數據??,將其左乘矩陣即可:??, 驗算一下:?.
數據降維
數據的主方向就是旋轉數據的第一維??。因此,若想把這數據降到一維,可令:
更一般的,假如想把數據??降到??維表示??(令??),只需選取??的前??個成分,分別對應前??個數據變化的主方向。
PCA的另外一種解釋是:?是一個??維向量,其中前幾個成分可能比較大(例如,上例中大部分樣本第一個成分??的取值相對較大),而后面成分可能會比較小(例如,上例中大部分樣本的??較小)。
PCA算法做的其實就是丟棄??中后面(取值較小)的成分,就是將這些成分的值近似為零。具體的說,設??是??的近似表示,那么將??除了前??個成分外,其余全賦值為零,就得到:
在本例中,可得??的點圖如下(取??):
然而,由于上面??的后項均為零,沒必要把這些零項保留下來。所以,我們僅用前??個(非零)成分來定義??維向量??。
這也解釋了我們為什么會以??為基來表示數據:要決定保留哪些成分變得很簡單,只需取前??個成分即可。這時也可以說,我們“保留了前??個PCA(主)成分”。
還原近似數據
現在,我們得到了原始數據??的低維“壓縮”表征量??, 反過來,如果給定??,我們應如何還原原始數據??呢?查看以往章節以往章節可知,要轉換回來,只需??即可。進一步,我們把??看作將??的最后??個元素被置0所得的近似表示,因此如果給定??,可以通過在其末尾添加??個0來得到對??的近似,最后,左乘??便可近似還原出原數據??。具體來說,計算如下:
上面的等式基于先前對??的定義。在實現時,我們實際上并不先給??填0然后再左乘??,因為這意味著大量的乘0運算。我們可用??來與??的前??列相乘,即上式中最右項,來達到同樣的目的。將該算法應用于本例中的數據集,可得如下關于重構數據??的點圖:
由圖可見,我們得到的是對原始數據集的一維近似重構。
在訓練自動編碼器或其它無監督特征學習算法時,算法運行時間將依賴于輸入數據的維數。若用??取代??作為輸入數據,那么算法就可使用低維數據進行訓練,運行速度將顯著加快。對于很多數據集來說,低維表征量??是原數據集的極佳近似,因此在這些場合使用PCA是很合適的,它引入的近似誤差的很小,卻可顯著地提高你算法的運行速度。
選擇主成分個數
我們該如何選擇??,即保留多少個PCA主成分?在上面這個簡單的二維實驗中,保留第一個成分看起來是自然的選擇。對于高維數據來說,做這個決定就沒那么簡單:如果??過大,數據壓縮率不高,在極限情況??時,等于是在使用原始數據(只是旋轉投射到了不同的基);相反地,如果??過小,那數據的近似誤差太太。
決定??值時,我們通常會考慮不同??值可保留的方差百分比。具體來說,如果??,那么我們得到的是對數據的完美近似,也就是保留了100%的方差,即原始數據的所有變化都被保留下來;相反,如果??,那等于是使用零向量來逼近輸入數據,也就是只有0%的方差被保留下來。
一般而言,設??表示??的特征值(按由大到小順序排列),使得??為對應于特征向量??的特征值。那么如果我們保留前??個成分,則保留的方差百分比可計算為:
在上面簡單的二維實驗中,?,?。因此,如果保留??個主成分,等于我們保留了??,即91.3%的方差。
對保留方差的百分比進行更正式的定義已超出了本教程的范圍,但很容易證明,?。因此,如果??,則說明??也就基本上接近于0,所以用0來近似它并不會產生多大損失。這也解釋了為什么要保留前面的主成分(對應的??值較大)而不是末尾的那些。 這些前面的主成分?變化性更大,取值也更大,如果將其設為0勢必引入較大的近似誤差。
以處理圖像數據為例,一個慣常的經驗法則是選擇??以保留99%的方差,換句話說,我們選取滿足以下條件的最小??值:
對其它應用,如不介意引入稍大的誤差,有時也保留90-98%的方差范圍。若向他人介紹PCA算法詳情,告訴他們你選擇的??保留了95%的方差,比告訴他們你保留了前120個(或任意某個數字)主成分更好理解。
對圖像數據應用PCA算法
為使PCA算法能有效工作,通常我們希望所有的特征??都有相似的取值范圍(并且均值接近于0)。如果你曾在其它應用中使用過PCA算法,你可能知道有必要單獨對每個特征做預處理,即通過估算每個特征??的均值和方差,而后將其取值范圍規整化為零均值和單位方差。但是,對于大部分圖像類型,我們卻不需要進行這樣的預處理。假定我們將在自然圖像上訓練算法,此時特征??代表的是像素??的值。所謂“自然圖像”,不嚴格的說,是指人或動物在他們一生中所見的那種圖像。
注:通常我們選取含草木等內容的戶外場景圖片,然后從中隨機截取小圖像塊(如16x16像素)來訓練算法。在實踐中我們發現,大多數特征學習算法對訓練圖片的確切類型并不敏感,所以大多數用普通照相機拍攝的圖片,只要不是特別的模糊或帶有非常奇怪的人工痕跡,都可以使用。
在自然圖像上進行訓練時,對每一個像素單獨估計均值和方差意義不大,因為(理論上)圖像任一部分的統計性質都應該和其它部分相同,圖像的這種特性被稱作平穩性(stationarity)。
具體而言,為使PCA算法正常工作,我們通常需要滿足以下要求:(1)特征的均值大致為0;(2)不同特征的方差值彼此相似。對于自然圖片,即使不進行方差歸一化操作,條件(2)也自然滿足,故而我們不再進行任何方差歸一化操作(對音頻數據,如聲譜,或文本數據,如詞袋向量,我們通常也不進行方差歸一化)。實際上,PCA算法對輸入數據具有縮放不變性,無論輸入數據的值被如何放大(或縮小),返回的特征向量都不改變。更正式的說:如果將每個特征向量??都乘以某個正數(即所有特征量被放大或縮小相同的倍數),PCA的輸出特征向量都將不會發生變化。
既然我們不做方差歸一化,唯一還需進行的規整化操作就是均值規整化,其目的是保證所有特征的均值都在0附近。根據應用,在大多數情況下,我們并不關注所輸入圖像的整體明亮程度。比如在對象識別任務中,圖像的整體明亮程度并不會影響圖像中存在的是什么物體。更為正式地說,我們對圖像塊的平均亮度值不感興趣,所以可以減去這個值來進行均值規整化。
具體的步驟是,如果??代表16x16的圖像塊的亮度(灰度)值(??),可用如下算法來對每幅圖像進行零均值化操作:
, for all?
請注意:1)對每個輸入圖像塊??都要單獨執行上面兩個步驟,2)這里的??是指圖像塊??的平均亮度值。尤其需要注意的是,這和為每個像素??單獨估算均值是兩個完全不同的概念。
如果你處理的圖像并非自然圖像(比如,手寫文字,或者白背景正中擺放單獨物體),其他規整化操作就值得考慮了,而哪種做法最合適也取決于具體應用場合。但對自然圖像而言,對每幅圖像進行上述的零均值規整化,是默認而合理的處理。
參考文獻
http://cs229.stanford.edu
中英文對照
Principal Components Analysis 主成份分析
whitening 白化
intensity 亮度
mean 平均值
variance 方差
covariance matrix 協方差矩陣
basis 基
magnitude 幅值
stationarity 平穩性
normalization 歸一化
eigenvector 特征向量
eigenvalue 特征值
總結
以上是生活随笔為你收集整理的Stanford UFLDL教程 主成分分析(PCA)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Stanford UFLDL教程 反向传
- 下一篇: Stanford UFLDL教程 池化P