主成分分析法(PCA)原理漫谈
在研究OpenCV人臉識別算法時,了解到其中OpenCV特征臉法Eigenfaces是基于主成分分析法(principal component analysis,簡稱PCA),后來再了解到PCA不僅僅是在人臉識別算法中廣泛使用,在其他需要數據降維時也大有用武之地。因此有必要對其原理做一次較為深入的研究。
1.小孩的成績
小學的時候,課程很少,主要是語文和數學兩門課,某一次期末考試后,小明他爸看了班級成績單,如下表,他爸爸一眼就能看出來自己的兒子成績最好
| 學生姓名 | 語文 | 數學 |
| 小明 | 85 | 93 |
| 小紅 | 70 | 92 |
| 小亮 | 60 | 93 |
而能夠一眼看出來是因為語文拉開了大家的分數。因為數學拉不開成績,基本可以忽略,只需要關注語文成績。到了高中時候,課程從2門課增加到7門課,某一次期末考試,小明他爸再一次看班級成績單,如下:
| 學生姓名 | 語文 | 數學 | 幾何 | 英語 | 化學 | 物理 | 生物 |
| 小明 | 88 | 66 | 55 | 66 | 84 | 82 | 76 |
| 小紅 | 67 | 77 | 60 | 65 | 69 | 60 | 78 |
| 小亮 | 79 | 80 | 69 | 56 | 69 | 69 | 58 |
這個時候小明他爸很難一眼看出來自己的兒子成績是不是班級第一,他只能用算平均成績再進行排名。
小明他爸在評估自己兒子排名時,不論是小學時候的成績還是高中時候的成績,他都用了一個降維的思想,例如小學時候,忽略數學成績,只看語文成績,這是由2個指標降到1個指標,降維的過程帶來了一點信息丟失,例如數學成績雖然拉不開距離,但還是有微小的浮動,只不過這個微小的浮動對大局沒有任何影響。高中成績同理,由1個平均成績代替7門課,降維的過程更暴力,同時也帶來了更嚴重的信息的丟失,例如小明的幾何是不及格的,但在平均成績里沒有體現。當時小明他爸正要獎勵小明時,班主任打電話過來提醒要多補補幾何課程,小明不僅僅獎勵沒了,還挨了一頓臭罵。
這個例子好像只提到降維,主成分呢?主成分可以理解為主要矛盾,小明他爸的主要矛盾是小明在班級里的排名,小學時候,用語文成績即可知道小明的排名,語文成績就是主成分,高中時候用平均成績知道排名,那么平均成績就是主成分。
主成分分析法實際上是將數據降維,進而篩選出主成分用于分析問題。最理想的降維過程是既實現降維,選出主成分,又能夠盡量保留原信息。
?
2.數據降維
上面例子是關于降維的簡單例子,例子里提到了降維的動機,并描述了降維的樸素思想,但這個例子尚不能提供具有操作方法。例如,我們知道平均成績會把學生的個性信息丟失,那么我們怎么衡量信息丟失呢?如果不用平均成績,我們應該怎么做才好?
為了量化的回答這些問題,必須依靠數學。
我們再看一個例子。
假設直角坐標系上有A,B和C三個點,坐標為A點(2,2),B點(2,1),C點(-2,1)。這些點在由x軸和y軸構成的二維平面上。現在嘗試這幾個點降維,使用1維信息來體現他們的位置。首先嘗試用這些點投影到x軸,即直接用x分量體現A,B,C三個點的位置信息,三個點投影到x軸上時,我們會發現A點和B點是重合了,這表示降維后A和B的相對位置的信息丟失了,如果我們把點投影到y軸上,同樣存在B點和C點重合的問題。
圖1 A,B和C三個坐標直接投影到坐標軸降維的效果都不太好,但二維平面那么多直線,不一定非得投影到坐標軸,我們再另外畫一條直線,如下圖所示,A,B,C三個點在其上投影得到A',B',C'三個點,這個時候,三個點位置不重合,一定程度上反映了原先A,B,C三個點的位置信息。現在的問題是,如果按照這個思路,我們可以畫出無數條直線,那一條才是我們所需要的?要回答這個問題,先復習一下線性代數的知識
圖2 A,B,C投影到藍線上?
3.向量內積
為什么要提及向量內積?因為向量內積和投影。
我們來看向量內積是什么,向量內積是對這兩個向量對應位一一相乘之后求和的操作,如下所示,對于向量a和向量b:
a和b的內積公式為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
從這個公式看,看不出和投影的關系,但向量內積還有幾何意義,我們來看下向量內積的幾何意義,也許能發現一些東西。
如圖所示,a和b為兩個向量,兩個向量的夾角為θ,現在從向量b的末端點引一條和向量a相交的垂線,我們知道垂線和B的交點叫做a在b上的投影,投影長度長度為|b|cos(θ),其中|b|是向量b的模,也即b線段的標量長度。
標題?
這個公式有啥用途?這其實是向量內積另一種形式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?a?b=|a||b|cos(θ)
這個公式的推導過程如下:
首先看一下向量組成:
定義向量c=a-b
根據三角形余弦定理(這里a、b、c均為向量,下同)有:
根據關系c=a-b有:
因此:
a?b=|a||b|cos?(θ)
這個公式表示a與b的內積等于b到a的投影長度乘以a的模。再進一步,假設a的模為1,即讓|a|=1,那么公式變成:
a?b=|b|cos(θ),也就是說,假設向量b的模為1,則a與b的內積值等于b向a所在直線投影的矢量長度。這也就是向量內積的幾何意義,知道了這個意義,我們再回頭看看圖1直角坐標里的向量。例如向量A,向量A在x軸的投影其實就是向量A和沿著x軸的單位向量(因為單位向量模為1)的內積,同理在y軸的投影是向量A和沿著y軸的單位向量內積,換句話說,直角坐標系下的向量(x,y)實際上是由沿著x軸和沿著y軸單位向量的內積構成的,用內積公式表示為,其中和分別表示沿著x軸的單位向量和沿著y軸的單位向量。除了向量A,向量B和向量C都可以以這個形式表示,區別只是x和y值不同,換句話說,直角坐標系下的任何向量,都是由這兩個單位向量線性組合構成,因此這兩個向量被稱為一組基底(bias)。
對于基的定義,百度百科的解釋是:在線性代數中,基(也稱為基底)是描述、刻畫向量空間的基本工具。向量空間的基是它的一個特殊的子集,基的元素稱為基向量。向量空間中任意一個元素,都可以唯一地表示成基向量的線性組合。這個解釋看起來較為抽象,對此稍微再做更通俗的解釋。
假設沒有直角坐標,對于向量A,我們除了知道這是個向量外,沒有更多信息。如果想向其他人說明這向量,只能指著向量A說,你看,這是一個向量。這個向量的長度是多少,方向是什么?如果沒有一個基準,我們根本無從回答。為了確定向量信息,我們需要給出一個基準,對于向量A,我們可以選擇在直角坐標確定其信息,例如描述向量A是可以通過“從原點開始,沿著x軸方向走2步,再沿著y軸方向走2步”來指定向量A的位置。
x軸和y軸上的單位向量只是二維空間中的一組基底,其實還有其他無數的基底,就像蘋果這個東西,中文稱之為“蘋果”,英文稱之為“Apple”,阿拉伯語又是另一個單詞,東西一樣,發音不一樣。
當然也不是任何一組向量都可以稱之為基底,一組向量需要滿足兩個條件才能稱為基底,第一個是任何向量都可以表示為基底的線性組合,第二個是這種表示方法是唯一的。這兩個條件其實可以合二為一,那就是構成基底的向量是線性無關的。所謂的線性無關就是構成基底中的任何向量都不能由其他基底中的其他向量線性組合構成。
例如三基色,三種基色(紅,黃,藍)是相互獨立的,任何一種基色都不能有其它兩種顏色合成,這三種顏色就是色彩空間的基底。
構成基底的這兩個條件不算苛刻,因此一個向量空間內存在許多基底,也就是說,一個向量可以由許多不同的基底來描述,問題來了,向量如何在不同的基底之間轉換。
繼續看圖1種向量B在直角坐標系中坐標是(2,1)。現在我們用另外一個基底來描述它,我們選擇向量(1,1)T和(-1,1)作為基底,這兩組向量穿過原點并和x軸和y軸形成45°角,可以理解成將直角坐標逆時針旋轉45度。我們而令其模為1,只要讓兩個分量分別除以模就好了。這樣上面的基可以變為,。向量B在這個基底上的坐標其實就是由向量B分別在這組向量上的投影構成。既然是投影,那可以直接用向量內積公式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
于是我們得到了向量B在新基底下的坐標
上述過程實際上可以用矩陣相乘的形式簡潔的表示這個變換:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
其中矩陣的兩行分別為兩個基向量,乘以原向量,其結果剛好為新基底下的坐標。
?
這個公式可以推廣到更一般的情況,如果我們有M個N維向量,想將其變換為由R個N維向量表示的新空間中,那么首先將R個基按行組成矩陣A,然后將向量按列組成矩陣B,那么兩矩陣的乘積AB就是變換結果,其中AB的第m列為A中第m列變換后的結果。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
其中是一個行向量,表示第i個基,是一個列向量,表示第j個原始數據記錄。R決定了變換后數據的維數,假如R小于N,那么將一個N維數據變換到更低維度的空間中去。這就是降維變換過程。向量B的例子還是在同一個空間中,因此轉換之后還是2維,如果向一維的空間中,即直線上投影,那就是降維。
4.優化目標
我們知道了轉換基的方法,也知道了降維的方法,又回到圖2中例子,向量B要降維到直線上,那那一條直線才是最好的,或者說如何選擇基才是最優的。所謂最優,就是降維過程中,又盡可能保留原有信息。我們看到,圖2中三個向量投影到坐標軸存在點重合的問題,投影到藍線上點倒是沒有重合,基于這個問題,我們希望投影后的投影值盡可能分散。而點的分散程度,在數學上是有方差來描述的。方差用于衡量一組數據時離散程度。一組數據的方差可以看做是每個數據與均值的差的平方和的均值,即:
如果數據經過中心化處理,即原數據減去改組數據的平均值,該組數據的均值變為0,那么數據的方差可以直接用每個數據的平方和除以元素個數表示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
有了方差這個度量方式后,于是上面的降維問題被形式化表述為:尋找一個一維基,使得所有數據變換為這個基上的坐標表示后,方差值最大。但是,方差只適用于一維的情況,也就是衡量一個維度內部數據的分散情況,例如3維xyz坐標降為2維xy坐標,x軸和y軸上的點分別用方差衡量分散情況,但是x軸和y軸之間的關系無法用方差衡量。
我們降維的目標是降維后盡可能保留更多的原始信息,我們希望降維后在每個維度上的數據越分散越好,那各個維度之間的關系應該怎么衡量比較合適?用相關性,如果各個維度之間有相關性,表示不是完全獨立,那就存在重復的信息,正好數學上有協方差來衡量相關性。協方差可以通俗理解為兩個變量變化過程是同向變化還是反向變化,例如變量A變大,變量B也跟著變大,那么他們的關系就是正相關性,協方差為正,意味著A追隨B或者B追隨A,如果變量A變大,變量B就變小,反過來也一樣,那他們是負相關性,協方差為負,意味著A和B總是對著干,如果變量A變大或變小,對B完全沒有影響,反過來也成立,那么他們就沒有什么相關性,協方差為0,意味著A和B完全獨立,相互屏蔽朋友圈,老死不相往來。理解了協方差,那么我們降維優化目標之二是令各個維度之間相關性為0,即協方差為0.為了讓協方差為0,我們選擇第二個基底時只能在與第一個基正交的方向上選擇。因此最終選擇的兩個方向一定是正交的。
協方差公式如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
其中,和表示a和b的均值,如果a和b是已經過中心化處理后的數據(又一次提到中心化,關于中心化,見附錄說明),則和為0,協方差公式變為更簡潔的形式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
如果變量a和變量b相同,即Cov(a,a),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
這個公式看起來很熟悉,沒錯,就是上文提到的方差公式,同一個變量的協方差等于其方差。需要注意的是,協方差也只能處理二維問題,對于維數大于2的情況,需要計算多個兩兩之間的協方差,例如對于3維度情況,要計算Cov(a,b),Cov(a,c),Cov(b,c),對于多維度的情況,我們使用矩陣來組織他們之間的協方差,協方差矩陣的定義如下:
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
其中,分別表示第i和第j個維度的變量,例如有三維度{a,b,c},協方差矩陣如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
對于協方差矩陣,我們注意到,矩陣對角線上是方差,其他位置元素是協方差。再回想一下我們的降維優化目標:將一組N維向量降為K維(0<K<N),目標是選擇K個單位(模為1)正交基,優化目標是原始數據變換到這組基上后,新基底下數據的各維度兩兩之間協方差為0,而維度內方差則盡可能大。而協方差矩陣正好把方差和協方差整合到一起了,因此優化目標變成令協方差矩陣對角線上的方差盡可能大,而非對角線元素為0.
?
?
5.優化方法
我們已經把優化目標整合到了一個協方差矩陣,潛意識里已經告訴我們,接下來就是對矩陣進行各種線性代數運行來求解,實際上正是這樣。
先來看3維的情況,3維數據的協方差矩陣代入方差和協方差公式如下:
? ? ? ? ? ? ? ??
協方差轉換成這個形式之后,非對角元素是向量內積的結構(),我們知道原數據矩陣如下
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
原數據的轉置矩陣如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
原數據矩陣和原數據轉置矩陣內積結果如下,
?? ? ? ? ? ? ? ? ? ? ? ? ??
結果再乘以就是協方差矩陣啊,設我們有m個n維數據,將其按列排成nm的矩陣X,則構成的協方差矩陣。有了這個關系,我們繼續往下走。設原數據對于的協方差矩陣為,是新基組成的矩陣,是原數據在新基底下的值。我們降維的目標是令X在新基底下的值的協方差矩陣對角線上的方差最大,非對角線上的協方差為0.那新基底下的值的協方差矩陣和原數據協方差矩陣是否有什么關系?
我們剛剛簡單推導了矩陣和其協方差矩陣的公式,現在直接套用一下,新基底下的值的協方差矩陣如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
根據第二節向量內積提到了新基矩陣和原數據的內積正好是新基底下的值,描述這個關系的公式是:,把這個公式代入到新基底下數據的協方差矩陣:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
現在優化目標變成是尋找一個矩陣P,使得對角化,并且對角元素按從大到小依次排列,那么P的前K行就是要尋找的基,用P的前K行組成的矩陣乘以X就使得X從N維降到了K維并滿足上述優化條件。
問題變成矩陣對角化問題。
而是實對稱矩陣,線性代數有定理,對此矩陣必有正交矩陣P,使得,其中是以的n個特征值為對角元素的對角矩陣。
接下來的問題就是求的特征值和特征向量,具體解法參閱線性代數相關書籍。
6.總結
1)數據降維是將高維度的數據保留下最重要的一些特征,去除噪聲和不重要的特征,從而實現提升數據處理速度的目的;
2)降維的目標在減少需要分析的指標同時,盡量減少原指標包含信息的損失;
3)數據的分散程度使用方差衡量,數據之間的相關程度使用協方差衡量,降維優化目標是方差最大,而協方差為0;
4)數據的協方差矩陣整合了方差和協方差;
4)數據矩陣和數據轉置矩陣可構成原數據的協方差矩陣;
5)降維優化實際上是線性代數中的協方差矩陣對角化;
5)數據處理之前,先進行去中心化,即每一位特征減去各自的平均值;
6)計算協方差矩陣?
7)用特征值分解方法求協方差矩陣?的特征值與特征向量;
8)對特征值從大到小排序,選擇其中最大的k個。然后將其對應的k個特征向量分別作為行向量組成特征向量矩陣P;
9)將數據轉換到k個特征向量構建的新空間中,即Y=PX。
?
附錄1.數據中心化
數據的中心化是指原數據減去數據的平均值,經過中心化處理后,原數據的坐標平移至中心點(0,0),該組數據的均值變為0。
簡單舉例:譬如某公司員工共5人,5人的工資,分別為5000、6000、5500、3000、4000元,這5個數據作為一個獨立的數據集,平均值為4700元,每個人的工資依次減去平均工資4700,得到300、1300、800、-1700、-700,新的5個數據其平均值等于0,這個過程就是數據的中心化。
附錄2.特征值和特征向量
對m階方陣A,若存在數λ,及非零向量(列向量)x,使得Ax?= λx,則稱λ為A的特征值,x為A的屬于特征值λ的特征向量。
??特征向量不唯一
??特征向量非零
特征向量的幾何意義是使得方陣A在同方向或者反方向上伸縮 λ倍。
?
參考
1.http://blog.codinglabs.org/articles/pca-tutorial.html
2.https://www.imooc.com/article/36272
3.https://blog.csdn.net/zhongkelee/article/details/44064401
4.http://web.xidian.edu.cn/qlhuang/files/20150705_224250.pdf
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的主成分分析法(PCA)原理漫谈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLServer 游标简介与使用说明[
- 下一篇: Schnorr身份识别方案