本文將介紹主成分分析(Principal Component Analysis,PCA)原理,並且它如何在分類問題中發揮降維的作用。譯自
簡介
本文將介紹主成分分析(Principal Component Analysis,PCA)原理,並且它如何在分類問題中發揮降維的作用。
在前面我們講到過維度災難,分類器容易對高維的訓練集產生過擬合。那么,哪些特征是更好的呢,而哪些又該從高維中除去呢
如果所有的特征向量間相互獨立,我們可以很容易的去除區分度很小的特征向量,區分度小的向量可通過特征選擇相關方法識別。然而,在實際中,很多向量彼此依賴或依賴潛在的未知變量。一個單一的特征可以用一個值來代表很多信息的集合。移除這樣的特征將移除比所需要的更多的信息。在下一節,我們將介紹作為特征提取的解決此問題的PCA方法,並從兩個不同的角度介紹它的內在工作原理。
PCA:一種去相關方法
屢見不鮮的是,特征都是相關的。例如,我們想要使用圖像中每個像素的紅色,綠色和藍色分量來進行圖像分類(例如偵測貓和狗),對紅光最敏感的圖像傳感器也捕獲一些藍光和綠光。 類似地,對藍光和綠光最敏感的傳感器也對紅光表現出一定程度的敏感度。 結果,像素的R,G,B分量在統計上是相關的。因此,簡單地從特征向量中消除R分量,也隱含地除去關於G和B信道的信息。換句話說,在消除特征之前,我們想要轉換完整的特征空間,從而得到底層的不相關分量。
下圖是一個二維特征空間的例子:
圖一
圖中的特征x和y明顯是相關的。事實上,它們的協方差矩陣是:
在前面的文章中,我們討論了協方差矩陣的幾何解釋。 我們看到,協方差矩陣可以分解為在白色的不相關數據上一系列旋轉和縮放操作,其中旋轉矩陣由該協方差矩陣的特征向量定義。 因此,直觀地看到,通過旋轉每個數據點,上圖所示的數據D可以被解相關,使得特征向量V成為新的參考軸:
圖2
經旋轉縮放的數據的協方差矩陣現在是對角線的,這意味着新的軸是不相關的:
事實上,上上圖中的原始數據是通過兩個1維高斯特征向量x1 ~ N(0,1),x2 ~ N(0,1)的線性組合生成的:
因為特征x和y是x1和x2的一些未知的潛在成分的線性組合,直接去除x或y的任意一個,都將丟失來自x1和x2的一些信息。而將數據協方差的特征向量進行旋轉,會使我們直接恢復這兩個獨立的成分x1和x2(達到比例因子)。這可以被看作如下:原始數據的協方差矩陣的特征向量是(每列代表一個特征向量):
首先要注意的是,在這種情況下,V是一個旋轉矩陣,對應於45度旋轉(cos(45)= 0.7071),從圖1中確實可以看出。其次,將V視為在新的坐標系中線性變換矩陣結果 ,每個新的特征x'和y'被表示為原始特征x和y的線性組合:
換句話說,特征空間的去相關對應於數據的未知不相關組件x_1和y_1的恢復(如果變換矩陣不是正交的,則恢復到未知縮放因子)。 一旦這些組件被恢復,通過簡單地消除x_1或x_2就很容易降低特征空間的維度。
在上面的例子中,我們從一個二維問題開始。 如果我們想要降低維數,問題依然是消除x_1(從而x')還是y_1(從而y')。 盡管這種選擇可能取決於許多因素,例如在分類問題的情況下數據的可分性,但PCA只是假設最有意思的特征是具有最大差異或差異的特征。 這個假設是基於信息理論的觀點,因為具有最大方差的維度對應於具有最大熵的維度,因此編碼最多的信息。 最小的特征向量通常會簡單地表示噪聲分量,而最大的特征向量通常對應於定義數據的主要分量。
然后簡單地通過將數據投影到其協方差矩陣的最大特征向量上來實現通過PCA的降維。 對於上面的例子,所得到的一維特征空間如圖3所示:
圖3
顯然,上面的例子很容易推廣到更高維的特征空間。 例如,在三維情況下,我們可以將數據投影到由兩個最大特征向量所定義的平面上以獲得二維特征空間,或者我們可以將其投影到最大特征向量上以獲得一維特征空間。 如圖4所示:
圖4
一般來說,PCA允許我們獲得原始N維數據的線性M維子空間,其中M <= N。此外,如果未知的不相關分量是高斯分布的,則PCA實際上作為獨立分量分析,因為不相關的高斯變量在統計上是獨立的。 但是,如果底層組件不是正態分布的,PCA僅僅產生不相關的去相關變量。 在這種情況下,非線性降維算法可能是更好的選擇。
PCA:一種正交回歸方法
在上面的討論中,我們從獲得獨立分量(或者如果數據不是正態分布的話至少是不相關分量)開始,以減小特征空間的維數。我們發現這些所謂的“主成分”是通過我們的數據的協方差矩陣的特征分解得到的。然后通過將數據投影到最大的特征向量來降低維數。
現在讓我們暫時忘記我們希望找到不相關的組件。相反,我們現在嘗試通過找到原始特征空間的線性子空間來減少維數,在這個子空間上我們可以投影數據,從而使投影誤差最小化。在2D情況下,這意味着我們試圖找到一個向量,以便將數據投影到該向量上,這相當於投影誤差低於將數據投影到任何其他可能向量時所獲得的投影誤差。問題是如何找到這個最佳的向量。
考慮圖5所示的例子。顯示三個不同的投影向量,以及所得到的一維數據。在下面的段落中,我們將討論如何確定哪個投影向量最小化了投影誤差。在尋找一個最小化投影誤差的向量之前,我們必須定義這個誤差函數。
圖5
一個眾所周知的方法來擬合2D數據是最小二乘回歸。 給定自變量x和因變量y,最小二乘回歸函數對應於f(x)= ax + b,使得殘差平方和的總和為:sum_{i=0}^N (f(x_i) - y_i)^2被最小化。 換句話說,如果將x看作自變量,那么得到的回歸函數f(x)是一個線性函數,可以預測因變量y,使得平方誤差最小。 所得到的模型f(x)由圖5中的藍線表示,並且最小化的誤差如圖6所示。
圖6
然而,在特征提取的背景下,人們可能會想知道為什么我們將特征x定義為獨立變量,特征y是因變量。 事實上,我們可以很容易地將y定義為自變量,並且找到預測因變量x的線性函數f(y),使得 sum_ {i = 0} ^ N(f(y_i)-x_i)^ 2是最小化。 這對應於水平投影誤差的最小化並導致不同的線性模型,如圖7所示:
圖7
顯然,獨立變量和因變量的選擇改變了所得到的模型,使得普通最小二乘回歸成為非對稱回歸。 其原因是最小二乘回歸假設自變量是無噪聲的,而因變量則被認為是有噪聲的。 然而,在分類的情況下,所有的特征通常是噪音的觀察,使得x或y都不應該被視為獨立的。 事實上,我們想獲得一個模型f(x,y),同時最小化水平和垂直投影誤差。 這對應於找到一個模型,使正交投影誤差最小化,如圖8所示。
圖8
由此產生的回歸被稱為總體最小二乘回歸或正交回歸,並假設這兩個變量都是不完美的觀察。 現在有一個有趣的現象是所獲得的表示使正交投影誤差最小化的投影方向的矢量對應於數據的最大主成分:
圖9
換句話說,如果我們想通過將原始數據投影到一個向量上來減少維數,使得投影誤差在所有方向上的平方最小化,我們可以簡單地將數據投影到最大的特征向量上。 這正是我們在上一節中稱為主成分分析的地方,我們在這里展示了這樣的投影也使特征空間去相關。
一個實際的PCA應用程序:特征臉
盡管為了可視化的目的,上述示例僅限於二維或三維,但是與訓練樣本的數量相比,特征的數量不可忽略時,降維通常變得重要。作為示例,假設我們想要基於標記的面部圖像的訓練數據集來執行面部識別,即確定圖像中描繪的人的身份。一種方法可能是將圖像的每個像素的亮度視為特征。如果輸入圖像的大小為32×32像素,則這意味着特征矢量包含1024個特征值。然后可以通過計算這個1024維矢量與我們訓練數據集中的人的特征矢量之間的歐幾里德距離來對新的人臉圖像進行分類。最小的距離告訴我們我們正在看哪個人。
然而,如果我們只有幾百個訓練樣本,則在1024維空間中操作會變得有問題。此外,歐幾里德距離在高維空間中表現得很奇怪,正如前面的文章中所討論的那樣。因此,通過計算1024維特征向量的協方差矩陣的特征向量,然后將每個特征向量投影到最大的特征向量上,可以使用PCA來降低特征空間的維數。
由於二維數據的特征向量是二維的,三維數據的特征向量是三維的,所以1024維數據的特征向量是1024維的。換句話說,為了可視化的目的,我們可以將每個1024維的特征向量重塑為32×32的圖像。圖10顯示了通過劍橋人臉數據集的特征分解得到的前四個特征向量:
圖10
現在可以將每個1024維特征向量(以及每個面)投影到N個最大的特征向量上,並且可以表示為這些特征面的線性組合。這些線性組合的權重決定了人的身份。由於最大的特征向量表示數據中最大的方差,這些特征向量描述了信息最豐富的圖像區域(眼睛,噪音,嘴巴等)。通過僅考慮前N個(例如N = 70)特征向量,特征空間的維度大大降低。
剩下的問題是現在應該使用多少個本征面,或者在一般情況下;應該保留多少個特征向量。去除太多的特征向量可能會從特征空間中刪除重要的信息,而消除特征向量的太少則會給我們帶來維度的災難。遺憾的是,這個問題沒有直接的答案。盡管可以使用交叉驗證技術來獲得對這個超參數的估計,但是選擇最優維數仍然是一個問題,這個問題主要是在經驗(一個學術術語,這意味着不僅僅是“試錯”)方式。請注意,在消除特征向量的同時檢查保留原始數據的方差有多少(作為百分比)通常是有用的。這是通過將保留的特征值之和除以所有特征值之和來完成的。
PCA實現的具體步驟
基於前面的部分,我們現在可以列出用於應用PCA進行特征提取的簡單配方:
1)中心化數據
在前面的文章中,我們表明,協方差矩陣可以寫成一系列線性運算(縮放和旋轉)。特征分解提取這些變換矩陣:特征向量表示旋轉矩陣,而特征值表示比例因子。然而,協方差矩陣並不包含任何有關數據轉換的信息。事實上,為了表示轉換,需要仿射變換而不是線性變換。
因此,在應用PCA旋轉數據以獲得不相關的軸之前,需要通過從每個數據點中減去數據的平均值來抵消任何現有的偏移。這簡單地對應於使數據居中以使其平均值變為零。
2)標准化數據
協方差矩陣的特征向量指向數據最大方差的方向。但是,方差是一個絕對數字,而不是相對數字。這意味着以厘米(或英寸)為單位測量的數據差異將遠大於以米(或英尺)為單位測量的相同數據的差異。考慮一個例子,其中一個特征代表以米為單位的對象的長度,而第二個特征代表以厘米為單位的對象的寬度。如果數據沒有被標准化,那么最大的方差以及最大的特征向量將由第一特征隱含地定義。
為了避免PCA的這種與尺度相關的性質,通過將每個特征除以其標准偏差來規范化數據是有用的。如果不同的功能對應不同的指標,這一點尤其重要。
3)計算特征分解
由於數據將被投影到最大的特征向量上以降低維數,因此需要獲得特征分解。奇異值分解(Singular Value Decomposition,SVD)是有效計算特征分解最常用的方法之一。
4)投影數據
為了降低維度,數據被簡單地投影到最大的特征向量上。設V是列中包含最大特征向量的矩陣,設D是包含不同觀測值的原始數據。那么投影數據D'可以用D'= V^(T) * D來獲得。我們可以直接選擇剩余維數,即V的列數,或者我們可以定義消除特征向量時需要保留的原始數據。如果只保留N個特征向量,並且e_1 ... e_N表示相應的特征值,則投影原始d維數據之后剩余的方差量可以被計算為:
PCA的陷阱
在上面的討論中,已經有了一些假設。 在第一節中,我們討論了PCA如何去相關數據。 實際上,我們開始討論時表達了我們希望恢復所觀察到的特征的未知的,潛在的獨立組成部分。 然后我們假設我們的數據是正態分布的,這樣統計獨立性就相當於沒有線性相關性。 事實上,PCA允許我們解相關數據,從而在高斯情況下恢復獨立分量。 但是,重要的是要注意,去相關只對應於高斯情況下的統計獨立性。 考慮通過采樣半個周期y = sin(x)獲得的數據:
圖11
雖然上述數據顯然是不相關的(平均來說,當x值上升時,y值增加的幅度與其降低一樣多),因此對應於對角線協方差矩陣,但是兩個變量之間仍然存在明顯的非線性相關性。
一般來說,PCA只是不相關的數據,但不會消除統計依賴性。如果底層的組件被認為是非高斯的,像ICA這樣的技術可能會更有趣。另一方面,如果明確存在非線性,則可以使用諸如非線性PCA的降維技術。但是,請記住,這些方法容易過度擬合,因為要根據相同數量的訓練數據來估計更多的參數。
本文所做的第二個假設是,最有區別的信息是通過特征空間中最大的方差來捕獲的。由於最大變化的方向編碼最多的信息,這很可能是真實的。然而,有些情況下,鑒別信息實際上存在於方差最小的方向上,使得PCA可能極大地損害分類性能。作為一個例子,考慮圖12的兩種情況,其中我們將二維特征空間減少為一維表示:
圖12
如果最大的判別性信息包含在較小的特征向量中,那么應用PCA可能實際上惡化了維度災難,因為現在需要更復雜的分類模型(例如非線性分類器)來分類較低維度的問題。 在這種情況下,其他降維方法可能是有意義的,例如線性判別分析(LDA),它試圖找到最佳分離兩個類別的投影向量。
下面的代碼片斷顯示了如何在Matlab中執行維度約簡的主成分分析:Matlab source code
小結
在本文中,我們從兩個不同的角度討論了PCA的特征提取和降維的優點。 第一個觀點解釋了PCA如何使我們去掉特征空間,而第二個觀點則表明PCA實際上對應於正交回歸。
此外,我們簡要介紹了特征臉是一個眾所周知的基於PCA的特征提取的例子,我們介紹了主成分分析的一些最重要的缺點。