PCA降維-最大,最小方差解釋


轉自http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html

http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020216.html

幾個特別有用 的鏈接:

更加深入理解pca,在斯坦福大學的機器學習上的更加深入的分析。。

http://blog.csdn.net/ybdesire/article/details/64546435

http://blog.csdn.net/ybdesire/article/details/60885562

1. 問題

     真實的訓練數據總是存在各種各樣的問題:

1、 比如拿到一個汽車的樣本,里面既有以“千米/每小時”度量的最大速度特征,也有“英里/小時”的最大速度特征,顯然這兩個特征有一個多余。

2、 拿到一個數學系的本科生期末考試成績單,里面有三列,一列是對數學的興趣程度,一列是復習時間,還有一列是考試成績。我們知道要學好數學,需要有濃厚的興趣,所以第二項與第一項強相關,第三項和第二項也是強相關。那是不是可以合並第一項和第二項呢?

3、 拿到一個樣本,特征非常多,而樣例特別少,這樣用回歸去直接擬合非常困難,容易過度擬合。比如北京的房價:假設房子的特征是(大小、位置、朝向、是否學區房、建造年代、是否二手、層數、所在層數),搞了這么多特征,結果只有不到十個房子的樣例。要擬合房子特征->房價的這么多特征,就會造成過度擬合。

4、 這個與第二個有點類似,假設在IR中我們建立的文檔-詞項矩陣中,有兩個詞項為“learn”和“study”,在傳統的向量空間模型中,認為兩者獨立。然而從語義的角度來講,兩者是相似的,而且兩者出現頻率也類似,是不是可以合成為一個特征呢?

5、 在信號傳輸過程中,由於信道不是理想的,信道另一端收到的信號會有噪音擾動,那么怎么濾去這些噪音呢?

     回顧我們之前介紹的《模型選擇和規則化》,里面談到的特征選擇的問題。但在那篇中要剔除的特征主要是和類標簽無關的特征。比如“學生的名字”就和他的“成績”無關,使用的是互信息的方法。

     而這里的特征很多是和類標簽有關的,但里面存在噪聲或者冗余。在這種情況下,需要一種特征降維的方法來減少特征數,減少噪音和冗余,減少過度擬合的可能性。

     下面探討一種稱作主成分分析(PCA)的方法來解決部分上述問題。PCA的思想是將n維特征映射到k維上(k<n),這k維是全新的正交特征。這k維特征稱為主元,是重新構造出來的k維特征,而不是簡單地從n維特征中去除其余n-k維特征。

