經典 | 奇異值分解(SVD) 的 幾何意義

2022-01-01 數學中國

PS:一直以來對SVD分解似懂非懂,此文為譯文,原文以細緻的分析+大量的可視化圖形演示了SVD的幾何意義。能在有限的篇幅把這個問題講解的如此清晰,實屬不易。原文舉了一個簡單的圖像處理問題,簡單形象,真心希望路過的各路朋友能從不同的角度闡述下自己對SVD實際意義的理解,比如 個性化推薦中應用了SVD,文本以及Web挖掘的時候也經常會用到SVD。

關於線性變換部分的一些知識可以猛戳這裡  奇異值分解(SVD) --- 線性變換幾何意義

奇異值分解( The singular value decomposition )

該部分是從幾何層面上去理解二維的SVD:對於任意的 2 x 2 矩陣,通過SVD可以將一個相互垂直的網格(orthogonal grid)變換到另外一個相互垂直的網格。

我們可以通過向量的方式來描述這個事實: 首先,選擇兩個相互正交的單位向量 v1 和 v2, 向量Mv1 和 Mv2 正交。

u1 和 u2分別表示Mv1 和 Mv2的單位向量,σ1 * u1 =  Mv1 和 σ2 * u2 =  Mv2。σ1 和 σ2分別表示這不同方向向量上的模,也稱作為矩陣 M 的奇異值。

這樣我們就有了如下關係式

Mv1 = σ1u1 
Mv2 = σ2u2

我們現在可以簡單描述下經過 M 線性變換後的向量 x 的表達形式。由於向量v1 和 v2是正交的單位向量,我們可以得到如下式子:

