特異値分解 (SVD: Singular Value Decomposition)
Singular Value Decomposition -- from Wolfram MathWorld
m×nの実行列 A を A = UDV⊤ と変形すること。ただし m > n とする(必須条件?)。この変形には2通りの種類がある。
定義1(実用で使われる定義) (thin SVD と呼ばれるらしい)
- U: m×n の行列 (U⊤U=Im) ←列に関して直交
- D: n 次対角行列
- V: n 次直交行列
定義2(数学・一般的なライブラリで使われる定義)
- U: m 次直交行列
- D: m×n の(伸びた)対角行列
- V: n 次直交行列
D は対角成分に上から r := rank(A) 個の値を持ち、残りは 0。つまり、
D = diag(d1, ..., dr, 0, ...), d1≥...≥dr
特徴
- V は直交行列なので、 V−1=V⊤。固有値分解ととっても似てる。
- 定義2では、以下の変換に分解できると考えられる
- V による n 次空間での回転・鏡映
- D による次元の変換
- U による m 次元空間での回転・鏡映
A⊤A = (UDV⊤)⊤(UDV⊤) = VD⊤DV⊤ = V(D⊤D)V−1 ←固有値分解!
と変形できるので、 V は A⊤A の固有ベクトル行列、特異値はA⊤A の固有値の2乗
同様に
AA⊤ = U(DD⊤)U−1 ←(ry
なので U は AA⊤ の固有ベクトル行列、特異値はAA⊤ の固有値の2乗