奇異值分解 (Singular Value Decomposition,SVD) 是一種矩陣因子分解方法,是線性代數的概念。應用於數據降維、推薦系統和自然語言處理等領域,在機器學習中被廣泛適用。下面主要介紹 SVD 的定義與性質、計算過程、幾何解釋。
1 特征值分解
這里先回顧一下特征值分解,它與 SVD 有許多相似的地方。關於特征值分解的幾何意義可參考上一篇文章:特征值與特征向量。
設 A 為 n 階方陣,若存在數 λ 和非零向量 x,使得:
![]()
則稱 λ 是 A 的一個特征值,x 為 A 的對應於特征值 λ 的特征向量。
求出了矩陣 A 的 n 個特征值 λ1 ≤ λ2 ≤ ... ≤ λn ,以及這 n 個特征值所對應的特征向量 { p1,p2,...,pn },如果這 n 個特征值線性無關,那么矩陣 A 就可以用下式的特征分解表示:
![]()
其中 P 是這 n 個特征向量所張成的 n × n 維矩陣,而 Λ 是以 n 個特征值為主對角線的 n × n 維矩陣。
一般我們會把 P 的 n 個特征向量標准化,此時,這 n 個特征向量為標准正交基,滿足 PTP = I ,即 PT = P-1 ,這樣特征分解表達式可以寫成:
![]()
注意,要進行特征分解,矩陣 A 必須為方陣。如果A不是方陣,即行和列不相同時,我們還可以對矩陣進行分解嗎?答案是可以,此時我們的SVD登場了。
2 SVD 的定義與性質
SVD 定義:矩陣的奇異值分解是指,將一個非零的 m × n 實矩陣 A,表示為以下三個實矩陣乘積形式的運算 (SVD 可以更一般地定義在復數矩陣上,但本文不涉及),即進行矩陣的因子分解:
![]()
其中 U 是 m 階正交矩陣,V 是 n 階正交矩陣,Σ 是由降序排列的非負的對角線元素組成的 m × n 矩形對角矩陣。滿足:

UΣVT 稱為矩陣 A 的奇異值分解,σi 稱為矩陣 A 的奇異值,U 的列向量稱為左奇異向量,V 的列向量稱為右奇異向量。

奇異值分解不要求矩陣 A 是方陣,事實上矩陣的奇異值分解可以看做是方陣的對角化的推廣。
SVD 基本定理:若 A 為一 m × n 實矩陣 ,則 A 的奇異值分解存在:
![]()
其中 U 是 m 階正交矩陣,V 是 n 階正交矩陣,Σ 是 m × n 矩形對角矩陣,其對角線元素非負,且按降序排列。
這個定理表達的意思就是矩陣的奇異值分解是一定存在的 (但不唯一),這里就不具體證明了。
主要性質:
(1) 設矩陣 A 的奇異值分解為 A = UΣVT ,則以下關系成立:

也就是說,矩陣 ATA 和 AAT 的特征分解存在,且可以由矩陣 A 的奇異值分解的矩陣表示。V 的列向量是 ATA 的特征向量,U 的列向量是 AAT 的特征向量,Σ 的奇異值是 ATA 和 AAT 的特征值的平方根。
(2) 在矩陣 A 的奇異值分解中,奇異值、左奇異向量和右奇異向量之間存在對應關系:
![]()
![]()
類似的,奇異值、右奇異向量和左奇異向量之間存在對應關系:
![]()
![]()
![]()
(3) 矩陣 A 的奇異值分解中,奇異值 σ1,σ2,...σn 是唯一的,而矩陣 U 和 V 不是唯一的。
(4) 矩陣 A 和 Σ 的秩相等,等於正奇異值 σi 的個數 r (包含重復的奇異值)。
3 SVD 的計算
給定 m × n 矩陣 A:
(1) 首先求 ATA 的特征值和特征向量
計算對稱矩陣 W = ATA,求解特征方程:
![]()
得到特征值 λi ,並將特征值由大到小排列 λ1 ≥ λ2 ≥ ... ≥ λn ≥ 0 ,將特征值 λi ( i = 1,2,...,n ) 代入特征方程求得對應的特征向量。
(2) 求 n 階正交矩陣 V
將特征向量單位化,得到單位特征向量 v1,v2,...,vn ,構成 n 階正交矩陣 V :
![]()
(3) 求 m × n 對角矩陣 Σ
計算 A 的奇異值:
![]()
構造 m × n 矩形對角矩陣 Σ,主對角元素是奇異值,其余元素是 0 :
![]()
(4) 求 m 階正交矩陣 U
對 A 的前 r 個正奇異值,令:

得到:
![]()
求 AT 的零空間的一組標准正交基 { ur+1,ur+2,...,um },令:
![]()
並令:
![]()
(5) 得到奇異值分解
![]()
4 幾何解釋
與特征值分解相同,同樣從線性變換的角度理解奇異值分解,m × n 矩陣 A 表示從 n 維空間 Rn 到 m 維空間 Rm 的一個線性變換:
![]()
x ∈ Rn ,Ax ∈ Rm ,x 和 Ax 分別是各自空間的向量。線性變換可以分解為三個簡單的變換:一個坐標系的旋轉或反射變換、一個坐標軸的縮放變換、另一個坐標系的旋轉或反射變換。奇異值定理保證這種分解一定存在,這就是奇異值分解的幾何解釋。
對矩陣 A 進行奇異值分解,得到 A = UΣVT ,V 和 U 都是正交矩陣。所以 V 的列向量 v1,v2,...,vn 構成 Rn 空間的一組標准正交基,表示 Rn 中的正交坐標系的旋轉或反射變換;U 的列向量 u1,u2,...,um 構成 Rm 空間的一組標准正交基,表示 Rm 中的正交坐標系的旋轉或反射變換;Σ 的對角元素 σ1,σ2,...σn 是一組非負實數,表示 Rn 中的原始正交坐標系坐標軸的 σ1,σ2,...σn 倍的縮放變換。
5 基於 SVD 的 PCA 降維
PCA 降維需要找到樣本協方差矩陣 XTX 的最大的 d 個特征向量,然后用這最大的 d 個特征向量張成的矩陣來做低維投影降維。可以看出,在這個過程中需要先求出協方差矩陣 XTX,當樣本數多樣本特征數也多的時候,這個計算量是很大的。
注意到我們的 SVD 也可以得到協方差矩陣 XTX 最大的 d 個特征向量張成的矩陣,但是 SVD 有個好處,實際應用中的 SVD 算法是通過求 XTX 的特征值進行,但不直接計算 XTX。按照這個思路產生了許多矩陣 SVD 的有效算法,這里不予介紹。實際上,scikit-learn 的 PCA 算法的背后真正的實現就是用的 SVD,而不是我們我們認為的暴力特征分解。
另一方面,注意到 PCA 僅僅使用了我們 SVD 的右奇異矩陣,沒有使用左奇異矩陣,那么左奇異矩陣有什么用呢?
假設我們的樣本是 m × n 的矩陣 X,如果我們通過 SVD 找到了矩陣 XTX 最大的 d 個特征向量張成 m × d 維矩陣 U,如果進行如下處理:
可以得到一個 d × n 的矩陣 X',這個矩陣和我們原來的 m × n 維樣本矩陣 X 相比,行數從 m 減到了 d,可見對行數進行了壓縮。也就是說,左奇異矩陣可以用於行數的壓縮。相對的,右奇異矩陣可以用於列數即特征維度的壓縮,也就是我們的PCA降維。
主要參考:奇異值分解(SVD)原理與在降維中的應用、李航《統計學習方法》