x = (v1xv1 + (v2xv2

這就意味著:

Mx = (v1x) Mv1 + (v2x) Mv2 
Mx = (v1x) σ1u1 + (v2x) σ2u2

向量內積可以用向量的轉置來表示,如下所示

vx = vTx

最終的式子為

Mx = u1σ1 v1Tx + u2σ2 v2Tx 
M = u1σ1 v1T + u2σ2 v2T

上述的式子經常表示成

M = UΣVT

矩陣的列向量分別是u1,u2 ,Σ 是一個對角矩陣,對角元素分別是對應的σ1 和 σ2,矩陣的列向量分別是v1,v2。上角標 T 表示矩陣 的轉置。

這就表明任意的矩陣 M 是可以分解成三個矩陣。表示了原始域的標準正交基,表示經過 M 變換後的co-domain的標準正交基,Σ 表示了中的向量與中相對應向量之間的關係。(V describes an orthonormal basis in the domain, and U describes an orthonormal basis in the co-domain, and Σ describes how much the vectors in V are stretched to give the vectors in U.)

如何獲得奇異值分解?( How do we find the singular decomposition? )

事實上我們可以找到任何矩陣的奇異值分解,那麼我們是如何做到的呢?假設在原始域中有一個單位圓,如下圖所示。經過 M 矩陣變換以後在co-domain中單位圓會變成一個橢圓,它的長軸(Mv1)和短軸(Mv2)分別對應轉換後的兩個標準正交向量,也是在橢圓範圍內最長和最短的兩個向量。

換句話說,定義在單位圓上的函數|Mx|分別在v1v2方向上取得最大和最小值。這樣我們就把尋找矩陣的奇異值分解過程縮小到了優化函數|Mx|上了。結果發現(具體的推到過程這裡就不詳細介紹了)這個函數取得最優值的向量分別是矩陣 MT M 的特徵向量。由於MTM是對稱矩陣,因此不同特徵值對應的特徵向量都是互相正交的,我們用vi 表示MTM的所有特徵向量。奇異值σi = |Mvi| , 向量 ui 為 Mvi 方向上的單位向量。但為什麼ui也是正交的呢?

推倒如下:

σi 和 σj分別是不同兩個奇異值

Mvi = σiui 
Mvj = σjuj.

我們先看下MviMvj,並假設它們分別對應的奇異值都不為零。一方面這個表達的值為0,推到如下

Mvi Mvj = viTMT Mvj = vi MTMvj = λjvi vj = 0

另一方面,我們有

Mvi Mvj = σiσj ui uj = 0

因此,ui 和 uj是正交的。但實際上,這並非是求解奇異值的方法,效率會非常低。這裡也主要不是討論如何求解奇異值,為了演示方便,採用的都是二階矩陣。

應用實例(Another example)

現在我們來看幾個實例。

實例一

經過這個矩陣變換後的效果如下圖所示

在這個例子中,第二個奇異值為 0,因此經過變換後只有一個方向上有表達。

M = u1σ1 v1T.

換句話說,如果某些奇異值非常小的話,其相對應的幾項就可以不同出現在矩陣 M 的分解式中。因此,我們可以看到矩陣 M 的秩的大小等於非零奇異值的個數。

實例二

我們來看一個奇異值分解在數據表達上的應用。假設我們有如下的一張 15 x 25 的圖像數據。

如圖所示,該圖像主要由下面三部分構成。

我們將圖像表示成 15 x 25 的矩陣,矩陣的元素對應著圖像的不同像素,如果像素是白色的話,就取 1,黑色的就取 0. 我們得到了一個具有375個元素的矩陣,如下圖所示

如果我們對矩陣M進行奇異值分解以後,得到奇異值分別是

σ1 = 14.72
σ2 = 5.22
σ3 = 3.31

矩陣M就可以表示成

M=u1σ1 v1T + u2σ2 v2T + u3σ3 v3T

vi具有15個元素,ui 具有25個元素,σi 對應不同的奇異值。如上圖所示,我們就可以用123個元素來表示具有375個元素的圖像數據了。

實例三

減噪(noise reduction)

前面的例子的奇異值都不為零,或者都還算比較大,下面我們來探索一下擁有零或者非常小的奇異值的情況。通常來講,大的奇異值對應的部分會包含更多的信息。比如,我們有一張掃描的,帶有噪聲的圖像,如下圖所示

我們採用跟實例二相同的處理方式處理該掃描圖像。得到圖像矩陣的奇異值:

σ1 = 14.15
σ2 = 4.67
σ3 = 3.00
σ4 = 0.21
σ5 = 0.19
...
σ15 = 0.05

很明顯,前面三個奇異值遠遠比後面的奇異值要大,這樣矩陣 M 的分解方式就可以如下:

 u1σ1 v1T + u2σ2 v2T + u3σ3 v3T

經過奇異值分解後,我們得到了一張降噪後的圖像。

實例四

數據分析(data analysis)

我們搜集的數據中總是存在噪聲:無論採用的設備多精密,方法有多好,總是會存在一些誤差的。如果你們還記得上文提到的,大的奇異值對應了矩陣中的主要信息的話,運用SVD進行數據分析,提取其中的主要部分的話,還是相當合理的。

作為例子,假如我們搜集的數據如下所示:

我們將數據用矩陣的形式表示:

經過奇異值分解後,得到

σ1 = 6.04
σ2 = 0.22

由於第一個奇異值遠比第二個要大,數據中有包含一些噪聲,第二個奇異值在原始矩陣分解相對應的部分可以忽略。經過SVD分解後,保留了主要樣本點如圖所示

就保留主要樣本數據來看,該過程跟PCA( principal component analysis)技術有一些聯繫,PCA也使用了SVD去檢測數據間依賴和冗餘信息.

總結(Summary)

這篇文章非常的清晰的講解了SVD的幾何意義,不僅從數學的角度,還聯繫了幾個應用實例形象的論述了SVD是如何發現數據中主要信息的。在netflix prize中許多團隊都運用了矩陣分解的技術,該技術就來源於SVD的分解思想,矩陣分解算是SVD的變形,但思想還是一致的。之前算是能夠運用矩陣分解技術於個性化推薦系統中,但理解起來不夠直觀,閱讀原文後醍醐灌頂,我想就從SVD能夠發現數據中的主要信息的思路,就幾個方面去思考下如何利用數據中所蘊含的潛在關係去探索個性化推薦系統。也希望路過的各位大俠不吝分享呀。

相關焦點

  • 奇異值分解(SVD) 的幾何意義
    大量的可視化圖形演示了SVD的幾何意義。如何獲得奇異值分解?( How do we find the singular decomposition? )事實上我們可以找到任何矩陣的奇異值分解,那麼我們是如何做到的呢?假設在原始域中有一個單位圓,如下圖所示。
  • 奇異值分解(SVD) 的 幾何意義
    換句話說,如果某些奇異值非常小的話,其相對應的幾項就可以不同出現在矩陣 M 的分解式中。因此,我們可以看到矩陣 M 的秩的大小等於非零奇異值的個數。實例二我們來看一個奇異值分解在數據表達上的應用。假設我們有如下的一張 15 x 25 的圖像數據。
  • 一文讀懂機器學習中奇異值分解SVD
    1.1 矩陣分解作用1.2 矩陣分解的方法一文讀懂機器學習中奇異值分解SVD1.3 推薦學習的經典矩陣分解算法SVD具體介紹2.1 特徵值、特徵向量、特徵值分解2.2 SVD分解2.3 SVD分解的應用1.
  • 奇異值分解(SVD)
    SVD思維導圖奇異值分解(Singular Value Decomposition,SVD),是一種提取信息的方法。比如有一份記錄用戶關於餐館觀點的數據,要對其進行處理分析,提取背後的因素,這個因素可能是餐館的類別,烹飪配料等,然後利用這些因素估計人們對沒有去過的餐館的看法,從而進行推薦,提取這些信息的方法就叫奇異值分解法。
  • 數學推導+純Python實現機器學習算法28:奇異值分解SVD
    ,即特徵值為奇異值的平方。下面基於numpy.linalg線性代數模塊下的svd函數來看一個計算實例。其原理就是保存像素矩陣的前k個奇異值,並在此基礎上做圖像恢復。由SVD的原理我們可以知道,在SVD分解中越靠前的奇異值越重要,代表的信息含量越大。     下面我們嘗試對一個圖像進行SVD分解,並分別取前1~50個奇異值來恢復該圖像。需要恢復的圖像如下(厚著臉皮拿筆者自己作為示例):
  • 從奇異值分解 SVD 看 PCA 的主成分
    降維問題本身可以看作最優化問題,但本篇主要是從奇異值分解的角度來解讀 PCA,因此對於降維問題的描述不作詳細展開。簡而言之,PCA 降維的目標為,一方面為了減少數據的特徵數,因此要挑選出最具代表性的一些特徵。保持特徵的可分性,即在原來空間中有明顯差異的數據在降維後也希望儘量保持差異。
  • 幾何角度理解奇異值分解SVD
    一、左乘矩陣的幾何意義 向量左乘對角矩陣,幾何上相當對這個向量的長度進行縮放,此處坐標軸保持不變; 向量左乘對稱矩陣,幾何上相當於對這個向量的長度進行縮放,並且對坐標軸也進行旋轉; 給向量左乘普通矩陣,總能找到一組正交的坐標軸來表示該向量
  • 奇異值分解(SVD)原理總結
    是基向量,那么正交變換的結果如下圖:是M*K的矩陣,需要擴展成方陣形式:將正交基是M*N對角矩陣,V是N*N方陣因此(3.4)式寫成向量形式為:(4.2)式對列進行了降維,即右奇異矩陣V可以用於列數的壓縮,與PCA降維算法一致。
  • 人工智慧的數學(1)奇異值分解
    奇異值分解本篇使用到了numpy這個筆記系列的每一篇都不會很長,適合在各種碎片時間裡閱讀。
  • 奇異值分解SVD
    奇異值分解(SVD)在計算機視覺中有著廣泛的應用,如數據降維、推薦系統、自然語言處理等。本文是介紹SVD的數學計算過程,並從SVD的性質說明其應用的原理。奇異值分解(SVD)與特徵分解類似,是將矩陣分解為由奇異值(特徵值)和特徵向量表示的矩陣之積的方法。因而,在介紹SVD前有必要先介紹特徵值、特徵向量和特徵分解。
  • 數據科學中需要知道的5個關於奇異值分解(SVD)的應用
    線性代數的一種這樣的用途是奇異值分解(SVD)用於降維。你在數據科學中一定很多次遇到SVD。它無處不在,特別是當我們處理降維時。但它是什麼?它是如何工作的?SVD應用有什麼?事實上,SVD是推薦系統的基礎,而推薦系統是谷歌,YouTube,亞馬遜,Facebook等大公司的核心。
  • 奇異值分解(SVD)原理
    奇異值分解(Singular Value Decomposition,簡稱SVD)是在機器學習領域廣泛應用的算法,它不光可以用於降維算法中的特徵分解
  • 奇異值分解及其應用
    概述PCA的實現一般有兩種,一種是用特徵值分解去實現的,一種是用奇異值分解去實現的。 在機器學習領域,有相當多的應用與奇異值都可以扯上關係,比如做feature reduction的PCA,做數據壓縮(以圖像壓縮為代表)的算法,還有做搜尋引擎語義層次檢索的LSI(Latent Semantic Indexing)奇異值與特徵值基礎知識特徵值分解和奇異值分解在機器學習領域都是屬於滿地可見的方法。
  • 30分鐘學會SVD矩陣分解
    SVD(Singular Value Decomposition)奇異值分解分解是機器學習中最重要的矩陣分解方法。它能夠將一個任意形狀的矩陣分解成一個正交矩陣和一個對角矩陣以及另一個正交矩陣的乘積。SVD分解具有非常深刻的幾何含義。矩陣實際上對應著一種線性變換,一個矩陣作用到一個向量上,會得到一個新的向量。
  • 太巧妙了: 實際跑的 SVD 分解原來是這樣實現的
    本篇來看另一個經典算法,隨機 SVD 分解。如果要用一句話來概括的話,我選 投機取巧,以小博大: 指用小的成本通過冒險投機手段換取大的價值。如果將這裡的 投機 兩字改成 隨機,那也許就再合適不過了。1引言調用 sklearn 裡的 PCA,你可能會發現有個參數 svd_solver 可以設置 svd_solver = 'randomized'。這裡的隨機是什麼意思呢?如果用默認設置 'auto' 的話,那麼會根據矩陣大小自動選擇求解器。
  • 機器學習—PCA和奇異值分解(SVD)
    由於得到協方差矩陣的特徵值特徵向量有兩種方法:特徵值分解協方差矩陣、奇異值分解協方差矩陣,所以PCA算法有兩種實現方法:基於特徵值分解協方差矩陣實現PCA算法、基於SVD分解協方差矩陣實現PCA算法。2.PCA原理推導(1)為什麼要中心化 採用了中心化,均值為 0。
  • 數據降維 SVD 分解 小案例
    Aarray([[2, 1, 0],       [4, 3, 0]])調用 Numpy中的奇異值分解API:#奇異值分解np.linalg.svd(A)得到的結果為三個數組 USigmaV轉置(array([[-0.40455358, -0.9145143
  • 強大的矩陣奇異值分解(SVD)及其應用
    ,一種是用奇異值分解去實現的。在上篇文章中便是基於特徵值分解的一種解釋。特徵值和奇異值在大部分人的印象中,往往是停留在純粹的數學計算中。而且線性代數或者矩陣論裡面,也很少講任何跟特徵值與奇異值有關的應用背景。奇異值分解是一個有著很明顯的物理意義的一種方法,它可以將一個比較複雜的矩陣用更小更簡單的幾個子矩陣的相乘來表示,這些小矩陣描述的是矩陣的重要的特性。
  • 【基礎】奇異值分解的原理與應用
    本文對適用範圍很廣的奇異值分解方法進行了介紹,並通過代碼演示說明了其工作方式、計算方法及其常見的幾種基礎應用。矩陣分解也叫矩陣因子分解,涉及到用給定矩陣的組成元素描述該矩陣。奇異值分解(SVD)可能是最著名和使用最廣泛的矩陣分解方法。所有矩陣都有一種 SVD 方法,這使得其比特徵分解(eigendecomposition)等其它方法更加穩定。
  • 精簡易懂,30 分鐘學會 SVD 矩陣分解,很強!
    小白學視覺」,選擇加"星標"或「置頂」重磅乾貨,第一時間送達SVD(Singular Value Decomposition)奇異值分解分解是機器學習中最重要的矩陣分解方法的對角元為AA^T特徵值的平方根,稱之為矩陣A的奇異值。類似地V由A^TA的特徵向量構成,這些向量稱為A的右奇異向量。三,SVD分解和數據壓縮奇異值描述了矩陣對應的拉伸變換在各個方向的比例,是矩陣的重要特徵。