圖像處理——主成分分析PCA、奇異值分解SVD

感謝以下2位的淵博知識:

(1)李春春:http://blog.csdn.net/zhongkelee/article/details/44064401

(2)沈春旭: https://blog.csdn.net/shenziheng1/article/details/52916278

一、PCA簡介

1. 相關背景

      上完陳恩紅老師的《機器學習與知識發現》和季海波老師的《矩陣代數》兩門課之後,頗有體會。最近在做主成分分析和奇異值分解方面的項目,所以記錄一下心得體會。

      在許多領域的研究與應用中,往往需要對反映事物的多個變量進行大量的觀測,收集大量數據以便進行分析尋找規律。多變量大樣本無疑會爲研究和應用提供了豐富的信息,但也在一定程度上增加了數據採集的工作量,更重要的是在多數情況下,許多變量之間可能存在相關性,從而增加了問題分析的複雜性,同時對分析帶來不便。如果分別對每個指標進行分析,分析往往是孤立的,而不是綜合的。盲目減少指標會損失很多信息,容易產生錯誤的結論。

      因此需要找到一個合理的方法,在減少需要分析的指標同時,儘量減少原指標包含信息的損失,以達到對所收集數據進行全面分析的目的。由於各變量間存在一定的相關關係,因此有可能用較少的綜合指標分別綜合存在於各變量中的各類信息。主成分分析與因子分析就屬於這類降維的方法。

2. 問題描述

      下表1是某些學生的語文、數學、物理、化學成績統計:

       首先,假設這些科目成績不相關,也就是說某一科目考多少分與其他科目沒有關係。那麼一眼就能看出來,數學、物理、化學這三門課的成績構成了這組數據的主成分(很顯然,數學作爲第一主成分,因爲數學成績拉的最開)。爲什麼一眼能看出來?因爲座標軸選對了!下面再看一組學生的數學、物理、化學、語文、歷史、英語成績統計,見表2,還能不能一眼看出來:

      數據太多了,以至於看起來有些凌亂!也就是說,無法直接看出這組數據的主成分,因爲在座標系下這組數據分佈的很散亂。究其原因,是因爲無法撥開遮住肉眼的迷霧~如果把這些數據在相應的空間中表示出來,也許你就能換一個觀察角度找出主成分。如下圖1所示:

      但是,對於更高維的數據,能想象其分佈嗎?就算能描述分佈,如何精確地找到這些主成分的軸?如何衡量你提取的主成分到底佔了整個數據的多少信息?所以,我們就要用到主成分分析的處理方法。

3. 數據降維

      爲了說明什麼是數據的主成分,先從數據降維說起。數據降維是怎麼回事兒?假設三維空間中有一系列點,這些點分佈在一個過原點的斜面上,如果你用自然座標系x,y,z這三個軸來表示這組數據的話,需要使用三個維度,而事實上,這些點的分佈僅僅是在一個二維的平面上,那麼,問題出在哪裏?如果你再仔細想想,能不能把x,y,z座標系旋轉一下,使數據所在平面與x,y平面重合?這就對了!如果把旋轉後的座標系記爲x',y',z',那麼這組數據的表示只用x'和y'兩個維度表示即可!當然了,如果想恢復原來的表示方式,那就得把這兩個座標之間的變換矩陣存下來。這樣就能把數據維度降下來了!但是,我們要看到這個過程的本質,如果把這些數據按行或者按列排成一個矩陣,那麼這個矩陣的秩就是2!這些數據之間是有相關性的,這些數據構成的過原點的向量的最大線性無關組包含2個向量,這就是爲什麼一開始就假設平面過原點的原因!那麼如果平面不過原點呢?這就是數據中心化的緣故!將座標原點平移到數據中心,這樣原本不相關的數據在這個新座標系中就有相關性了!有趣的是,三點一定共面,也就是說三維空間中任意三點中心化後都是線性相關的,一般來講n維空間中的n個點一定能在一個n-1維子空間中分析!

    上一段文字中,認爲把數據降維後並沒有丟棄任何東西,因爲這些數據在平面以外的第三個維度的分量都爲0。現在,假設這些數據在z'軸有一個很小的抖動,那麼我們仍然用上述的二維表示這些數據,理由是我們可以認爲這兩個軸的信息是數據的主成分,而這些信息對於我們的分析已經足夠了,z'軸上的抖動很有可能是噪聲,也就是說本來這組數據是有相關性的,噪聲的引入,導致了數據不完全相關,但是,這些數據在z'軸上的分佈與原點構成的夾角非常小,也就是說在z'軸上有很大的相關性,綜合這些考慮,就可以認爲數據在x',y' 軸上的投影構成了數據的主成分!

  課堂上老師談到的特徵選擇的問題,其實就是要剔除的特徵主要是和類標籤無關的特徵。而這裏的特徵很多是和類標籤有關的,但裏面存在噪聲或者冗餘。在這種情況下,需要一種特徵降維的方法來減少特徵數,減少噪音和冗餘,減少過度擬合的可能性。

    PCA的思想是將n維特徵映射到k維上(k<n),這k維是全新的正交特徵。這k維特徵稱爲主成分,是重新構造出來的k維特徵,而不是簡單地從n維特徵中去除其餘n-k維特徵。

