特異値分解
線形代数学の分野において、特異値分解 (SVD) は行列をその構成要素に分解する強力な手法を提供する基本的な技術です。特異値分解は、信号処理、統計学、機械学習などの様々な分野の多くの応用で広く使用されています。SVDを理解することは、高次元空間でデータがどのように振る舞うかの理解を大幅に向上させ、様々な次元削減およびデータ圧縮のタスクに役立ちます。
特異値分解の入門
特異値分解は行列を3つの別々の行列に分解する方法です。mxn
の次元を持つ行列A
が与えられたとき、SVDは次のように表現します:
A = UΣVᵀ
ここで:
U
はmxm
の直交行列です。Σ
(シグマ)はmxn
の対角行列です。V
はnxn
の直交行列です。
ここで、U
とV
は直交行列です。つまり、それらの列は直交規格化されたベクトルです。
視覚的な例
単純な2x2行列A
を考えます:
A = [[4, 0], [3, -5]]
このような行列に対して、SVDの因数分解は次のようになります:
U = [[1, 0], [0, 1]] Σ = [[5, 0], [0, 3]] Vᵀ = [[0, 1], [1, 0]]
これは、行列A
を回転/反射で表したU
とV
、および対角行列Σ
で表されるスケーリングに分解することとして理解できます。
構成要素の理解
直交行列U
とV
直交行列には特別な特性があります。行列が直交であるためには、異なる列のあらゆるペアのドット積がゼロであり、各列それ自体のドット積が1でなければなりません。これはつまり、ノルムが保存されることを意味します。行列U
に対して:
UᵀU = I
V
に対しても同様に:
VᵀV = I
直交行列はデータの幾何学的特性(角度や長さなど)を保存するため、理解が重要です。
対角行列Σ
対角行列Σ
には元の行列A
の特異値が含まれています。これらの値はU
とV
の列によって定義されたそれぞれの方向に沿った拡大係数として見ることができます。
例:手作業でSVDの計算
行列を考えます:
A = [[3, 1], [1, 3]]
ここではSVDを計算する手順をガイドします。
ステップ1: AᵀA
と AAᵀ
を計算
まず、次を計算します:
AᵀA = [[10, 6], [6, 10]]
AAᵀ = [[10, 6], [6, 10]]
ステップ2: 固有値と固有ベクトルを見つける
これらの行列の固有値は特異値を決定するのに役立ち、固有ベクトルは直交行列を提供します。
{|AᵀA - λI| = 0} を解くと、固有値 λ₁ = 16
、λ₂ = 4
が得られます。
Σ
は次のようになります:
Σ = [[4, 0], [0, 2]]
ステップ3: V
と U
の構築
AᵀA
の固有ベクトルから V
を計算します:
V = [[1/√2, -1/√2], [1/√2, 1/√2]]
同様に AAᵀ
の固有ベクトルから U
を計算します:
U = [[1/√2, -1/√2], [1/√2, 1/√2]]
特異値分解の応用
データ圧縮
SVDはデータを圧縮するために使用できます。U
、Σ
、およびV
を低次元に切り詰めることによって、情報の損失を最小限に抑えながら大幅なデータ圧縮を達成できます。
信号処理
信号処理では、特異値は信号の「形状」や「構造」を識別し、ノイズを除去し、重要な特徴を効果的に解析するのに役立ちます。
画像処理におけるSVDの例
グレースケールの画像は行列として表すことができます。SVDを使用して、主要な特異値のみを保持することで、画像を圧縮することができます。この技術は、画像の主要な特徴を保持しつつ、そのサイズを縮小します。
画像行列I
を考えます:
I = [[255, 240, 230], [200, 180, 175], [215, 196, 188]]
SVDを適用すると:
U = [[0.68, -0.72], [0.68, 0.68]] Σ = [[457, 0], [0, 25]] Vᵀ = [[0.60, -0.80], [0.80, 0.60]]
最も大きな特異値とその対応するベクトルのみを保持することにより、画像は主要な特徴を保持しつつ、データ表現を縮小します。
結論
要するに、特異値分解は行列をよりシンプルで解釈しやすい要素の積に分解する力を与える線形代数学における不可欠なツールです。SVDを理解することは数学的な直感を高めるだけでなく、コンピューティング、データサイエンス、エンジニアリングなどの分野における実用的なタスクに強力なツールをもたらします。