2. PCA計算過程

     首先介紹PCA的計算過程:

     假設我們得到的2維數據如下:

     clip_image001[4]

     行代表了樣例,列代表特征,這里有10個樣例,每個樣例兩個特征。可以這樣認為,有10篇文檔,x是10篇文檔中“learn”出現的TF-IDF,y是10篇文檔中“study”出現的TF-IDF。也可以認為有10輛汽車,x是千米/小時的速度,y是英里/小時的速度,等等。

     第一步分別求x和y的平均值,然后對於所有的樣例,都減去對應的均值。這里x的均值是1.81,y的均值是1.91,那么一個樣例減去均值后即為(0.69,0.49),得到

     clip_image002[4]

     第二步,求特征協方差矩陣,如果數據是3維,那么協方差矩陣是

     clip_image003[4]

     這里只有x和y,求解得

     clip_image004[4]

     對角線上分別是x和y的方差,非對角線上是協方差。協方差大於0表示x和y若有一個增,另一個也增;小於0表示一個增,一個減;協方差為0時,兩者獨立。協方差絕對值越大,兩者對彼此的影響越大,反之越小。

     第三步,求協方差的特征值和特征向量,得到

     clip_image005[4]

     上面是兩個特征值,下面是對應的特征向量,特征值0.0490833989對應特征向量為clip_image007[4],這里的特征向量都歸一化為單位向量。

    第四步,將特征值按照從大到小的順序排序,選擇其中最大的k個,然后將其對應的k個特征向量分別作為列向量組成特征向量矩陣。

     這里特征值只有兩個,我們選擇其中最大的那個,這里是1.28402771,對應的特征向量是clip_image009[6]

     第五步,將樣本點投影到選取的特征向量上。假設樣例數為m,特征數為n,減去均值后的樣本矩陣為DataAdjust(m*n),協方差矩陣是n*n,選取的k個特征向量組成的矩陣為EigenVectors(n*k)。那么投影后的數據FinalData為

     clip_image011[4]

     這里是

     FinalData(10*1) = DataAdjust(10*2矩陣)×特征向量clip_image009[7]

     得到結果是

     clip_image012[4]

     這樣,就將原始樣例的n維特征變成了k維,這k維就是原始特征在k維上的投影。

     上面的數據可以認為是learn和study特征融合為一個新的特征叫做LS特征,該特征基本上代表了這兩個特征。

     上述過程有個圖描述:

     clip_image013[4]

     正號表示預處理后的樣本點,斜着的兩條線就分別是正交的特征向量(由於協方差矩陣是對稱的,因此其特征向量正交),最后一步的矩陣乘法就是將原始樣本點分別往特征向量對應的軸上做投影。

     如果取的k=2,那么結果是

     clip_image014[4]

     這就是經過PCA處理后的樣本數據,水平軸(上面舉例為LS特征)基本上可以代表全部樣本點。整個過程看起來就像將坐標系做了旋轉,當然二維可以圖形化表示,高維就不行了。上面的如果k=1,那么只會留下這里的水平軸,軸上是所有點在該軸的投影。

     這樣PCA的過程基本結束。在第一步減均值之后,其實應該還有一步對特征做方差歸一化。比如一個特征是汽車速度(0到100),一個是汽車的座位數(2到6),顯然第二個的方差比第一個小。因此,如果樣本特征中存在這種情況,那么在第一步之后,求每個特征的標准差clip_image016[6],然后對每個樣例在該特征下的數據除以clip_image016[7]

 

     歸納一下,使用我們之前熟悉的表示方法,在求協方差之前的步驟是:

     clip_image017[4]

     其中clip_image019[6]是樣例,共m個,每個樣例n個特征,也就是說clip_image019[7]是n維向量。clip_image021[4]是第i個樣例的第j個特征。clip_image023[4]是樣例均值。clip_image025[4]是第j個特征的標准差。

     整個PCA過程貌似及其簡單,就是求協方差的特征值和特征向量,然后做數據轉換。但是有沒有覺得很神奇,為什么求協方差的特征向量就是最理想的k維向量?其背后隱藏的意義是什么?整個PCA的意義是什么?

3. PCA理論基礎

     要解釋為什么協方差矩陣的特征向量就是k維理想特征,我看到的有三個理論:分別是最大方差理論、最小錯誤理論和坐標軸相關度理論。這里簡單探討前兩種,最后一種在討論PCA意義時簡單概述。

3.1 最大方差理論

     在信號處理中認為信號具有較大的方差,噪聲有較小的方差,信噪比就是信號與噪聲的方差比,越大越好。如前面的圖,樣本在橫軸上的投影方差較大,在縱軸上的投影方差較小,那么認為縱軸上的投影是由噪聲引起的。

因此我們認為,最好的k維特征是將n維樣本點轉換為k維后,每一維上的樣本方差都很大。

     比如下圖有5個樣本點:(已經做過預處理,均值為0,特征方差歸一)

     clip_image026[4]

     下面將樣本投影到某一維上,這里用一條過原點的直線表示(前處理的過程實質是將原點移到樣本點的中心點)。

     clip_image028[4]

     假設我們選擇兩條不同的直線做投影,那么左右兩條中哪個好呢?根據我們之前的方差最大化理論,左邊的好,因為投影后的樣本點之間方差最大。

     這里先解釋一下投影的概念:

     QQ截圖未命名

     紅色點表示樣例clip_image037[14],藍色點表示clip_image037[15]在u上的投影,u是直線的斜率也是直線的方向向量,而且是單位向量。藍色點是clip_image037[16]在u上的投影點,離原點的距離是clip_image039[4](即clip_image030[4]或者clip_image041[4])由於這些樣本點(樣例)的每一維特征均值都為0,因此投影到u上的樣本點(只有一個到原點的距離值)的均值仍然是0。

     回到上面左右圖中的左圖,我們要求的是最佳的u,使得投影后的樣本點方差最大。

     由於投影后均值為0,因此方差為:

     clip_image042[4]

     中間那部分很熟悉啊,不就是樣本特征的協方差矩陣么(clip_image037[17]的均值為0,一般協方差矩陣都除以m-1,這里用m)。

     用clip_image044[10]來表示clip_image046[4]clip_image048[6]表示clip_image050[4],那么上式寫作

     clip_image052[4] 

     由於u是單位向量,即clip_image054[4],上式兩邊都左乘u得,clip_image056[4]

     即clip_image058[4]

     We got it!clip_image044[11]就是clip_image048[7]的特征值,u是特征向量。最佳的投影直線是特征值clip_image044[12]最大時對應的特征向量,其次是clip_image044[13]第二大對應的特征向量,依次類推。

     因此,我們只需要對協方差矩陣進行特征值分解,得到的前k大特征值對應的特征向量就是最佳的k維新特征,而且這k維新特征是正交的。得到前k個u以后,樣例clip_image037[18]通過以下變換可以得到新的樣本。

     clip_image059[4]

     其中的第j維就是clip_image037[19]clip_image061[4]上的投影。

     通過選取最大的k個u,使得方差較小的特征(如噪聲)被丟棄。

     這是其中一種對PCA的解釋,第二種是錯誤最小化,放在接下來介紹