二、PCA實例

      現在假設有一組數據如下:

      行代表了樣例,列代表特徵,這裏有10個樣例,每個樣例兩個特徵。可以這樣認爲,有10篇文檔,x是10篇文檔中“learn”出現的TF-IDF,y是10篇文檔中“study”出現的TF-IDF。

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

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

     這裏只有x和y,求解得

     對角線上分別是x和y的方差,非對角線上是協方差。協方差是衡量兩個變量同時變化的變化程度。協方差大於0表示x和y若一個增,另一個也增;小於0表示一個增,一個減。如果x和y是統計獨立的,那麼二者之間的協方差就是0;但是協方差是0,並不能說明x和y是獨立的。協方差絕對值越大,兩者對彼此的影響越大,反之越小。協方差是沒有單位的量,因此,如果同樣的兩個變量所採用的量綱發生變化,它們的協方差也會產生樹枝上的變化。

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

      上面是兩個特徵值,下面是對應的特徵向量,特徵值0.0490833989對應特徵向量爲,這裏的特徵向量都歸一化爲單位向量。

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

    這裏特徵值只有兩個,我們選擇其中最大的那個,這裏是1.28402771,對應的特徵向量是(-0.677873399, -0.735178656)T。

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

FinalData(10*1) = DataAdjust(10*2矩陣) x 特徵向量(-0.677873399, -0.735178656)T

    得到的結果是

 

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

    上面的數據可以認爲是learn和study特徵融合爲一個新的特徵叫做LS特徵,該特徵基本上代表了這兩個特徵。上述過程如下圖2描述:

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

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

三、PCA推導

      先看下面這幅圖:

      在第一部分中,我們舉了一個學生成績的例子,裏面的數據點是六維的,即每個觀測值是6維空間中的一個點。我們希望將6維空間用低維空間表示。

    先假定只有二維,即只有兩個變量,它們由橫座標和縱座標所代表;因此每個觀測值都有相應於這兩個座標軸的兩個座標值;如果這些數據形成一個橢圓形狀的點陣,那麼這個橢圓有一個長軸和一個短軸。在短軸方向上,數據變化很少;在極端的情況,短軸如果退化成一點,那只有在長軸的方向才能夠解釋這些點的變化了;這樣,由二維到一維的降維就自然完成了。

    上圖中,u1就是主成分方向,然後在二維空間中取和u1方向正交的方向,就是u2的方向。則n個數據在u1軸的離散程度最大(方差最大),數據在u1上的投影代表了原始數據的絕大部分信息,即使不考慮u2,信息損失也不多。而且,u1、u2不相關。只考慮u1時,二維降爲一維。

    橢圓的長短軸相差得越大,降維也越有道理。

