入門 | 奇異值分解簡介:從原理到基礎機器學習應用

2021-02-08 機器之心

選自machinelearningmastery

作者:Jason Brownlee

機器之心編譯

參與:Panda


矩陣分解在機器學習應用中的重要性無需多言。本文對適用範圍很廣的奇異值分解方法進行了介紹,並通過代碼演示說明了其工作方式、計算方法及其常見的幾種基礎應用。


矩陣分解也叫矩陣因子分解,涉及到用給定矩陣的組成元素描述該矩陣。


奇異值分解(SVD)可能是最著名和使用最廣泛的矩陣分解方法。所有矩陣都有一種 SVD 方法,這使得其比特徵分解(eigendecomposition)等其它方法更加穩定。因此,這種方法在很多應用中都有應用,包括壓縮、去噪、數據壓縮。


在這份教程中,你將了解用於將矩陣分解成其組成元素的奇異值分解方法。


在完成本教程後,你將了解:


 

那就開始吧!


教程概覽


本教程分為 5 部分,依次為:

1. 奇異值分解

2. 計算奇異值分解

3. 根據 SVD 重建矩陣

4. 用於偽逆的 SVD

5. 用於降維的 SVD


奇異值分解


奇異值分解(SVD)是一種用於將矩陣歸約成其組成部分的矩陣分解方法,以使後面的某些矩陣計算更簡單。


為了說明簡單,我們將關注用於實數值矩陣的 SVD,而會忽略複數矩陣的情況。



其中 A 是我們希望分解的 n×m 的實矩陣,U 是一個 m×m 矩陣,Sigma(通常用大寫的希臘字母 ∑表示)是一個 m×n 的對角矩陣,V^T 是一個 n×n 矩陣的轉置,其中 T 是上標。奇異值分解是線性代數的一個亮點。


——《Introduction to Linear Algebra》第五版,2016 年,第 371 頁

 

Sigma 矩陣中的對角值被稱為原始矩陣 A 的奇異值。U 矩陣的列被稱為 A 的左奇異向量,V 的列被稱為 A 的右奇異向量。

 

SVD 是通過迭代式的數值方法計算的。我不會詳細深入這些方法的細節。每一個矩形矩陣都有一個奇異值分解,儘管所得到的矩陣可能包含複數值以及浮點算術的局限性可能會導致某些矩陣無法簡單利落地完成分解。

 

奇異值分解(SVD)提供了另一種將矩陣分解成奇異向量和奇異值的方式。SVD 讓我們可以發現某些與特徵分解同種類型的信息。但是,SVD 有更廣的適用性。


——《Deep Learning》,2016 年,第 44-45

 

SVD 在矩陣求逆等其它矩陣運算的計算有廣泛的應用,但也可用作機器學習中的數據歸約方法。SVD 也可用在最小二乘線性回歸、圖像壓縮和數據去噪中。

 

奇異值分解(SVD)在統計學、機器學習和計算機科學領域有很多應用。將 SVD 應用於矩陣就像是使用 X 射線進行透視……


——《No Bullshit Guide To Linear Algebra》,2017 年,第 297 頁


計算奇異值分解

 

SVD 可以通過調用 svd() 函數進行計算。

 

該函數在處理矩陣後會返回 U、Sigma 和 V^T 元素。Sigma 對角矩陣是按奇異值向量的形式返回的。V 矩陣是以轉置後的形式返回的,比如 V.T.

 

下面的示例定義了一個 3×2 矩陣並計算了奇異值分解。



運行這個示例,首先會顯示定義的 3×2 矩陣,然後會顯示分解計算得到的 3×3 的 U 矩陣、2 個元素的 Sigma 向量和 2×3 的 V^T 矩陣元素。



根據 SVD 重建矩陣

 

原始矩陣可以根據 U、Sigma 和 V^T 元素重建出來。

 

svd() 返回的 U、s 和 V 元素不能直接相乘。

 

s 向量必須使用 diag() 函數轉換成對角矩陣。默認情況下,這個函數將創建一個相對於原來矩陣的 m×m 的方形矩陣。這是有問題的,因為該矩陣的尺寸並不符合矩陣乘法的規則,即一個矩陣的列數必須等於後一個矩陣的行數。

 

在創建了方形的 Sigma 對角矩陣之後,各個矩陣的大小與我們分解的原始 n×m 矩陣是相關的,如下:


 

而事實上我們需要:



我們可以通過創建一個全是 0 值的 m×n 的新 Sigma 矩陣(比如:更多行)並使用通過 diag() 計算得到的方形對角矩陣來填充矩陣的前 n×n 部分。



運行這個示例,首先會顯示原始矩陣,然後會顯示根據 SVD 元素重建的矩陣。