3.2 最小平方誤差理論

     clip_image001

     假設有這樣的二維樣本點(紅色點),回顧我們前面探討的是求一條直線,使得樣本點投影到直線上的點的方差最大。本質是求直線,那么度量直線求的好不好,不僅僅只有方差最大化的方法。再回想我們最開始學習的線性回歸等,目的也是求一個線性函數使得直線能夠最佳擬合樣本點,那么我們能不能認為最佳的直線就是回歸后的直線呢?回歸時我們的最小二乘法度量的是樣本點到直線的坐標軸距離。比如這個問題中,特征是x,類標簽是y。回歸時最小二乘法度量的是距離d。如果使用回歸方法來度量最佳直線,那么就是直接在原始樣本上做回歸了,跟特征選擇就沒什么關系了。

     因此,我們打算選用另外一種評價直線好壞的方法,使用點到直線的距離d’來度量。

     現在有n個樣本點clip_image003,每個樣本點為m維(這節內容中使用的符號與上面的不太一致,需要重新理解符號的意義)。將樣本點clip_image005在直線上的投影記為clip_image007,那么我們就是要最小化

     clip_image009

     這個公式稱作最小平方誤差(Least Squared Error)。

     而確定一條直線,一般只需要確定一個點,並且確定方向即可。

     第一步確定點:

     假設要在空間中找一點clip_image011來代表這n個樣本點,“代表”這個詞不是量化的,因此要量化的話,我們就是要找一個m維的點clip_image011[1],使得

     clip_image012

     最小。其中clip_image014是平方錯誤評價函數(squared-error criterion function),假設m為n個樣本點的均值:

     clip_image015

     那么平方錯誤可以寫作:

     clip_image017

     后項與clip_image019無關,看做常量,而clip_image021,因此最小化clip_image014[1]時,

     clip_image023 

     clip_image019[1]是樣本點均值。

     第二步確定方向:

     我們從clip_image019[2]拉出要求的直線(這條直線要過點m),假設直線的方向是單位向量e。那么直線上任意一點,比如clip_image007[1]就可以用點me來表示

     clip_image025 

     其中clip_image027clip_image029到點m的距離。

     我們重新定義最小平方誤差:

     clip_image030

     這里的k只是相當於iclip_image032就是最小平方誤差函數,其中的未知參數是clip_image034e

     實際上是求clip_image032[1]的最小值。首先將上式展開:

     clip_image036

     我們首先固定e,將其看做是常量,clip_image038,然后對clip_image027[1]進行求導,得

     clip_image039

     這個結果意思是說,如果知道了e,那么將clip_image041e做內積,就可以知道了clip_image043e上的投影離m的長度距離,不過這個結果不用求都知道。

     然后是固定clip_image027[2],對e求偏導數,我們先將公式(8)代入clip_image032[2],得 

     clip_image044

     其中clip_image045 與協方差矩陣類似,只是缺少個分母n-1,我們稱之為散列矩陣(scatter matrix)。

     然后可以對e求偏導數,但是e需要首先滿足clip_image038[1],引入拉格朗日乘子clip_image047,來使clip_image049最大(clip_image032[3]最小),令

     clip_image050

     求偏導

     clip_image051

     這里存在對向量求導數的技巧,方法這里不多做介紹。可以去看一些關於矩陣微積分的資料,這里求導時可以將clip_image049[1]看作是clip_image053,將clip_image055看做是clip_image057

     導數等於0時,得

     clip_image058

     兩邊除以n-1就變成了,對協方差矩陣求特征值向量了。

     從不同的思路出發,最后得到同一個結果,對協方差矩陣求特征向量,求得后特征向量上就成為了新的坐標,如下圖:

     clip_image059

     這時候點都聚集在新的坐標軸周圍,因為我們使用的最小平方誤差的意義就在此。

