基本
X を m×n の実行列とする(X∈Rm×n)。
X の rank を rとおく(rankX=r≤min(m,n))。
このとき、直交行列 U∈Rm×m,V∈Rn×n と対角行列 Σ∈Rm×nを用いて、以下のように表すことができる:
X=UΣV⊤
これを、行列 X の特異値分解 (Singular Value Decomposition, SVD) と呼ぶ。
ただし、Σ のmin(m,n) 個の対角成分のうち r 個は正の値で残りは0である。
以下では、
Σ=(Σ~000),Σ~=diag(λ1,λ2,...,λr)
λ1≥λ2≥...≥λr>0
とする。

U,V,Σ の関係
m次元ベクトル ui∈Rm と n次元ベクトル vi∈Rn を用いて、直交行列U,Vを以下のように表す:
UV=(u1,u2,...,um)=(v1,v2,...,vn).
このとき、ベクトル ui,i=1,2,...,r は、m×m 正方行列 XX⊤ の固有値λiに対応する固有ベクトルになっている:
(XX⊤)ui=λiui.
同様にして、ベクトル vi,i=1,2,...,r は、n×n 正方行列 X⊤X の固有値λiに対応する固有ベクトルになっている:
(X⊤X)vi=λivi.
また、ベクトル ui と vi の間には以下の関係が成り立つ:
ui=λi1Xvi,vi=λi1X⊤ui
別表現
ベクトルによる表現
上記の分解をベクトルを用いて以下のように表すこともできる:
X=i=1∑rλiuivi⊤
compact SVD
U,V を構成するベクトル{ui},{vi} のうち、XX⊤ ないし X⊤X の固有ベクトルとなっている r 番目までのものを用いて、以下のように表すこともできる:
U~=(u1,u2,...,ur)∈Rm×r,V~=(v1,v2,...,vr)∈Rn×r
Σ~=diag(λ1,λ2,...,λr)∈Rr×r
X=U~Σ~V~⊤

具体例
ここでは具体的に、以下の行列を特異値分解してみる:
X=001120001120.
この行列は、2行目が1行目の2倍になっていることから分かるように、rankX=2 である。
まず、 3×3 行列 XX⊤ について考える:
XX⊤=240480002.
この行列の固有値は {10,2,0} であり、それぞれに対応する固有ベクトルは、
51120,001,51−210
となる。
このとき、4×4 行列 X⊤X も固有値として {10,2}を持つはずであり、それぞれに対応する固有ベクトルは、
101X⊤5112021X⊤001=210101=211010
である。
なお、残りの固有値は2つとも0であり、対応する固有ベクトルとしては上記と直交するように以下を取る:
21010−1,2110−10.
以上から、
U=1/52/50001−2/51/50,V=01/201/21/201/2001/20−1/21/20−1/20
Σ=1000020000000
のよう対応するため、
X=UΣV⊤=1/52/50001−2/51/50100002000000001/201/21/201/2001/20−1/21/20−1/20=1/52/50001(10002)(01/21/2001/21/20)
が特異値分解の結果である。
参考
- 井出剛、入門 機械学習による異常検知―Rによる実践ガイド(2015、コロナ社)
https://amzn.asia/d/4uQ3D19
- Singular value decomposition (in Wikipedia)
https://en.wikipedia.org/wiki/Singular_value_decomposition
- D. A. Harville, Matrix Algebra From a Statistician's Perspective (2006, Springer)
- 日本語訳: D. A. ハーヴィル(伊理正夫監訳)、統計のための行列代数 上・下(丸善、2012)
https://amzn.asia/d/eFLLrNg
https://amzn.asia/d/h5awcqR
https://amzn.asia/d/fRgKunk
Discussion