1. 最大方差理論

      在信號處理中認爲信號具有較大的方差,噪聲有較小的方差,信噪比就是信號與噪聲的方差比,越大越好。如前面的圖,樣本在u1上的投影方差較大,在u2上的投影方差較小,那麼可認爲u2上的投影是由噪聲引起的。

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

     比如我們將下圖中的5個點投影到某一維上,這裏用一條過原點的直線表示(數據已經中心化):

    假設我們選擇兩條不同的直線做投影,那麼左右兩條中哪個好呢?根據我們之前的方差最大化理論,左邊的好,因爲投影后的樣本點之間方差最大(也可以說是投影的絕對值之和最大)。

     計算投影的方法見下圖5:

 

       圖中,紅色點表示樣例,藍色點表示在u上的投影,u是直線的斜率也是直線的方向向量,而且是單位向量。藍色點是在u上的投影點,離原點的距離是<x,u>(即xTu或者uTx)。

2. 最小二乘法

     我們使用最小二乘法來確定各個主軸(主成分)的方向。

    對給定的一組數據(下面的闡述中,向量一般均指列向量):

       

    其數據中心位於:

          

    數據中心化(將座標原點移到樣本點的中心點):

        

    中心化後的數據在第一主軸u1方向上分佈散的最開,也就是說在u1方向上的投影的絕對值之和最大(也可以說方差最大),計算投影的方法上面已經闡述,就是將x與u1做內積,由於只需要求u1的方向,所以設u1也是單位向量。

    在這裏,也就是最大化下式:

        

    由矩陣代數相關知識可知,可以對絕對值符號項進行平方處理,比較方便。所以進而就是最大化下式:

        

    兩個向量做內積,可以轉化成矩陣乘法:

        

    所以目標函數可以表示爲:

        

    括號裏面就是矩陣乘法表示向量內積,由於列向量轉置以後是行向量,行向量乘以列向量得到一個數,一個數的轉置還是其本身,所以又可以將目標函數化爲:

        

    去括號:

        

    又由於u1和i無關,可以拿到求和符外面,上式化簡爲:

        

    學過矩陣代數的同學可能已經發現了,上式括號裏面求和後的結果,就相當於一個大矩陣乘以自身的轉置,其中,這個大矩陣的形式如下:

        

    X矩陣的第i列就是xi

    於是有:

        

    所以目標函數最終化爲:

        

    其中的就是一個二次型,

    我們假設的某一特徵值爲λ,對應的特徵向量爲ξ,有

        

    所以是半正定的對稱矩陣,即是半正定陣的二次型,由矩陣代數知識得出,目標函數存在最大值!

    下面我們求解最大值、取得最大值時u1的方向這兩個問題。

    先解決第一個問題,對於向量x的二範數平方爲:

        

    同樣,目標函數也可以表示成映射後的向量的二範數平方:

        

    把二次型化成一個範數的形式,由於u1取單位向量,最大化目標函數的基本問題也就轉化爲:對一個矩陣,它對一個向量做變換,變換前後的向量的模長伸縮尺度如何才能最大?我們有矩陣代數中的定理知,向量經矩陣映射前後的向量長度之比的最大值就是這個矩陣的最大奇異值,即:

        

    式中,是矩陣A的最大奇異值(亦是矩陣A的二範數),它等於(或)的最大特徵值開平方。

    針對本問題來說,是半正定對稱陣,也就意味着它的特徵值都大於等於0,且不同特徵值對應的特徵向量是正交的,構成所在空間的一組單位正交基。

    再解決第二個問題,對一般情況,設對稱陣的n個特徵值分別爲:

      

    相應的單位特徵向量爲:

      

    任取一個向量x,用特徵向量構成的空間中的這組基表示爲:

      

    則:

     

    所以:

      

    針對第二個問題,我們取上式中的,目標函數取得最大值,也就是的最大特徵值時,對應的特徵向量的方向,就是第一主成分u1的方向!(第二主成分的方向爲的第二大特徵值對應的特徵向量的方向,以此類推)。

    證明完畢。

    主成分所佔整個信息的百分比可用下式計算:

  

    式中分母爲所有奇異值平方和,分子爲所選取的前k大奇異值平方和。

    有些研究工作表明,所選的主軸總長度佔所有主軸長度之和的大約85% 即可,其實,這只是一個大體的說法,具體選多少個,要看實際情況而定。

3.意義

     PCA將n個特徵降維到k個,可以用來進行數據壓縮,例如100維的向量最後可以用10維來表示,那麼壓縮率爲90%。同樣圖像處理領域的KL變換使用PCA做圖像壓縮,人臉檢測和匹配。比如如下摘自另一篇博客上的Matlab實驗結果:

 

可見測試樣本爲人臉的樣本的重建誤差顯然小於非人臉的重建誤差。




SVD

PCA的實現一般有兩種,一種是用特徵值分解去實現的,一種是用奇異值分解去實現的。特徵值和奇異值在大部分人的印象中,往往是停留在純粹的數學計算中。而且線性代數或者矩陣論裏面,也很少講任何跟特徵值與奇異值有關的應用背景。奇異值分解是一個有着很明顯的物理意義的一種方法,它可以將一個比較複雜的矩陣用更小更簡單的幾個子矩陣的相乘來表示,這些小矩陣描述的是矩陣的重要的特性。就像是描述一個人一樣,給別人描述說這個人長得濃眉大眼,方臉,絡腮鬍,而且帶個黑框的眼鏡,這樣寥寥的幾個特徵,就讓別人腦海裏面就有一個較爲清楚的認識,實際上,人臉上的特徵是有着無數種的,之所以能這麼描述,是因爲人天生就有着非常好的抽取重要特徵的能力,讓機器學會抽取重要的特徵,SVD是也一個重要的方法。在機器學習領域,有相當多的應用與奇異值都可以扯上關係,比如做feature reduction的PCA,做數據壓縮(以圖像壓縮爲代表)的算法,還有做搜索引擎語義層次檢索的LSI(Latent Semantic Indexing)。
本文主要關注奇異值的一些特性,還會稍稍提及奇異值的計算。另外,本文裏面有部分不算太深的線性代數的知識,如果完全忘記了線性代數,看文可能會有些困難。

2.奇異值分解詳解

特徵值分解和奇異值分解兩者有着很緊密的關係,特徵值分解和奇異值分解的目的都是一樣,就是提取出一個矩陣最重要的特徵。先談談特徵值分解吧:
1 特徵值
如果說一個向量v是方陣A的特徵向量,將一定可以表示成下面的形式:

這時候λ就被稱爲特徵向量v對應的特徵值,一個矩陣的一組特徵向量是一組正交向量。特徵值分解是將一個矩陣分解成下面的形式:

其中Q是這個矩陣A的特徵向量組成的矩陣,Σ是一個對角陣,每一個對角線上的元素就是一個特徵值。首先,要明確的是,一個矩陣其實就是一個線性變換,因爲一個矩陣乘以一個向量後得到的向量,其實就相當於將這個向量進行了線性變換。比如說下面的一個矩陣:

 它其實對應的線性變換是下面的形式:

 因爲這個矩陣M乘以一個向量(x,y)的結果是:

上面的矩陣是對稱的,所以這個變換是一個對x,y軸的方向一個拉伸變換(每一個對角線上的元素將會對一個維度進行拉伸變換,當值>1時拉長,當值<1時縮短),當矩陣不是對稱的時候,假如說矩陣是下面的樣子:

它所描述的變換是下面的樣子:

這其實是在平面上對一個軸進行的拉伸變換(如藍色的箭頭所示),在圖中,藍色的箭頭是一個最主要的變化方向(變化方向可能有不止一個),如果我們想要描述好一個變換,那我們就描述好這個變換主要的變化方向就好了。反過頭來看看之前特徵值分解的式子,分解得到的Σ矩陣是一個對角陣,裏面的特徵值是由大到小排列的,這些特徵值所對應的特徵向量就是描述這個矩陣變化方向(從主要的變化到次要的變化排列)
當矩陣是高維的情況下,那麼這個矩陣就是高維空間下的一個線性變換,這個線性變化可能沒法通過圖片來表示,但是可以想象,這個變換也同樣有很多的變換方向,我們通過特徵值分解得到的前N個特徵向量,那麼就對應了這個矩陣最主要的N個變化方向。我們利用這前N個變化方向,就可以近似這個矩陣(變換)也就是之前說的:提取這個矩陣最重要的特徵。總結一下,特徵值分解可以得到特徵值與特徵向量,特徵值表示的是這個特徵到底有多重要,而特徵向量表示這個特徵是什麼,可以將每一個特徵向量理解爲一個線性的子空間,我們可以利用這些線性的子空間幹很多的事情。不過,特徵值分解也有很多的侷限,比如說變換的矩陣必須是方陣。
 2 奇異值:
下面重點談談奇異值分解。特徵值分解是一個提取矩陣特徵很不錯的方法,但是它只是對方陣而言的,在現實的世界中,我們看到的大部分矩陣都不是方陣,比如說有N個學生,每個學生有M科成績,這樣形成的一個N * M的矩陣就不可能是方陣,我們怎樣才能描述這樣普通的矩陣呢的重要特徵呢?奇異值分解可以用來幹這個事情,奇異值分解是一個能適用於任意的矩陣的一種分解的方法:
 假設A是一個N * M的矩陣,那麼得到的U是一個N * N的方陣(裏面的向量是正交的,U裏面的向量稱爲左奇異向量),Σ是一個N * M的矩陣(除了對角線的元素都是0,對角線上的元素稱爲奇異值),V’(V的轉置)是一個N * N的矩陣,裏面的向量也是正交的,V裏面的向量稱爲右奇異向量),如下圖所示:

那麼奇異值和特徵值是怎麼對應起來的呢?首先,我們將一個矩陣A的轉置 * A,將會得到一個方陣,我們用這個方陣求特徵值可以得到:
這裏得到的v,就是我們上面的右奇異向量。此外我們還可以得到:

這裏的σ就是上面說的奇異值,u就是上面說的左奇異向量。奇異值σ跟特徵值類似,在矩陣Σ中也是從大到小排列,而且σ的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就佔了全部的奇異值之和的99%以上了。也就是說,我們也可以用前r大的奇異值來近似描述矩陣,這裏定義一下部分奇異值分解:

 r是一個遠小於m、n的數,這樣矩陣的乘法看起來像是下面的樣子:


 右邊的三個矩陣相乘的結果將會是一個接近於A的矩陣,在這兒,r越接近於n,則相乘的結果越接近於A。而這三個矩陣的面積之和(在存儲觀點來說,矩陣面積越小,存儲量就越小)要遠遠小於原始的矩陣A,我們如果想要壓縮空間來表示原矩陣A,我們存下這裏的三個矩陣:U、Σ、V就好了。

3.如何計算奇異值

 奇異值的計算是一個難題,是一個O(N^3)的算法。在單機的情況下當然是沒問題的,matlab在一秒鐘內就可以算出1000 * 1000的矩陣的所有奇異值,但是當矩陣的規模增長的時候,計算的複雜度呈3次方增長,就需要並行計算參與了。
其實SVD還是可以用並行的方式去實現的,在解大規模的矩陣的時候,一般使用迭代的方法,當矩陣的規模很大(比如說上億)的時候,迭代的次數也可能會上億次,如果使用Map-Reduce框架去解,則每次Map-Reduce完成的時候,都會涉及到寫文件、讀文件的操作。個人猜測Google雲計算體系中除了Map-Reduce以外應該還有類似於MPI的計算模型,也就是節點之間是保持通信,數據是常駐在內存中的,這種計算模型比Map-Reduce在解決迭代次數非常多的時候,要快了很多倍。
Lanczos迭代就是一種解對稱方陣部分特徵值的方法(之前談到了,解A’* A得到的對稱方陣的特徵值就是解A的右奇異向量),是將一個對稱的方程化爲一個三對角矩陣再進行求解。
由於奇異值的計算是一個很枯燥,純數學的過程,而且前人的研究成果(論文中)幾乎已經把整個程序的流程圖給出來了。更多的關於奇異值計算的部分,將在後面的參考文獻中給出,這裏不再深入,我還是focus在奇異值的應用中去。

4.奇異值分解應用