4. PCA理論意義

     PCA將n個特征降維到k個,可以用來進行數據壓縮,如果100維的向量最后可以用10維來表示,那么壓縮率為90%。同樣圖像處理領域的KL變換使用PCA做圖像壓縮。但PCA要保證降維后,還要保證數據的特性損失最小。再看回顧一下PCA的效果。經過PCA處理后,二維數據投影到一維上可以有以下幾種情況:

     clip_image060

     我們認為左圖好,一方面是投影后方差最大,一方面是點到直線的距離平方和最小,而且直線過樣本點的中心點。為什么右邊的投影效果比較差?直覺是因為坐標軸之間相關,以至於去掉一個坐標軸,就會使得坐標點無法被單獨一個坐標軸確定。

     PCA得到的k個坐標軸實際上是k個特征向量,由於協方差矩陣對稱,因此k個特征向量正交。看下面的計算過程。

     假設我們還是用clip_image062來表示樣例,m個樣例,n個特征。特征向量為eclip_image064表示第i個特征向量的第1維。那么原始樣本特征方程可以用下面式子來表示:

     前面兩個矩陣乘積就是協方差矩陣clip_image066(除以m后),原始的樣本矩陣A是第二個矩陣m*n。

     clip_image068

     上式可以簡寫為clip_image070

     我們最后得到的投影結果是clip_image072,E是k個特征向量組成的矩陣,展開如下:

     clip_image074

     得到的新的樣例矩陣就是m個樣例到k個特征向量的投影,也是這k個特征向量的線性組合。e之間是正交的。從矩陣乘法中可以看出,PCA所做的變換是將原始樣本點(n維),投影到k個正交的坐標系中去,丟棄其他維度的信息。舉個例子,假設宇宙是n維的(霍金說是11維的),我們得到銀河系中每個星星的坐標(相對於銀河系中心的n維向量),然而我們想用二維坐標去逼近這些樣本點,假設算出來的協方差矩陣的特征向量分別是圖中的水平和豎直方向,那么我們建議以銀河系中心為原點的x和y坐標軸,所有的星星都投影到x和y上,得到下面的圖片。然而我們丟棄了每個星星離我們的遠近距離等信息。

     clip_image075

5. 總結與討論

     這一部分來自http://www.cad.zju.edu.cn/home/chenlu/pca.htm

     PCA技術的一大好處是對數據進行降維的處理。我們可以對新求出的“主元”向量的重要性進行排序,根據需要取前面最重要的部分,將后面的維數省去,可以達到降維從而簡化模型或是對數據進行壓縮的效果。同時最大程度的保持了原有數據的信息。

     PCA技術的一個很大的優點是,它是完全無參數限制的。在PCA的計算過程中完全不需要人為的設定參數或是根據任何經驗模型對計算進行干預,最后的結果只與數據相關,與用戶是獨立的。 
但是,這一點同時也可以看作是缺點。如果用戶對觀測對象有一定的先驗知識,掌握了數據的一些特征,卻無法通過參數化等方法對處理過程進行干預,可能會得不到預期的效果,效率也不高。

     clip_image076

     圖表 4:黑色點表示采樣數據,排列成轉盤的形狀。 
     容易想象,該數據的主元是clip_image077或是旋轉角clip_image078

     如圖表 4中的例子,PCA找出的主元將是clip_image077[1]。但是這顯然不是最優和最簡化的主元。clip_image077[2]之間存在着非線性的關系。根據先驗的知識可知旋轉角clip_image078[1]是最優的主元(類比極坐標)。則在這種情況下,PCA就會失效。但是,如果加入先驗的知識,對數據進行某種划歸,就可以將數據轉化為以clip_image078[2]為線性的空間中。這類根據先驗知識對數據預先進行非線性轉換的方法就成為kernel-PCA,它擴展了PCA能夠處理的問題的范圍,又可以結合一些先驗約束,是比較流行的方法。

     有時數據的分布並不是滿足高斯分布。如圖表 5所示,在非高斯分布的情況下,PCA方法得出的主元可能並不是最優的。在尋找主元時不能將方差作為衡量重要性的標准。要根據數據的分布情況選擇合適的描述完全分布的變量,然后根據概率分布式

     clip_image079

     來計算兩個向量上數據分布的相關性。等價的,保持主元間的正交假設,尋找的主元同樣要使clip_image080。這一類方法被稱為獨立主元分解(ICA)。

     clip_image081

     圖表 5:數據的分布並不滿足高斯分布,呈明顯的十字星狀。 
     這種情況下,方差最大的方向並不是最優主元方向。

     另外PCA還可以用於預測矩陣中缺失的元素。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM