2.6.2
SVD
- SVD は行列を直交行列と特異値に分解し、低ランク近似を通じて圧縮やノイズ除去を行う。
- 上位特異値だけを残すことで、情報量の高い成分を抽出できる。
- PCA との関係が深く、行列分解ベース手法の基盤として重要です。
- 主成分分析(PCA) の概念を先に学ぶと理解がスムーズです
直感 #
SVDは、行列を『回転・伸縮・回転』に分けて理解する見方です。伸縮量(特異値)の大きい成分だけ残すと、データの骨格を保ったまま次元やノイズを削減できます。
詳細な解説 #
1. 直感:行列を「基本パターン」に分解する #
- データ行列 \(A\) を「基底ベクトル」と「重み」に分解して表す方法。
- 画像なら「ぼやけた基本的なパターン」を重ね合わせて元画像を作るイメージ。
- 特異値が大きい要素から順に「情報量の多いパターン」を表す。
2. 数式でみる SVD #
任意の行列 \(A \in \mathbb{R}^{m \times n}\) は次のように分解できる:
$$ A = U \Sigma V^\top $$- \(U \in \mathbb{R}^{m \times m}\):左特異ベクトル(直交行列)
- \(\Sigma \in \mathbb{R}^{m \times n}\):特異値を対角成分にもつ対角行列
- \(V \in \mathbb{R}^{n \times n}\):右特異ベクトル(直交行列)
特異値 \(\sigma_1 \ge \sigma_2 \ge \dots\) は「データの強いパターン」順に並ぶ。
上位の特異値だけ残すことで「低ランク近似」ができる。
3. 実験用のデータ(画像) #
「実験」という文字画像をグレースケール化し、行列として扱う。
| |
4. 特異値分解を実行 #
| |
A: (163, 372), U: (163, 163), Σ:(163,), V^T:(372, 372)
5. 低ランク近似で画像を復元 #
特異値の上位だけを残すと、元の画像を少ない情報で表現できる。
| |
ランクが大きいほど細部が復元され、ランクが小さいほどぼやける。
6. 特異ベクトルの解釈 #
各特異値に対応する \(U, V\) の列は「画像のパターン」を表している。
例えば \(u_1\) は「最も大きな構造」、\(u_2\) は「補助的な構造」を表す。
| |
7. 実務での応用 #
- 画像圧縮:少数の特異値だけで近似し、容量削減。
- ノイズ除去:小さい特異値を削除するとノイズが減る。
- 推薦システム:ユーザー×アイテム行列を分解し、潜在的な好みを抽出。
- 自然言語処理:LSA(潜在意味解析)で単語文書行列を分解。
特異値が似た大きさの場合、どこで打ち切るかによって結果が大きく変わります。累積寄与率(上位k個の特異値の二乗和 / 全特異値の二乗和)を確認し、80〜90%を目安にランクを決めてください。また、欠損値がある行列にはそのまま適用できないため、事前に補完が必要です。
大規模データにはsklearn.decomposition.TruncatedSVDを使うとメモリ効率よく上位k成分だけを計算できます。テキストデータの潜在意味解析(LSA)では、TF-IDF行列にTruncatedSVDを適用するのが定番です。
まとめ #
- SVDは任意の行列を直交行列と特異値に分解し、データの構造を把握する基本的な手法です。
- 上位の特異値だけを残す低ランク近似により、圧縮やノイズ除去が可能です。
- PCAとの関係が深く、標準化したデータ行列にSVDを適用するとPCAの主成分と一致します。
- 画像圧縮、推薦システム、自然言語処理など幅広い分野で応用されています。
発展:SVDと他手法との関係 #
低ランク近似の最適性:ランク\(k\)の近似 \(A_k\) は
$$ A_k = \sum_{i=1}^k \sigma_i u_i v_i^\top $$と表せ、これが Frobenius ノルムで最良の近似になることが知られている。
PCAとの関係:データ行列を標準化して SVD を行えば、PCA の主成分と一致する。
計算の工夫:大規模データではランダム化 SVD などを使って効率化。
- 主成分分析(PCA) — SVD を活用した次元削減
- Kernel-PCA — カーネルによる非線形化
- 主成分回帰 — SVD/PCAの回帰応用
ランクと SVD #
打ち切りランクを変えると SVD の 2D 射影がどう変化するか確認できます。