特異値分解(SVD)

特異値分解(Singular Value Decomposition, SVD)は、任意の実行列または複素行列に対して適用可能な非常に重要な分解手法です。機械学習、特に次元削減(例:主成分分析)、行列近似、レコメンデーションシステム、自然言語処理などの分野で広く使われています。


1. 特異値分解の定義

特異値分解とは、任意の m×nm \times n 行列 AA に対して、以下のように分解することです:

A=UΣVTA = U \Sigma V^T

ここで:

  • AA:元の m×nm \times n 行列(実数または複素数)

  • UUm×mm \times m の直交行列(列ベクトルは左特異ベクトル

  • Σ\Sigmam×nm \times n の対角行列(対角要素が特異値

  • VVn×nn \times n の直交行列(列ベクトルは右特異ベクトル

  • VTV^TVV の転置(実数の場合)または共役転置(複素数の場合)


2. 特異値とは何か

  • 特異値(singular values)とは、ATAA^TA または AATAA^T の固有値の平方根です。

  • 通常、特異値は大きい順に並べられます:

    σ1σ2σr>0\sigma_1 \geq \sigma_2 \geq \dots \geq \sigma_r > 0

    ここで rr は行列のランク。


3. 幾何学的な意味

特異値分解は、行列 AA が空間に対してどう変換を加えるかを明示的に示します:

  1. VV により、元の空間の**回転(もしくは反射)**が行われる

  2. Σ\Sigma により、**軸方向の拡大縮小(スケーリング)**が行われる

  3. UU により、結果の空間に対して再び**回転(または反射)**が行われる


4. SVDの応用

(1) 次元削減(PCA:主成分分析)

  • A=UΣVTA = U \Sigma V^T の上位 kk 個の特異値・特異ベクトルを使って、近似行列 AkA_k を作成。

  • 情報を保ったままデータの次元数を削減できる。

(2) ノイズ除去

  • 小さい特異値に対応する成分はノイズの可能性が高いため、それらを除去することでノイズ除去が可能。

(3) レコメンデーションシステム

  • ユーザーとアイテムの行列に対して SVD を使って、潜在的な特徴ベクトルを抽出し、推薦を行う。

(4) 行列の圧縮

  • フルランク行列の近似を小さなランクで表現することで、記憶容量の削減が可能。


5. 数値計算における性質

  • 任意の行列に適用可能(正方行列である必要はない)

  • 数値的に安定しており、擬似逆行列(Moore–Penrose 逆行列)の計算にも用いられる

  • 固有値分解とは異なり、非対称行列にも使用可能


6. SVDの構築(概要)

  1. ATAA^TA の固有値と固有ベクトルを求める → VVΣ\Sigma

  2. AV=UΣAV = U\Sigma を使って UU を求める

※ 実際の実装では数値線形代数ライブラリ(例:NumPy, LAPACK)が使用される。


7. 例(数値付き)

行列:

A=[3113]A = \begin{bmatrix} 3 & 1 \\ 1 & 3 \end{bmatrix}

この行列の SVD は以下のように分解されます(詳細な数値は省略):

A=UΣVTA = U \Sigma V^T

特異値は約 σ14,σ22\sigma_1 \approx 4, \sigma_2 \approx 2
対応する U,VU, V は直交行列になります。


まとめ

項目 説明
定義 任意の行列を A=UΣVTA = U\Sigma V^T に分解
特異値 ATAA^TA の固有値の平方根
利用分野 次元削減、ノイズ除去、行列圧縮、推薦システムなど
メリット 任意の行列に対して適用可能、数値的に安定

生成日:2025/06/01