DOSEIの日記

技術メモ+日常ログ

特異値分解 (SVD: Singular Value Decomposition)

Singular Value Decomposition -- from Wolfram MathWorld
m×nの実行列 A を A = UDV と変形すること。ただし m > n とする(必須条件?)。この変形には2通りの種類がある。

定義1(実用で使われる定義) (thin SVD と呼ばれるらしい)

  • U: m×n の行列 (UU=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では、以下の変換に分解できると考えられる
    1. V による n 次空間での回転・鏡映
    2. D による次元の変換
    3. U による m 次元空間での回転・鏡映

AA = (UDV)(UDV) = VDDV = V(DD)V−1固有値分解!
と変形できるので、 V は AA の固有ベクトル行列、特異値はAA の固有値の2乗
同様に
AA = U(DD)U−1 ←(ry
なので U は AA固有ベクトル行列、特異値はAA固有値の2乗