本文將介紹主成分分析(Principal Component Analysis,PCA)原理,而且它如何在分類問題中發揮降維的做用。譯自html
Feature extraction using PCA。算法
本文將介紹主成分分析(Principal Component Analysis,PCA)原理,而且它如何在分類問題中發揮降維的做用。函數
在前面咱們講到過維度災難,分類器容易對高維的訓練集產生過擬合。那麼,哪些特徵是更好的呢,而哪些又該從高維中除去呢性能
若是全部的特徵向量間相互獨立,咱們能夠很容易的去除區分度很小的特徵向量,區分度小的向量可經過特徵選擇相關方法識別。然而,在實際中,不少向量彼此依賴或依賴潛在的未知變量。一個單一的特徵能夠用一個值來表明不少信息的集合。移除這樣的特徵將移除比所須要的更多的信息。在下一節,咱們將介紹做爲特徵提取的解決此問題的PCA方法,並從兩個不一樣的角度介紹它的內在工做原理。編碼
家常便飯的是,特徵都是相關的。例如,咱們想要使用圖像中每一個像素的紅色,綠色和藍色份量來進行圖像分類(例如偵測貓和狗),對紅光最敏感的圖像傳感器也捕獲一些藍光和綠光。 相似地,對藍光和綠光最敏感的傳感器也對紅光表現出必定程度的敏感度。 結果,像素的R,G,B份量在統計上是相關的。所以,簡單地從特徵向量中消除R份量,也隱含地除去關於G和B信道的信息。換句話說,在消除特徵以前,咱們想要轉換完整的特徵空間,從而獲得底層的不相關份量。3d
下圖是一個二維特徵空間的例子:code
圖一component
圖中的特徵x和y明顯是相關的。事實上,它們的協方差矩陣是:htm
在前面的文章中,咱們討論了協方差矩陣的幾何解釋。 咱們看到,協方差矩陣能夠分解爲在白色的不相關數據上一系列旋轉和縮放操做,其中旋轉矩陣由該協方差矩陣的特徵向量定義。 所以,直觀地看到,經過旋轉每一個數據點,上圖所示的數據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僅僅產生不相關的去相關變量。 在這種狀況下,非線性降維算法多是更好的選擇。
在上面的討論中,咱們從得到獨立份量(或者若是數據不是正態分佈的話至少是不相關份量)開始,以減少特徵空間的維數。咱們發現這些所謂的「主成分」是經過咱們的數據的協方差矩陣的特徵分解獲得的。而後經過將數據投影到最大的特徵向量來下降維數。
如今讓咱們暫時忘記咱們但願找到不相關的組件。相反,咱們如今嘗試經過找到原始特徵空間的線性子空間來減小維數,在這個子空間上咱們能夠投影數據,從而使投影偏差最小化。在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
換句話說,若是咱們想經過將原始數據投影到一個向量上來減小維數,使得投影偏差在全部方向上的平方最小化,咱們能夠簡單地將數據投影到最大的特徵向量上。 這正是咱們在上一節中稱爲主成分分析的地方,咱們在這裏展現了這樣的投影也使特徵空間去相關。
儘管爲了可視化的目的,上述示例僅限於二維或三維,可是與訓練樣本的數量相比,特徵的數量不可忽略時,降維一般變得重要。做爲示例,假設咱們想要基於標記的面部圖像的訓練數據集來執行面部識別,即肯定圖像中描繪的人的身份。一種方法多是將圖像的每一個像素的亮度視爲特徵。若是輸入圖像的大小爲32×32像素,則這意味着特徵矢量包含1024個特徵值。而後能夠經過計算這個1024維矢量與咱們訓練數據集中的人的特徵矢量之間的歐幾里德距離來對新的人臉圖像進行分類。最小的距離告訴咱們咱們正在看哪一個人。
然而,若是咱們只有幾百個訓練樣本,則在1024維空間中操做會變得有問題。此外,歐幾里德距離在高維空間中表現得很奇怪,正如前面的文章中所討論的那樣。所以,經過計算1024維特徵向量的協方差矩陣的特徵向量,而後將每一個特徵向量投影到最大的特徵向量上,可使用PCA來下降特徵空間的維數。
因爲二維數據的特徵向量是二維的,三維數據的特徵向量是三維的,因此1024維數據的特徵向量是1024維的。換句話說,爲了可視化的目的,咱們能夠將每一個1024維的特徵向量重塑爲32×32的圖像。圖10顯示了經過劍橋人臉數據集的特徵分解獲得的前四個特徵向量:
圖10
如今能夠將每一個1024維特徵向量(以及每一個面)投影到N個最大的特徵向量上,而且能夠表示爲這些特徵面的線性組合。這些線性組合的權重決定了人的身份。因爲最大的特徵向量表示數據中最大的方差,這些特徵向量描述了信息最豐富的圖像區域(眼睛,噪音,嘴巴等)。經過僅考慮前N個(例如N = 70)特徵向量,特徵空間的維度大大下降。
剩下的問題是如今應該使用多少個本徵面,或者在通常狀況下;應該保留多少個特徵向量。去除太多的特徵向量可能會從特徵空間中刪除重要的信息,而消除特徵向量的太少則會給咱們帶來維度的災難。遺憾的是,這個問題沒有直接的答案。儘管可使用交叉驗證技術來得到對這個超參數的估計,可是選擇最優維數仍然是一個問題,這個問題主要是在經驗(一個學術術語,這意味着不只僅是「試錯」)方式。請注意,在消除特徵向量的同時檢查保留原始數據的方差有多少(做爲百分比)一般是有用的。這是經過將保留的特徵值之和除以全部特徵值之和來完成的。
基於前面的部分,咱們如今能夠列出用於應用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容許咱們解相關數據,從而在高斯狀況下恢復獨立份量。 可是,重要的是要注意,去相關只對應於高斯狀況下的統計獨立性。 考慮經過採樣半個週期y = sin(x)得到的數據:
圖11
雖然上述數據顯然是不相關的(平均來講,當x值上升時,y值增長的幅度與其下降同樣多),所以對應於對角線協方差矩陣,可是兩個變量之間仍然存在明顯的非線性相關性。
通常來講,PCA只是不相關的數據,但不會消除統計依賴性。若是底層的組件被認爲是非高斯的,像ICA這樣的技術可能會更有趣。另外一方面,若是明確存在非線性,則可使用諸如非線性PCA的降維技術。可是,請記住,這些方法容易過分擬合,由於要根據相同數量的訓練數據來估計更多的參數。
本文所作的第二個假設是,最有區別的信息是經過特徵空間中最大的方差來捕獲的。因爲最大變化的方向編碼最多的信息,這極可能是真實的。然而,有些狀況下,鑑別信息實際上存在於方差最小的方向上,使得PCA可能極大地損害分類性能。做爲一個例子,考慮圖12的兩種狀況,其中咱們將二維特徵空間減小爲一維表示:
圖12
若是最大的判別性信息包含在較小的特徵向量中,那麼應用PCA可能實際上惡化了維度災難,由於如今須要更復雜的分類模型(例如非線性分類器)來分類較低維度的問題。 在這種狀況下,其餘降維方法多是有意義的,例如線性判別分析(LDA),它試圖找到最佳分離兩個類別的投影向量。
下面的代碼片段顯示瞭如何在Matlab中執行維度約簡的主成分分析:Matlab source code
在本文中,咱們從兩個不一樣的角度討論了PCA的特徵提取和降維的優勢。 第一個觀點解釋了PCA如何使咱們去掉特徵空間,而第二個觀點則代表PCA實際上對應於正交回歸。
此外,咱們簡要介紹了特徵臉是一個衆所周知的基於PCA的特徵提取的例子,咱們介紹了主成分分析的一些最重要的缺點。