從SVD到PCA——奇妙的數學遊戲

方陣的特徵值
算法

當一個矩陣與一個向量相乘,究竟發生了什麼?app

定義以下的 A 與 x:spa

求得 b:orm

能夠看到 A 乘以 x 就是將 x 的元素以線性的方式從新組合獲得 b,數學上把這種從新組合叫 線性變換圖片

假設二維向量 x 知足以下條件:get

給定一個 2×2 的方陣:數學

當 x 在知足約束條件的前提下取不一樣的值,Ax 的值的變化規律以下:
it

圖中紅色箭頭爲向量 x,藍色箭頭爲矩陣 A 對 x 進行線性變換後的向量。io

能夠看到 A 對 x 作了兩件事 : 旋轉伸縮入門

在某些方向上,紅色與藍色向量共線,即在這些方向上 A 只對 x 進行了伸縮,稱這些方向爲 A 的主方向。在某個主方向上,設 A 對 x 伸縮的倍率爲 λ,則:

把 λ 叫作方陣 A 的一個特徵值,x 是相應的特徵向量。 

隨着 x 的方向從 0 變化到 2π,紅藍向量有 4 次共線出現,但真正線性無關的共線只有2個,由於各有兩次共線僅是方向相反,因此 A 有 2 個特徵值。

藍色向量劃出了一個橢圓軌跡,這個橢圓表示了 A 是如何對 x 作線性變換的,能夠認爲這個橢圓包含了 A 的所有信息(由於 x 能夠任意取值)。從動圖能夠看出,這個橢圓以 A 的特徵值 λ1 和 λ2 爲長軸和短軸的長度,特徵向量 x1 和 x2 爲長短軸的方向,即 λ1 、λ二、x一、x2 包括了 A 的全部信息

因爲這是一個狹長的橢圓,長軸包含的信息更多,因此 λ1  與  x1 包含了 A 的大部分信息。


矩陣的奇異值分解

當矩陣不是方陣,沒法爲其定義特徵值與特徵向量,能夠用一個類似的概念來代替:奇異值

一般用一種叫奇異值分解的算法來求取任意矩陣的奇異值:

抽象的概念要用具體的方式理解,來看幾張圖:

上圖中的紅色區域是一個以原點爲中心的單位圓。圓當中的任意一點能夠用向量 x 標示,且 x 知足:

給定一個 2×2 的方陣:

利用 MATLAB 對 A 作奇異值分解:

即:

因此:

先看 V' 對 x 作了什麼:

V' 使 x 旋轉了一個角度。

再看 SV' 對 x 作了什麼:

S 在 V'x 的基礎上,在兩個主方向進行了伸縮變換。

最後看 USV' 對 x 作了什麼:

在 SV'x 的基礎上,進行了旋轉變換。

至此,奇異值分解的幾何意義可謂一目瞭然:

A 是一個線性變換,把 A 分解成 USV',S 給出了變換後橢圓長短軸的長度, U 和 V' 一塊兒肯定了變換後的方向,因此 U、S、V' 包含了這個線性變換的所有信息。S 矩陣的對角線元素稱爲 A 的奇異值,與特徵值同樣,大的奇異值對應長軸,小的奇異值對應短軸,大的奇異值包含更多信息。

當矩陣是對稱方陣時,其特徵值與奇異值相等。

網上有一個很經典的案例來講明 SVD 的應用:

有一張 25×15 的圖片:

把它用矩陣表示:

這個矩陣的秩等於 3。即矩陣只有 3 種線性無關的列,其餘的列都是冗餘的:

對 M 作奇異值分解,獲得 3 個不爲零的奇異值:

它們分別對應着 3 個線性無關的列。

另外一種更通常的狀況,處理一張有噪聲的圖片:

它的奇異值爲:

能夠想象在15維空間中有一個超橢球體,它有15個軸,其中有3個軸是主要的軸(對應着3個最大的奇異值),有這3個軸就能夠大體勾勒出超橢球體的形狀,由於它們包含了大部分信息。

若是 S 中的對角線元素從大到小排列,咱們就只保留 S 左上角的 3×3 的子矩陣,並相應保留 U 和 V 的前 3 列,簡化後的 U、S、V 依然保留了 M 的大部分信息:


主成分分析

案例1

假若有 m 條1維數據,因爲混入了噪音,變成了2維。

在座標系中把他們繪製出來:

主成分分析(PCA)能夠用來排除這些噪音,把原來的維度提取出來。

首先將數據歸一化,並將其所包含的信息用 協方差矩陣(協方差矩陣表示不一樣維度之間的相關關係,這是一個對稱矩陣)來表示:

Σ 有2個奇異值,例如:

顯然前者包含了大部分信息,對應的矩陣 U 的第一列就是主成分的方向:

因而就經過降維對數據實現了去噪。

在更通常的狀況下,假設有 m 條 n 維的數據,對協方差矩陣進行奇異值分解獲得 n 個從大到小排列的奇異值:

若是但願信息利用率在99%以上,可利用以下不等式來肯定主成分的維度 p:

案例2

有 m 張人臉圖,每張的大小都是 32×32 (1024 個像素)。

每一個像素的顏色由一個灰度值來表示,這樣每張圖片就用一個 1024×1 的向量來表示。

定義第 i 張圖片的數據爲:

將數據歸一化並計算其協方差矩陣 Σ ,Σ 是一個 1024×1024 的矩陣

對 Σ 作奇異值分解,獲得矩陣 U,S 和 V。其中 U 也是一個 1024×1024 的矩陣。根據以前的比喻,U 的每一列表明瞭 1024 維空間中一個超橢球體的主軸方向。其中若干個方向包含了 Σ 的大部分信息,咱們把這些方向(對應 U 中的若干列)叫作數據的主成分

假設取 U 的前 k(k<1024) 列做爲主方向,在 1024 維空間中有一個數據點 x,記 x 在這 k 個主方向上的投影爲 x(project),那麼 x(project) 是對 x 的一個近似(更精確地講,將 k 維的 x(project) 從新投影到 1024 維空間中獲得 x(approx) 纔是對 x 的近似,這個技術叫數據恢復(Data Reconstruction))。須要注意的一點是:x(project)  與 x(approx) 是等價的,它們是同一個數據點在不一樣座標系下的不一樣表達(升維不丟失信息)當k=1024, x(approx)=x。

在應用中,用降維後的 x(project) 參與後續計算,因爲數據量變小,計算速度將加快。

回到案例中,我取 k = 100,即取 U 的前 100 列做爲數據的主方向(主成分)。由於每一列都是 1024 維向量,能夠把它們像圖片同樣打印出來:

越靠前的列對應着越大的奇異值,它們也包含了更多信息。在本例中,每一個主方向(主成分)就是一張「基礎圖片」,每張原圖都是這些基礎圖片的線性組合(係數就是原圖在主方向上的投影)。

如今用這 100 張「基礎圖片」去簡化原圖片(將降維後的100維數據從新投影到1024維空間——Data Reconstruction),效果以下:

最後附上一首打油詩來幫助記憶PCA的原理:

主成分即主方向

數據投影在其上

投影造成新數據

降維加速本領強


總結

本文的靈感來自於 Andrew Ng 在 Coursera 上的 《Machine Learning》課程,在上一篇文章中我提到過,這是一門面嚮應用的,強調快速入門的課程。我始終認爲,知其然也要知其因此然,也就是背後的數學原理,這是一名合格工程師應有的素質。

相關文章
相關標籤/搜索