奇異值與主成分分析(PCA)
這裏主要談談如何用SVD去解PCA的問題。PCA的問題其實是一個基的變換,使得變換後的數據有着最大的方差。方差的大小描述的是一個變量的信息量,我們在講一個東西的穩定性的時候,往往說要減小方差,如果一個模型的方差很大,那就說明模型不穩定了。但是對於我們用於機器學習的數據(主要是訓練數據),方差大才有意義,不然輸入的數據都是同一個點,那方差就爲0了,這樣輸入的多個數據就等同於一個數據了。以下面這張圖爲例子:


這個假設是一個攝像機採集一個物體運動得到的圖片,上面的點表示物體運動的位置,假如我們想要用一條直線去擬合這些點,那我們會選擇什麼方向的線呢?當然是圖上標有signal的那條線。如果我們把這些點單純的投影到x軸或者y軸上,最後在x軸與y軸上得到的方差是相似的(因爲這些點的趨勢是在45度左右的方向,所以投影到x軸或者y軸上都是類似的),如果我們使用原來的xy座標系去看這些點,容易看不出來這些點真正的方向是什麼。但是如果我們進行座標系的變化,橫軸變成了signal的方向,縱軸變成了noise的方向,則就很容易發現什麼方向的方差大,什麼方向的方差小了。
 一般來說,方差大的方向是信號的方向,方差小的方向是噪聲的方向,我們在數據挖掘中或者數字信號處理中,往往要提高信號與噪聲的比例,也就是信噪比。對上圖來說,如果我們只保留signal方向的數據,也可以對原數據進行不錯的近似了。
PCA的全部工作簡單點說,就是對原始的空間中順序地找一組相互正交的座標軸,第一個軸是使得方差最大的,第二個軸是在與第一個軸正交的平面中使得方差最大的,第三個軸是在與第1、2個軸正交的平面中方差最大的,這樣假設在N維空間中,我們可以找到N個這樣的座標軸,我們取前r個去近似這個空間,這樣就從一個N維的空間壓縮到r維的空間了,但是我們選擇的r個座標軸能夠使得空間的壓縮使得數據的損失最小。
 還是假設我們矩陣每一行表示一個樣本,每一列表示一個feature,用矩陣的語言來表示,將一個m * n的矩陣A的進行座標軸的變化,P就是一個變換的矩陣從一個N維的空間變換到另一個N維的空間,在空間中就會進行一些類似於旋轉、拉伸的變化。

而將一個m * n的矩陣A變換成一個m * r的矩陣,這樣就會使得本來有n個feature的,變成了有r個feature了(r < n),這r個其實就是對n個feature的一種提煉,我們就把這個稱爲feature的壓縮。用數學語言表示就是:

但是這個怎麼和SVD扯上關係呢?之前談到,SVD得出的奇異向量也是從奇異值由大到小排列的,按PCA的觀點來看,就是方差最大的座標軸就是第一個奇異向量,方差次大的座標軸就是第二個奇異向量…我們回憶一下之前得到的SVD式子:

在矩陣的兩邊同時乘上一個矩陣V,由於V是一個正交的矩陣,所以V轉置乘以V得到單位陣I,所以可以化成後面的式子:


將後面的式子與A * P那個m * n的矩陣變換爲m * r的矩陣的式子對照看看,在這裏,其實V就是P,也就是一個變化的向量。這裏是將一個m * n 的矩陣壓縮到一個m * r的矩陣,也就是對列進行壓縮,如果我們想對行進行壓縮(在PCA的觀點下,對行進行壓縮可以理解爲,將一些相似的sample合併在一起,或者將一些沒有太大價值的sample去掉)怎麼辦呢?同樣我們寫出一個通用的行壓縮例子:



這樣就從一個m行的矩陣壓縮到一個r行的矩陣了,對SVD來說也是一樣的,我們對SVD分解的式子兩邊乘以U的轉置U':

 這樣我們就得到了對行進行壓縮的式子。可以看出,其實PCA幾乎可以說是對SVD的一個包裝,如果我們實現了SVD,那也就實現了PCA了,而且更好的地方是,有了SVD,我們就可以得到兩個方向的PCA,如果我們對A’A進行特徵值的分解,只能得到一個方向的PCA。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章