固有値・固有ベクトル
行列で変換しても「向きが変わらない」特別な方向
Layer 1 — 直感・シミュレーター
紫の矢印 をドラッグして向きを変えると、行列 で変換した後の矢印(赤)が一緒に表示される。ほとんどの向きでは と は別の方向を向くが、特定の向きにそろえると2本が同一直線上に乗る(緑になる)。それが固有ベクトルの方向。行列のスライダーも動かして色々な変換を試してみよう。
= (1.00, 1.00) を で変換すると = (3.00, 3.00)
緑の矢印が赤ではなく紫と同一直線上 → これは固有ベクトルの向き!固有値 λ ≈ 3.00
↑ 紫の矢印(v)をドラッグし、行列 M による変換後(赤/緑の矢印 Mv)が同じ直線上に乗る向きを探そう。それが固有ベクトルの方向。
Layer 2 — 定義・受験・証明
定義
正方行列 に対して、ゼロベクトルでないベクトル と、スカラー が
を満たすとき、 を の固有ベクトル(eigenvector)、 を対応する固有値(eigenvalue)と呼ぶ。行列による変換は一般にベクトルの向きを変えてしまうが、固有ベクトルの向きだけは変換後も変わらず、長さが 倍されるだけになる。
公式
証明・導出
を変形すると となる。 の解を持つためには、行列 が正則(逆行列を持つ)であってはならない。なぜなら正則であれば両辺に逆行列を掛けて が強制されてしまうからである。
したがって固有値は
という「特性方程式」の解として求められる。2×2行列 の場合、これは という2次方程式になる。
押さえておきたいポイント
- 固有ベクトルの向きは、行列変換をしても変わらない(不変方向)
- 対称行列()は必ず直交する固有ベクトルを持つ — これが主成分分析(PCA)の理論的支柱
- 固有値の絶対値の大小は、その方向にデータや変換がどれだけ「引き伸ばされるか」を表す
Layer 3 — 工学応用・現場実装
主成分分析 (PCA) によるデータ圧縮の第一歩
画像やデータセットの分散共分散行列を計算し、その固有ベクトル・固有値を求めると、「データが最もばらついている方向(=情報量が多い方向)」が分かる。固有値の大きい順に少数の固有ベクトルだけを残すことで、情報の損失を抑えながら次元を圧縮できる。これは画像圧縮や顔認識(Eigenfaces)、レコメンドエンジンの基礎技術である。
1import numpy as np23# 2次元の観測データ(例: 身長と体重など、相関のある2変量)4data = np.array([5 [2.5, 2.4],6 [0.5, 0.7],7 [2.2, 2.9],8 [1.9, 2.2],9 [3.1, 3.0],10 [2.3, 2.7],11 [2.0, 1.6],12 [1.0, 1.1],13])1415# 平均を引いて中心化16centered = data - data.mean(axis=0)1718# 分散共分散行列19cov = np.cov(centered, rowvar=False)2021# 固有値・固有ベクトルを求める(対称行列なので eigh が数値的に安定)22eigenvalues, eigenvectors = np.linalg.eigh(cov)2324# 固有値の大きい順に並べ替え25order = np.argsort(eigenvalues)[::-1]26eigenvalues = eigenvalues[order]27eigenvectors = eigenvectors[:, order]2829# 最大固有値に対応する固有ベクトル = 第1主成分(最も情報量の多い方向)30print("第1主成分の方向:", eigenvectors[:, 0])31print("寄与率:", eigenvalues / eigenvalues.sum())3233# データをその方向に射影すれば、2次元 -> 1次元の圧縮になる34projected = centered @ eigenvectors[:, 0]35print("圧縮後の1次元データ:", projected)