上面使用 Sigma 對角矩陣的複雜之處僅存在於 m 和 n 不相等的情況中。當重建一個方形矩陣時,其對角矩陣可以直接使用,如下。



運行這個示例會顯示原來的 3×3 矩陣和根據 SVD 元素直接重建的版本。



用於偽逆的 SVD

 

偽逆(pseudoinverse)是將方形矩陣的矩陣求逆泛化應用到行數和列數不相等的矩形矩陣上。這也被稱為廣義逆(Generalized Inverse)或摩爾-彭若斯逆(Moore-Penrose Inverse),得名於兩位獨立發現該方法的研究者。

 

矩陣求逆不是為非方形矩陣定義的。[...] 當 A 的列數大於行數時,那麼使用偽逆求解線性方程是眾多解決方案中的一種。


——《Deep Learning》,2016 年,第 46 頁

 

偽逆表示為 A^+,其中 A 是被求逆的矩陣,+ 是上標。

 

偽逆是使用 A 的奇異值分解計算的:



或者,沒有點符號:



其中 A^+ 是 A 的偽逆,D^+ 是對角矩陣 Sigma 的偽逆,U^T 是 U 的轉置。

 

我們可以根據 SVD 運算得到 U 和 V。



根據 Sigma 創建一個對角矩陣,計算 Sigma 中每個非零元素的倒數,然後如果原始矩陣是矩形的就取其轉置,就可以計算得到 D^+。



偽逆提供了一種求解線性回歸方程的方法,尤其是當行數多於列數時,而這也是很常見的情況。

 

NumPy 提供了函數 pinv() 來計算矩形矩陣的偽逆。

 

下面的示例定義了一個 4×2 的矩陣並計算了其偽逆。



運行這個示例,首先顯示定義的矩陣,然後顯示計算出的偽逆。



我們可以通過 SVD 採用人工的方式計算偽逆,並將結果與 pinv() 函數的結果進行比較。

 

首先我們必須計算 SVD。然後我們必須計算 s 數組中每個值的倒數。然後將這個 s 數組轉換成一個對角矩陣,它額外增加了一行 0 以使其變成矩形形式。最後,我們可以根據這些元素計算偽逆。

 

具體實現方式為:



下面列出了完整的示例。



運行這個示例,首先顯示定義的矩形矩陣,然後顯示其偽逆,結果與上面 pinv() 函數的結果一致。



用於降維的 SVD

 

SVD 的一大常見應用是降維。

 

具有大量特徵的數據(比如特徵數(列數)多於觀察數(行數))也許可以被歸約成與所涉預測問題最相關的更小特徵子集。

 

其結果是一個秩更低的矩陣,據說接近原始矩陣。

 

為了做到這一點,我們可以在原來的數據上執行一次 SVD 操作並選擇 Sigma 中前 k 個最大的奇異值。這些列可以從 Sigma 中選擇得到,行可以從 V^T 中選擇得到。

然後可以重建原始向量 A 的近似 B。



在自然語言處理中,這種方法可以被用在文檔中詞出現情況或詞頻的矩陣上,並被稱為隱含語義分析(Latent Semantic Analysis)或隱含語義索引(Latent Semantic Indexing)。

 

在實踐中,我們可以保留和使用被稱為 T 的描述性數據子集。這是矩陣的密集總結或投射。



此外,這種變換既可以在原來的矩陣 A 上計算和應用,也可以在其它類似的矩陣上計算和應用。



下面的示例是使用 SVD 的數據歸約。

 

首先定義一個 3×10 的矩陣,其列數多於行數。然後計算 SVD 並且只選取其前兩個特徵。這些元素再重新結合起來,得到原始矩陣的準確再現。最後計算轉換的方式有兩種。



運行這個示例,首先顯示定義的矩陣,然後是重建的近似矩陣,然後是原始矩陣的兩個同樣的變換結果。



scikit-learn 提供了直接實現這種功能的 TruncatedSVD 類。

 

TruncatedSVD 的創建必須指定所需的特徵數或所要選擇的成分數,比如 2。一旦創建完成,你就可以通過調用 fit() 函數來擬合該變換(比如:計算 V^Tk),然後再通過調用 transform() 函數將其應用於原始矩陣。結果得到上面被稱為 T 的 A 的變換。

 

下面的示例演示了 TruncatedSVD 類。



運行這個示例,首先顯示定義的矩陣,然後是該矩陣變換後的版本。

 

可以看到,結果得到的值與上面人工計算的結果一致,但某些值的符號不一樣。由於所涉及的計算的性質以及所用的基礎庫和方法的差異,可以預見在符號方面會存在一些不穩定性。只要對該變換進行訓練以便復用,這種不穩定性在實踐中應該不成問題。



