學習自感謝!
學習自感謝!
PCA是一種常用的數據分析方法。**PCA通過線性變換將原始數據變換爲一組各維度線性無關的表示,可用於提取數據的主要特徵分量,常用於高維數據的降維。**這樣做的好處是數據的主要信息還能保留下來,同時數據的維度降低了,並且變換後的維度兩兩不相關。
爲什麼需要PCA?
我們知道維數越大通常越難處理,在機器學習中,得到的數據維數通常都很高,處理起來比較麻煩,資源消耗很大,因此對數據進行降維處理是很必要的。
但是降維就意味着信息丟失嗎?多少是有一點的。但是總有一些情況,讓我們能夠在信息損失相對較少的同時完成降維。比如:
1.如果某兩個特徵之間存在關聯。舉個比較極端的的例子,一個正方形的邊長和它的面積,各屬於兩個特徵,但是知道了邊長面積肯定是確定的,那麼就可以直接丟掉一列(邊長或面積)。
2.如果某個維度存在並沒有什麼價值。這裏舉個比較經典的例子,就是電視轉播球賽,把現場的三維轉成平面的二維呈現在你眼前,減少了一維但是對於觀衆來說,並無太大影響。
3…
通過減少冗餘信息,降低了維度,讓數據處理更加容易,而有大部分有價值的信息都保留下來。而到底哪些信息是重要的?哪些可以刪去?在這裏需要注意,**降維並不是簡單的刪除某個維度,大部分情況下,降維的同時基也改變了。**那麼如何選擇新的基就是PCA需要解決的問題。
理論基礎
向量的表示及基變換
內積與投影
兩個維數相同的向量的內積被定義爲:
內積運算將兩個向量映射爲一個實數。下面我們來分析內積的幾何意義。
假設A和B是兩個n維向量,我們知道n維向量等價表示爲n維空間中的一條從原點發射的有向線段,假設A,B都是2維向量,,則在二維平面上A和B可以用兩條發自原點的有向線段表示。
現在我們從A點向B所在直線引一條垂線。我們知道垂線與B的交點叫做A在B上的投影,再設AB的夾角爲,則投影的矢量長度爲 .
到這裏我們還看不出內積這東西有什麼關係,不過我們將內積表示爲另一種我們熟悉的形式:
A與B的內積等於A到B的投影長度乘以B的模。再進一步,我們取B的模爲1,那麼有。
由此可以得出,**設向量B的模爲1,則A與B的內積等於A向B所在直線投影的矢量長度。**這就是內積的集合解釋。
基
上文說過,一個二維向量可以對應笛卡爾直角座標系除法的一個有向線段。例如,
在代數表示方面,我們經常用線段終點的點座標來表示向量,例如上圖可以表示爲(3,2)。但是僅僅一個(3,2)是無法精確的表示一個向量的。我們仔細看一下,這裏的3實際表示的是向量在x軸上的投影值是3,在y軸上的投影值是2。也就是說我們其實隱式引入了一個定義:以x軸和y軸上正方向長度爲1的向量爲標準。那麼一個向量(3,2)實際是說在x軸投影爲3而y軸的投影爲2。注意投影是一個矢量,所以可以爲負。
更正式的說,向量(x,y)實際上表示線性組合:此處(1,0),(0,1)就是二維空間中的基。
所以,要準確描述向量,首先是要確定一組基,然後給出在基所在的各個直線上的投影。
在笛卡爾直角座標系中,我們通常是默認選擇(1,0)和(0,1)的,實際上任何兩個線性無關的二維向量都可以作爲基,所謂的線性無關在二維平面上可以認爲是不共線的向量。
例如,(1,1)和(-1,1)也可以成爲一組基。一般來說我們希望基的模式1,因爲從內積的意義可以看到,如果基的模是1,那麼可以方便的用向量的點乘而直接獲得其在新基上的座標了!(前面說過當模爲1,點乘就代表向量A在向量B上的投影)實際上,對應任何一個向量我們總可以找到其同方向上模爲1的向量,只要讓兩個分量分別除以模就好了。例如,上面的基可以變爲
,和
現在,我們想獲得(3,2)在新基上的座標,即在兩個方向上的投影矢量值,那麼根據內積的幾何意義,我們只要分別計算(3,2)和兩個基的內積,不難得到新的座標爲。下圖給出了新的基以及(3,2)在新基上座標值的示意圖:
另外這裏要注意的是,我們列舉的例子中基是正交的(即內積爲0,或直觀說相互垂直),但可以成爲一組基的唯一要求就是線性無關,非正交的基也是可以的。不過因爲正交基有較好的性質,所以一般使用的基都是正交的。
基變換的矩陣表示
下面我們找一種簡便的方式來表示基變換。還是拿上面的例子,想一下,將(3,2)變換爲新基上的座標,就是用(3,2)與第一個基做內積運算,作爲第一個新的座標分量,然後用(3,2)與第二個基做內積運算,作爲第二個新座標的分量。實際上,我們可以用矩陣相乘的形式簡潔的表示這個變換:
其中矩陣的兩行分別爲兩個基,乘以原向量,其結果剛好爲新基的座標。可以稍微推廣一下,如果我們有m個二維向量,只要將二維向量按列排列成一個兩行m列矩陣,然後用基矩陣乘以這個矩陣,就得到了所有這些向量在新基下的值。例如(1,1),(2,2),(3,3),想變換到剛纔那組基上,則可以這樣表示:
一般的,如果我們有M個N維向量,想將其變換爲由R個N維向量表的新空間中,那麼首先將R個基按行組成矩陣A,然後將向量按列組成矩陣B,那麼兩矩陣相乘AB,就是變換結果。其中AB的第m列爲B中第m列經新基變換後的結果
**特別需要注意的是,這裏R可以小於N,而R決定了變換後數據的維數。**也就是說我們可以將N維的數據變換到更低維的空間中去,變換後的維度取決於我們使用的基的數量。因此這就矩陣相乘的也可以表示降維變換
最後,上述分析同時給矩陣相乘找到一個物理解釋:**兩個矩陣相乘的意義是將右邊矩陣的每一列列向量變換到左邊矩陣的每一個行向量爲基所表示的空間中去。**所以我們說一個矩陣可以表示一個線性變換。
協方差矩陣及優化目標
上面我們說過選擇不同的基可以對同樣的數據給出不同的表示,而且如果**基向量的個數小於數據的維數就達到了降維的效果。**那麼如何選擇纔是最優的?或者說我們有一組N維的向量,現在要將其降到K維,如何選擇K個基才能最大程度的保留信息?
這裏存在兩個說法:
1.最近重構性。樣本點到這個超平面的距離都足夠近
2.最大可分性。樣本點在這個超平面的投影儘可能的分開
下面我們以一個例子展開。假設我們的數據由五條記錄組成,將他們表示成矩陣,
其中每列爲一個數據記錄,而一行爲一個字段。我們首先將每個字段內所有值都減去字段均值(也就是行的均值),其結果就是每一維度的均值都變爲0(這樣是爲了求方差變得簡單,後面看到便會理解)。
我們看到上面數據,第一行均值爲2,第二行均值爲3,所以得到:
我們可以看下五條數據在平面直角座標系內的樣子:
現在問題來了:如果我們必須使用一維來表示這些數據,又希望儘量保留原始的信息,你要如何選擇?
通過上面的基變換的討論我們知道,這裏其實就是要在二維空間中選擇一個方向,然後將所有向量都投影到這個基上,我們就得到了降維後的數據。那麼如何選擇這個方向才能保留更多的保留原始信息呢?
以上圖爲例,可以看出如果向x軸投影,那麼最左邊的兩個點會重疊在一起,中間的兩個點也會重疊在一起,於是本身四個各不相同的二維點投影后只剩下兩個不同的值了,這是一種嚴重的信息丟失,同理,如果向y軸投影最上面的兩個點和分佈在x軸上的兩個點也會重疊。所以看來x和y軸都不是最好的投影選擇。我們直觀目測,如果向通過第一象限和第三象限的斜線投影,則五個點在投影后還是可以區分的。
下面,我們用數學方法表述這個問題。
方差
現在我們希望投影后投影值儘可能的分散,而這種分散程度可以用數學上的方差來表達。此處一個維度的方差可以看做是每個元素與字段均值的差的平方和的均值。即:
由於上面我們已經將每個字段的均值都化爲0了,因此方差可以直接用每個元素的平方和除以元素個數表示:
於是上面的問題被形式化表述爲:尋找一個一維基,使得所有數據變換爲這個基上的座標表示後,方差值最大。
協方差
對於上面二維降到一維我們找到一個使得方差最大的方向就可以了。考慮三維降爲二維的問題。與之前相同,首先我們希望找一個方向使得投影后的方差最大,但這隻完成了第一個方向的選擇,我們還要選擇第二個方向。如果我們還是單純的只選擇方差最大的方向,很明顯,這個方向與第一個方向“幾乎重疊”,這樣的維度是無用的,所以我們還需要增加其他約束條件。從直觀上說,讓兩個字段儘可能表示更多的原始信息,我們是不希望他們之間存在線性相關性的,因爲相關性意味着兩個字段不完全獨立,那麼肯定存在重複表示的信息。
數學上我們使用兩個字段的協方差表示其相關性,由於已經讓每個字段均值爲0,則:
可以看到,在字段均值爲0的情況下,兩個字段的內積可以簡單的表示爲內積除以元素數m。
當協方差爲0時,表示兩個字段完全獨立。爲了讓協方差爲0我們選擇第二個基時只能在與第一個基正交的方向上選擇,且方差較大。
綜上,我們降維問題的優化目標爲:將一組N維向量降爲K維(默認K<=N ),其目標是選擇K個單位正交基,使得原數據變換到正交基上後,各個字段相互之間的協方差爲0,且字段的方差儘可能大。(在正交約數下取K個最大的方差)
協方差矩陣
我們看到,最終要達到的目的與字段內方差及字段間協方差有密切關係。因此我們希望能將兩者統一表示,仔細觀察發現,兩者均可以表示爲內積的形式,而內積又與矩陣相乘密切相關。於是我們來了靈感:
假設我們只有a和b兩個字段,那麼我們將它們按行組成矩陣X:
然後我們用X乘以X的轉置,並乘上係數1/m:
這個矩陣對角線上的兩個元素分別是兩個字段的方差,而其它元素是a和b的協方差。兩者被統一到了一個矩陣的。
根據矩陣相乘的運算法則,這個結論很容易被推廣到一般情況:
設我們有m個n維的數據記錄,將其按列排成的矩陣X,設,則C是一個對稱矩陣。其對角線分別爲各個字段的方差,其餘的表示字段間的協方差。
協方差對角化
根據上面的討論我們發現,要達到上述的優化目標,等價於將協方差矩陣對角化.即除對角線外的其他元素化爲0,並且對角線上將元素按從大到小排列,然後取最大的K個就達到了我們的目的。
PS:關於爲什麼要將協方差矩陣對角化,稍後我會有更嚴謹的數學推導。這裏我們可以先分析下,前面我們說過要保證找K個單位正交基,同時要保證方差儘可能大。那麼我們對協方差矩陣就行對角化,使得只有對角線不爲0,其餘爲0。根據協方差矩陣的性質,對角線全部爲方差,其餘都爲協方差,此時將其對角化就可以得到每個字段全部正交,並按照從大到小排列就可得到方差最大的K個。
我們進一步看一下原矩陣與基變換後矩陣協方差矩陣的關係:
設原始數據矩陣X對應的協方差矩陣爲C,而P是一組基按行組成的矩陣。設$ Y = PX$,則Y爲X對P做基變換後的數據。設Y的協方差矩陣爲D,我們推導下D和C的關係:
所以這裏我們要找的P不是別的,而是能讓原始協方差矩陣對角化的P。換句話說優化目標變爲尋找一個矩陣P,滿足是一個對角矩陣,並且對角元素按照從大到小排列,那麼P的前K行就是要尋找的基,用p的前K行組成的矩陣乘以X就使得X從N維降到了K維並滿足上述的條件
現在所有問題都變成了協方差矩陣的對角化問題,由上文我們知道協方差矩陣是一個對稱矩陣,實對稱矩陣有一些性質:
1)實對稱矩陣不同特徵值對應的特徵向量必然正交。
2)設特徵向量λ重數爲r,則必然存在r個線性無關的特徵向量對應於λ,因此可以將這r個特徵向量單位正交化。
也就是說,實對稱矩陣一定可以找到n個單位正交向量,設這n個特徵向量爲,我們將其按列組成矩陣:
則對協方差矩陣C有如下結論:
其中爲對角矩陣,其對角元素爲各特徵向量對應的特徵值(可能有重複)。
到這裏,我們發現我們已經找到了需要的矩陣P:
P是協方差矩陣的特徵向量單位化後按行排列出的矩陣,其中每一行都是C的一個特徵向量。如果設P按照中特徵值的從大到小,將特徵向量從上到下排列,則用P的前K行組成的矩陣乘以原始數據矩陣X,就得到了我們需要的降維後的數據矩陣Y。
嚴謹的數學推導
不知道大家是否還記得我們上面所說的降維時超平面應該具備的兩個性質:
1.最近重構性。樣本點到這個超平面的距離都足夠近,最小投影距離。
2.最大可分性:樣本點在這個超平面上的投影儘可能的分開。
比較有意思的是無論是基於最近重構性還是最大可分性我們最後得到的是一個等價推導。
最近重構性
我們先看第一種推導,即樣本點到超平面的距離足夠近。
假設m個n維數據已經進行了中心化, .經過投影變換後的新座標系爲,其中w是標準正交基,即
若丟棄新座標系中的部分座標,將其降維n’維,則設新的座標系爲,樣本點在n’維座標系中的投影爲,其中是在低位座標系裏的第j維座標。
如果我們用來恢復原始數據,則可以得到恢復數據其中,W爲標準正交基組成的矩陣。
現在我們考慮整個樣本集,我們希望所有的樣本到這個超平面的距離足夠近,即最小化:
將這個式子整理得到:
其中第(1)步用到了,第(2)步用到了平方和展開,第(3)步用到了矩陣轉置公式和,第(4)步用到了,第(5)步就是合併同類項,第(6)步用到了和矩陣的跡,第(7)步將代數和表達爲矩陣形式。
要最小化上式,注意到就是我們上述說的協方差矩陣,給定數據它就是一個常數,W的每一個向量是標準正交基。所以等價於最小化
** 這個最小化比較簡單,這是個有等式約束條件的最小值,這裏可以採用拉格朗日乘子法**得到:
對W求導有$ -XX^TW+\lambda W=0$,整理得到:
通過上面可以看出,W爲的n’個特徵向量組成的矩陣.而爲的對應特徵值組成的矩陣,特徵值在主對角線,其餘爲0。
最大可分性
現在我們來看看基於最大投影方差的推導。
對於任意一個樣本,其在新的座標系中的投影爲,在新的座標系中樣本點的方差爲,要使所有的樣本的投影方差最大,也就是最大化的跡,即:
到這裏我們可以發現上式與基於最近重構性的推導是完全等價的了。
PCA算法流程
設有m條n維數據
(1)將原始數據排成n行m列矩陣X
(2)將X的每一行(代表一個維度)進行零均值化,即減去這一行的均值利於計算方差和協方差
(3)求出協方差矩陣
(4)求出協方差矩陣的特徵值及對應的特徵向量
(5)將特徵值按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣P
(6)即爲降維到k維後的數據
核化線性降維(KPCA)
線性降維方法假設從高維空間到低維空間的函數映射是線性的,然而在不少現實任務中可能需要非線性映射才能找到恰當的低維嵌入。
PCA是線性的,其對於非線性數據往往顯得無能爲力,而KPCA能夠挖掘到數據中蘊含的非線性信息。
核主成分分析是基於核技巧對線性降維方法進行“核化”。這裏就要用到核函數了,請看我的這片博客
KPCA的主要過程是:
1.首先將原始數據非線性映射到高維空間
2.再把第一步的數據從高維空間投影降維到需要的維數d’
可以看到KPCA只比PCA多了一步低維到高維的映射,降維的操作是一樣的。所以最終KPCA最終投影到高維空間的超平面也應滿足PCA中的最近重構性和最大可分性。
家丁我們將在高維特徵空間中把數據投影到由確定的超平面上,即PCA要求解:
其中是樣本點在高維特徵空間中的像,則
其中 假定是由原始屬性空間中的樣本點通過映射產生,即若能被顯示的表示出來則通過將樣本映射至高維空間,再在特徵空間中實施PCA即可。
上面(2)式變爲
一般情況下我們不清楚的具體樣子,因此引入核函數(其實核函數本質上就是簡化低維非線性可分映射到高維線性可分後的內積計算)。
將(4)、(5)式帶入(3)式化簡得:
其中爲對應的核矩陣,,顯然上式是一個特徵值分解問題,取K最大的d’個特徵值對應的矩陣向量即可.
對新樣本其投影后的第j(j = 1,2,…d’)維座標爲:
其中已經規範化,是的第j個分量。由(7)可以看出,KPCA需要對所有樣本求和,因此它的計算開銷較大。