原文連結:https://machinelearningmastery.com/singular-value-decomposition-for-machine-learning/



本文為機器之心編譯,轉載請聯繫本公眾號獲得授權

✄---

加入機器之心(全職記者/實習生):hr@jiqizhixin.com

投稿或尋求報導:editor@jiqizhixin.com

廣告&商務合作:bd@jiqizhixin.com

相關焦點

  • 奇異值分解簡介:從原理到基礎機器學習應用
    矩陣分解在機器學習應用中的重要性無需多言。本文對適用範圍很廣的奇異值分解方法進行了介紹,並通過代碼演示說明了其工作方式、計算方法及其常見的幾種基礎應用。矩陣分解也叫矩陣因子分解,涉及到用給定矩陣的組成元素描述該矩陣。
  • 【基礎】奇異值分解的原理與應用
    選自machinelearningmastery,作者:Jason Brownlee本文轉自機器之心(nearhuman2014)矩陣分解在機器學習應用中的重要性無需多言本文對適用範圍很廣的奇異值分解方法進行了介紹,並通過代碼演示說明了其工作方式、計算方法及其常見的幾種基礎應用。矩陣分解也叫矩陣因子分解,涉及到用給定矩陣的組成元素描述該矩陣。奇異值分解(SVD)可能是最著名和使用最廣泛的矩陣分解方法。所有矩陣都有一種 SVD 方法,這使得其比特徵分解(eigendecomposition)等其它方法更加穩定。
  • 奇異值分解(SVD)原理
    奇異值分解(Singular Value Decomposition,簡稱SVD)是在機器學習領域廣泛應用的算法,它不光可以用於降維算法中的特徵分解
  • 奇異值分解及其應用
    特徵值和奇異值在大部分人的印象中,往往是停留在純粹的數學計算中。而且線性代數或者矩陣論裡面,也很少講任何跟特徵值與奇異值有關的應用背景。奇異值分解是一個有著很明顯的物理意義的一種方法,它可以將一個比較複雜的矩陣用更小更簡單的幾個子矩陣的相乘來表示,這些小矩陣描述的是矩陣的重要的特性。
  • 奇異值分解(SVD)
    SVD思維導圖奇異值分解(Singular Value Decomposition,SVD),是一種提取信息的方法。比如有一份記錄用戶關於餐館觀點的數據,要對其進行處理分析,提取背後的因素,這個因素可能是餐館的類別,烹飪配料等,然後利用這些因素估計人們對沒有去過的餐館的看法,從而進行推薦,提取這些信息的方法就叫奇異值分解法。
  • 奇異值分解, 這一篇就夠了
    所有矩陣都有一種 SVD 方法,這使得其比特徵分解(eigendecomposition)等其它方法更加穩定。因此,這種方法在很多應用中都有應用,包括壓縮、去噪、數據壓縮。在這份教程中,你將了解用於將矩陣分解成其組成元素的奇異值分解方法。在完成本教程後,你將了解: 那就開始吧!
  • 強大的矩陣奇異值分解(SVD)及其應用
    在上篇文章中便是基於特徵值分解的一種解釋。特徵值和奇異值在大部分人的印象中,往往是停留在純粹的數學計算中。而且線性代數或者矩陣論裡面,也很少講任何跟特徵值與奇異值有關的應用背景。奇異值分解是一個有著很明顯的物理意義的一種方法,它可以將一個比較複雜的矩陣用更小更簡單的幾個子矩陣的相乘來表示,這些小矩陣描述的是矩陣的重要的特性。
  • 奇異值分解SVD
    奇異值分解(SVD)在計算機視覺中有著廣泛的應用,如數據降維、推薦系統、自然語言處理等。本文是介紹SVD的數學計算過程,並從SVD的性質說明其應用的原理。奇異值分解(SVD)與特徵分解類似,是將矩陣分解為由奇異值(特徵值)和特徵向量表示的矩陣之積的方法。因而,在介紹SVD前有必要先介紹特徵值、特徵向量和特徵分解。
  • 《機器學習-原理、算法與應用》出版了
    SIGAI微信公眾號自去年4月份發布第一篇文章「機器學習-波瀾壯闊40年」起,到今天為止,已經累計發布文章164篇,在各個平臺的閱讀次數超過超過300萬次,深受人工智慧學習者和從業者的喜愛,其中不乏大量的精品文章。此公眾號創立之初的目的是為了幫助大家學習和掌握人工智慧技術,用於學術研究和產品研發,傳播人工智慧技術。
  • 一文讀懂機器學習中奇異值分解SVD
    1.1 矩陣分解作用1.2 矩陣分解的方法一文讀懂機器學習中奇異值分解SVD1.3 推薦學習的經典矩陣分解算法SVD具體介紹2.1 特徵值、特徵向量、特徵值分解2.2 SVD分解2.3 SVD分解的應用1.
  • 數學推導+純Python實現機器學習算法28:奇異值分解SVD
    (Singular Value Decomposition,SVD)作為一種常用的矩陣分解和數據降維方法,在機器學習中也得到了廣泛的應用,比如自然語言處理中的SVD詞向量和潛在語義索引,推薦系統中的特徵分解,SVD用於PCA降維以及圖像去噪與壓縮等。
  • 奇異值分解(SVD) 的幾何意義
    奇異值分解( The singular value decomposition )該部分是從幾何層面上去理解二維的SVD:對於任意的 2 x 2 矩陣,通過SVD可以將一個相互垂直的網格(orthogonal grid)變換到另外一個相互垂直的網格。
  • 奇異值分解(SVD) 的 幾何意義
    這樣我們就把尋找矩陣的奇異值分解過程縮小到了優化函數|Mx|上了。結果發現(具體的推到過程這裡就不詳細介紹了)這個函數取得最優值的向量分別是矩陣 MT M 的特徵向量。由於MTM是對稱矩陣,因此不同特徵值對應的特徵向量都是互相正交的,我們用vi 表示MTM的所有特徵向量。奇異值σi = |Mvi| , 向量 ui 為Mvi 方向上的單位向量。但為什麼ui也是正交的呢?
  • 數據科學中需要知道的5個關於奇異值分解(SVD)的應用
    線性代數的一種這樣的用途是奇異值分解(SVD)用於降維。你在數據科學中一定很多次遇到SVD。它無處不在,特別是當我們處理降維時。但它是什麼?它是如何工作的?SVD應用有什麼?事實上,SVD是推薦系統的基礎,而推薦系統是谷歌,YouTube,亞馬遜,Facebook等大公司的核心。
  • 人工智慧的數學(1)奇異值分解
    奇異值分解本篇使用到了numpy這個筆記系列的每一篇都不會很長,適合在各種碎片時間裡閱讀。
  • 一文讓你通俗理解奇異值分解
    特徵值和奇異值在大部分人的印象中,往往是停留在純粹的數學計算中。而且線性代數或者矩陣論裡面,也很少講任何跟特徵值與奇異值有關的應用背景。奇異值分解是一個有著很明顯的物理意義的一種方法,它可以將一個比較複雜的矩陣用更小更簡單的幾個子矩陣的相乘來表示,這些小矩陣描述的是矩陣的重要的特性。
  • 線性代數(Gelbert)---奇異值分解
    矩陣的分解幾乎貫穿了整個Gelbert的線代課,從《準備》中A=LDU(可逆消元),到《矩陣的冪》中A = S∧S-1(特徵向量都線性無關),《對稱矩陣》A = Q∧QT,最後到奇異值分解,用Gelbert的話就是最終和最好的分解,而且它對任意矩陣都可以。它應用很廣泛,網上有很多圖形降噪的例子,如果有時間,我還挺有興趣實現一個的,看上去也不難,大家都可以試試。
  • 李航《統計學習方法》第二版上線,6 年耕耘增加無監督學習
    統計學習即機器學習,是計算機及其應用領域的一門重要學科。此前,李航老師完成的《統計學習方法》是了解機器學習最好的教材之一,該書從 2005 年開始寫作一直到 2012 年完成,包含了眾多主要的監督學習算法與模型。最近,《統計學習方法》第二版正式發布,通過 6 年時間的努力,在第一版的基礎上又增加了無監督學習的主要算法與模型。
  • 第三十課:奇異值分解——MIT線性代數課程學習筆記
    ◎ 原創 | 深度學習算法與自然語言處理◎ 作者 | 丁坤博一. 知識概要 本節介紹矩陣的奇異解分解,本質就是將行空間的一組正交基變換成列空間裡的一組正交基。示意如下圖奇異值分解 SVD 2.1 基變換對矩陣做奇異值分解,首先如上圖,先在行空間中找一組正交基𝑣1,𝑣2,....𝑣𝑖,然後通過矩陣 A 對其進行線性變換,得到列空間中一組正交基𝑢1,𝑢2,....𝑢𝑖。
  • 降維算法原理篇:主成分分析PCA、奇異值分解SVD、因子分析法FA、獨立成分分析ICA等原理詳推
    ,下面我們首先比較一下特徵值分解和奇異值分解,然後分析一下特徵值和奇異值的關係以及SVD在PCA中的應用1、特徵值分解特徵值分解,特徵值分解的矩陣必須是方陣,特徵值分解的目的:提取這個矩陣最重要的特徵,特徵值表示這個特徵有多重要,特徵向量即表示這個特徵是什麼,可以理解是這個變化最主要的方向