身長と体重のデータを集めると、「背が高い人ほど体重も重い傾向がある」とわかります。では、この「一緒に動く傾向」を1つの数値で表すにはどうすればよいでしょうか。さらに、変数が身長・体重・座高・足のサイズと4つに増えたとき、それらが互いにどう関係し合っているかを「ひとまとめ」に記述する方法はあるのでしょうか。この問いに答えるのが共分散行列(covariance matrix)です。
共分散行列は、1変数の世界の「分散」を多変数へ一般化したものです。対角に各変数の分散を、非対角に変数ペアの共分散を並べた行列で、データの「広がり」と「向き」を完全に記述します。この1つの行列を理解すると、驚くほど多くの手法が見通せるようになります。
- 主成分分析(PCA):共分散行列の固有値分解そのものが、データの最も重要な方向を取り出す操作です
- マハラノビス距離・異常検知:共分散行列の逆行列が「データの形を考慮した距離」を定義します
- 多変量ガウス分布:密度の指数の中に共分散行列の逆行列が現れ、等高線(信頼楕円)の形を決めます
- ポートフォリオ理論・カルマンフィルタ:資産間や状態量間の相関を共分散行列で扱います
本記事の内容
- 分散から共分散、そして共分散行列への一般化の流れ
- 共分散行列の定義と各成分の意味、相関行列との関係
- 対称性・半正定値性の証明と、固有値分解=主成分方向という見方
- 共分散楕円(信頼楕円)の幾何と、標本共分散行列の推定・高次元での困難
- 多変量ガウス分布での役割と、numpyによるスクラッチ実装
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
分散から共分散行列へ:なぜ「行列」が必要なのか
まず、1変数のデータを思い出しましょう。テストの点数のような1次元のデータでは、平均のまわりにどれくらい散らばっているかを分散 $\sigma^2 = E[(X-\mu)^2]$ で測ります。これはデータの「広がり」を表す1つの数値です。
ところがデータが2変数になると、話は一気に豊かになります。身長 $X$ と体重 $Y$ では、それぞれの広がり(分散)だけでなく、「$X$ が大きいとき $Y$ も大きくなりやすいか」という連動の度合いも重要な情報になります。この連動を測るのが共分散 $\mathrm{Cov}(X,Y) = E[(X-\mu_X)(Y-\mu_Y)]$ です。
変数が $d$ 個に増えると、分散が $d$ 個、共分散が変数ペアの数だけ生じます。これらをバラバラに持っていては扱いにくいので、1つの正方行列に並べて管理するというのが共分散行列のアイデアです。下の図は、この「分散 → 共分散 → 共分散行列」という一般化の流れを示しています。

左は1変数の分散(平均まわりの広がり)、中央は2変数で右肩上がりに散らばる正の共分散、右はそれらを $d \times d$ の行列にまとめた姿です。対角に各変数の分散が、非対角に変数ペアの共分散が並ぶ点を押さえておきましょう。この行列1つで、データの広がりと向きの情報がすべて表現されます。
では、この行列を正式に定義していきましょう。
共分散行列の定義と各成分の意味
$d$ 次元の確率ベクトル $\bm{X} = (X_1, X_2, \dots, X_d)^\top$ を考えます。各成分が確率変数で、その平均ベクトルを $\bm{\mu} = E[\bm{X}]$ と書きます。共分散行列が表現したいのは「平均からのずれ $\bm{X}-\bm{\mu}$ が、各方向にどう広がり、どう相関しているか」です。この直感を、ずれベクトルとその転置の積の期待値として一気に書いたものが定義式です。
$$ \Sigma = \mathrm{Cov}[\bm{X}] = E\!\left[(\bm{X}-\bm{\mu})(\bm{X}-\bm{\mu})^\top\right] $$
ここで $(\bm{X}-\bm{\mu})$ は縦ベクトル($d \times 1$)、$(\bm{X}-\bm{\mu})^\top$ は横ベクトル($1 \times d$)なので、その積は $d \times d$ の行列になります。これに期待値をとった結果が共分散行列 $\Sigma$ です。
成分ごとに書き下すと、$(i,j)$ 成分は次のようになります。
$$ \Sigma_{ij} = E\!\left[(X_i – \mu_i)(X_j – \mu_j)\right] = \mathrm{Cov}(X_i, X_j) $$
ここで各成分の意味を整理しておきましょう。
- 対角成分 $\Sigma_{ii}$:$i=j$ のとき $\Sigma_{ii} = E[(X_i-\mu_i)^2] = \mathrm{Var}(X_i)$ となり、各変数自身の分散です。つまり対角を見れば、各方向の「広がりの大きさ」がわかります。
- 非対角成分 $\Sigma_{ij}\,(i \neq j)$:変数 $X_i$ と $X_j$ の共分散です。正なら一緒に大きくなる傾向、負なら片方が大きいともう片方は小さくなる傾向、ゼロなら線形な連動がないことを意味します。
共分散の符号がデータの広がり方にどう現れるかを、実際の散布図で見てみましょう。

左は正の共分散で右肩上がりに、中央は無相関で円形に、右は負の共分散で右肩下がりに散らばっています。共分散の符号は雲の「傾きの向き」を、絶対値の大きさは「楕円のつぶれ具合(細長さ)」を決めることが読み取れます。
ここで自然な疑問が生まれます。共分散の値は変数の単位(身長ならcm、体重ならkg)に依存して大きく変わってしまいます。単位に左右されずに「連動の強さ」だけを比べるにはどうすればよいのでしょうか。
相関行列との関係:標準化で単位をなくす
共分散の値は変数のスケールに比例して変わります。身長をcmからmに変えるだけで共分散は100分の1になってしまい、「連動が弱くなった」と誤解しかねません。そこで、各変数を標準偏差で割って無次元化してから連動を測るのが相関係数です。共分散行列に対して同じことを各成分に施したものが相関行列 $R$ です。
各変数の標準偏差を $\sigma_i = \sqrt{\Sigma_{ii}}$ とすると、相関行列の成分は次のように定義されます。
$$ R_{ij} = \frac{\Sigma_{ij}}{\sigma_i \sigma_j} = \frac{\mathrm{Cov}(X_i, X_j)}{\sqrt{\mathrm{Var}(X_i)}\sqrt{\mathrm{Var}(X_j)}} $$
対角成分は $R_{ii} = \Sigma_{ii}/\sigma_i^2 = 1$ となり、すべて1になります。非対角成分は必ず $-1 \le R_{ij} \le 1$ の範囲に収まります(これはコーシー・シュワルツの不等式から従います)。行列でまとめて書くと、対角に標準偏差を並べた対角行列 $\bm{D} = \mathrm{diag}(\sigma_1, \dots, \sigma_d)$ を使って次の関係になります。
$$ R = \bm{D}^{-1}\, \Sigma\, \bm{D}^{-1}, \qquad \Sigma = \bm{D}\, R\, \bm{D} $$
つまり相関行列は「共分散行列を各変数の標準偏差で標準化したもの」であり、逆に共分散行列は「相関行列に各変数のスケールを戻したもの」です。両者を並べて見比べてみましょう。

左の共分散行列は対角に各変数の分散(4.0, 3.0, 1.0)が並び、スケールがバラバラです。右の相関行列は対角がすべて1.0に揃い、非対角は $-1$ から $1$ の範囲に収まっています。たとえば $X_1$ と $X_3$ の共分散 $-1.0$ は、標準化すると相関 $-0.50$ となり、「単位に依存しない連動の強さ」として比較できるようになります。
相関行列が便利なのは比較のためですが、データの幾何学的な構造を理解するには共分散行列そのものの性質を調べる必要があります。次は、共分散行列が必ず持つ2つの数学的性質を見ていきます。
共分散行列の性質:対称性と半正定値性
共分散行列はどんなデータから作っても、必ず2つの重要な性質を持ちます。対称行列であることと、半正定値(positive semi-definite)であることです。この2つは、後で固有値分解や信頼楕円を考えるときの土台になります。
対称性の証明
対称性 $\Sigma_{ij} = \Sigma_{ji}$ は、共分散の定義からほぼ即座に従います。期待値の中身を見ると、
$$ \Sigma_{ij} = E[(X_i-\mu_i)(X_j-\mu_j)] = E[(X_j-\mu_j)(X_i-\mu_i)] = \Sigma_{ji} $$
スカラー同士の積は順序を入れ替えても同じなので、$(i,j)$ 成分と $(j,i)$ 成分は等しくなります。したがって $\Sigma = \Sigma^\top$ が成り立ちます。対称行列であることから、共分散行列は必ず実数の固有値を持ち、固有ベクトルを直交させて取れる(スペクトル分解できる)ことが保証されます。これは後の固有値分解の節で効いてきます。
半正定値性の証明
半正定値とは、任意のベクトル $\bm{a} \in \mathbb{R}^d$ に対して $\bm{a}^\top \Sigma \bm{a} \ge 0$ が成り立つことです。これを示すには、$\bm{a}^\top \Sigma \bm{a}$ が「ある実数の分散」になっていることに気づくのが鍵です。
ゴールは $\bm{a}^\top \Sigma \bm{a} \ge 0$ を示すことです。まず定義を代入して、期待値の外にある $\bm{a}$ を期待値の中に入れます。
$$ \begin{align} \bm{a}^\top \Sigma \bm{a} &= \bm{a}^\top E[(\bm{X}-\bm{\mu})(\bm{X}-\bm{\mu})^\top] \bm{a} \\ &= E\!\left[\bm{a}^\top (\bm{X}-\bm{\mu})(\bm{X}-\bm{\mu})^\top \bm{a}\right] \end{align} $$
$\bm{a}$ は定数なので期待値の中に入れられます。ここでスカラー $Y = \bm{a}^\top(\bm{X}-\bm{\mu})$ を導入すると、$(\bm{X}-\bm{\mu})^\top \bm{a} = Y$ でもあるので、中身は $Y \cdot Y = Y^2$ になります。
$$ \bm{a}^\top \Sigma \bm{a} = E[Y^2] = E\!\left[\left(\bm{a}^\top(\bm{X}-\bm{\mu})\right)^2\right] \ge 0 $$
実数を2乗したものの期待値なので、必ず0以上です。これで半正定値性が示せました。
この証明には深い意味があります。$\bm{a}^\top \Sigma \bm{a}$ は、データを方向 $\bm{a}$ に射影したときの分散そのものなのです。「どんな方向に射影しても分散は負にならない」——これが半正定値性の直感的な中身です。図で確かめてみましょう。

横軸は射影する方向の角度、縦軸はその方向の分散 $\bm{a}^\top \Sigma \bm{a}$($\bm{a}$ は単位ベクトル)です。曲線はゼロの下限(赤破線)を一度も下回らず、最大値はちょうど最大固有値、最小値は最小固有値に一致しています。射影分散が固有値の間を動くというこの事実が、次の固有値分解の節へとつながります。
固有値分解:共分散行列が教えるデータの「主軸」
半正定値性の図から、「分散が最大になる方向」と「最小になる方向」があることがわかりました。これらの特別な方向こそが、共分散行列の固有ベクトルであり、その方向の分散が固有値です。共分散行列は対称なので、スペクトル分解できます。
$$ \Sigma = \bm{U} \Lambda \bm{U}^\top = \sum_{k=1}^{d} \lambda_k \bm{u}_k \bm{u}_k^\top $$
ここで $\bm{U} = [\bm{u}_1, \dots, \bm{u}_d]$ は固有ベクトルを列に並べた直交行列、$\Lambda = \mathrm{diag}(\lambda_1, \dots, \lambda_d)$ は固有値を並べた対角行列です。半正定値性から、すべての固有値は $\lambda_k \ge 0$ です。
この分解が意味するのは次のことです。固有ベクトル $\bm{u}_k$ はデータの主軸(principal axis)の方向を表し、対応する固有値 $\lambda_k$ はその軸方向の分散を表します。実際、方向 $\bm{u}_k$ に射影したときの分散は、
$$ \bm{u}_k^\top \Sigma \bm{u}_k = \bm{u}_k^\top (\lambda_k \bm{u}_k) = \lambda_k $$
となり、固有値そのものになります(固有ベクトルは単位長 $\|\bm{u}_k\|=1$ かつ互いに直交するため)。最大固有値の方向が「最も散らばっている方向」であり、これがまさに主成分分析(PCA)の第1主成分です。共分散行列の固有値分解は、PCAそのものなのです。
データの雲と固有ベクトルの関係を図示してみましょう。

2本の矢印が固有ベクトル(主軸)で、長さは $\sqrt{\lambda_k}$(その方向の標準偏差)に比例させています。最大固有値の方向(赤)はデータが最も伸びている向きと一致し、最小固有値の方向(緑)はそれに直交しています。データの広がりの形が、固有値と固有ベクトルだけで完全に記述できることが読み取れます。PCAの詳しい導出は主成分分析(PCA)の理論と導出を参照してください。
固有ベクトルが楕円の軸であることがわかったので、次はその「楕円」を正式に描いてみます。これが信頼楕円です。
共分散楕円(信頼楕円)の幾何
共分散行列の最も美しい可視化が共分散楕円(信頼楕円)です。多変量ガウス分布の等密度線は楕円になり、その楕円の形・向き・大きさはすべて共分散行列で決まります。具体的には、次の式を満たす点 $\bm{x}$ の集合が楕円になります。
$$ (\bm{x}-\bm{\mu})^\top \Sigma^{-1} (\bm{x}-\bm{\mu}) = c^2 $$
左辺はちょうどマハラノビス距離の2乗です。$c=1, 2, 3$ とすると、平均から「1シグマ、2シグマ、3シグマ」に相当する楕円が描けます。この楕円の幾何は固有値分解で完全に説明できます。
- 楕円の軸の向き:固有ベクトル $\bm{u}_k$ の方向(主軸)
- 各軸の半径:$c\sqrt{\lambda_k}$(固有値の平方根に比例)
- 楕円の面積:$\pi c^2 \sqrt{\lambda_1 \lambda_2} = \pi c^2 \sqrt{\det \Sigma}$ に比例
つまり、長い軸は分散の大きい方向(大きい固有値)、短い軸は分散の小さい方向(小さい固有値)に対応します。相関が強いほど楕円は細長く傾き、無相関なら軸に平行な楕円(円に近い形)になります。相関係数 $\rho$ を変えながら楕円の形がどう変わるかを見てみましょう。

$\rho=0$ では円形、$\rho$ が大きくなるほど右肩上がりに細長くなり、$\rho=-0.7$ では右肩下がりに傾きます。相関の符号が傾きの向きを、相関の絶対値が細長さを決めるという、共分散行列の幾何が一目でわかります。この楕円は、後で見る多変量ガウス分布の等高線そのものでもあります。
ここまでは「真の」共分散行列 $\Sigma$ を既知として扱ってきました。しかし現実には、$\Sigma$ は手元のデータから推定しなければなりません。次はその推定の話に移ります。
標本共分散行列の推定と不偏性
現実のデータ解析では、真の共分散行列 $\Sigma$ は未知です。$n$ 個の観測 $\bm{x}_1, \dots, \bm{x}_n$ から推定する必要があります。まず標本平均を $\bar{\bm{x}} = \frac{1}{n}\sum_{i=1}^n \bm{x}_i$ で求め、平均からのずれの積を平均したものが標本共分散行列です。
$$ \bm{S} = \frac{1}{n-1}\sum_{i=1}^{n} (\bm{x}_i – \bar{\bm{x}})(\bm{x}_i – \bar{\bm{x}})^\top $$
ここで気になるのは、なぜ $n$ ではなく $n-1$ で割るのかという点です。これは不偏性を保証するための補正です。標本平均 $\bar{\bm{x}}$ を使う時点で、ずれの2乗和は真の平均を使う場合より系統的に小さくなってしまいます(標本平均はデータに最もフィットする点だからです)。$n-1$ で割ることで $E[\bm{S}] = \Sigma$ が成り立ち、推定量が真値を平均的に過小評価しなくなります。この $n-1$ をベッセル補正と呼びます。
推定である以上、$\bm{S}$ はデータのサンプルごとに揺らぎます。標本数 $n$ が増えると、この揺らぎはどう変わるでしょうか。

横軸は推定誤差(真の $\Sigma$ とのフロベニウスノルム差)、ヒストグラムはそのばらつきです。$n=20$ では誤差が大きく広く散らばっていますが、$n=100$、$n=1000$ と増えるにつれて誤差は小さく、真値のまわりに集中していきます。標本共分散行列は一致推定量であり、データが増えれば真の共分散行列に収束することが読み取れます。
ところが、変数の数 $d$ がサンプル数 $n$ に対して大きいと、この推定は深刻な問題に直面します。
次元 > サンプルの困難と収縮推定
ゲノムデータや画像特徴のように、変数の数 $d$ がサンプル数 $n$ を超える「高次元小標本」の状況では、標本共分散行列が壊れます。なぜなら、$\bm{S}$ のランクは高々 $n-1$ なので、$d > n-1$ のとき $\bm{S}$ は特異(ランク落ち)になり、ゼロ固有値を持つからです。ゼロ固有値があると逆行列 $\bm{S}^{-1}$ が存在せず、マハラノビス距離や多変量ガウスの密度が計算できません。さらに、非ゼロの固有値も真値から大きくずれ、大きい固有値は過大に、小さい固有値は過小に推定される傾向があります。
この問題を緩和する代表的な手法が収縮推定(shrinkage estimation)です。標本共分散行列を、安定した構造を持つターゲット行列(たとえば対角行列)と混ぜ合わせます。
$$ \bm{S}_{\text{shrink}} = (1-\lambda)\,\bm{S} + \lambda\, \bm{T}, \qquad 0 \le \lambda \le 1 $$
ここで $\bm{T}$ は単位行列のスカラー倍 $\frac{\mathrm{tr}(\bm{S})}{d}\bm{I}$ などを使います。混合比 $\lambda$ を大きくするほど、固有値が中央に引き寄せられて極端な値が抑えられ、行列が正則(逆行列が存在)になります。Ledoit-Wolf法などは、最適な $\lambda$ をデータから自動的に決める手法として広く使われています。

左は $p=50 > n=30$ の標本共分散の固有値で、真値(1.0、破線)から大きく暴れ、多数のゼロ固有値(特異)を持ちます。右では収縮推定により固有値が真値に向かって引き締められ、ゼロ固有値も解消されています。高次元では「そのまま推定する」のではなく、構造を仮定して安定化させる必要があることが読み取れます。
ここまでで共分散行列の推定まで見てきました。最後に、共分散行列が確率分布の中でどう働くか——多変量ガウス分布における役割を確認しましょう。
多変量ガウス分布における役割
共分散行列が最も鮮やかに活躍するのが多変量ガウス分布です。$d$ 次元の多変量ガウス分布の確率密度は次の式で与えられます。
$$ p(\bm{x}) = \frac{1}{(2\pi)^{d/2}\,|\Sigma|^{1/2}} \exp\!\left(-\frac{1}{2}(\bm{x}-\bm{\mu})^\top \Sigma^{-1} (\bm{x}-\bm{\mu})\right) $$
この式の中で共分散行列は2つの役割を担っています。指数の中の二次形式 $(\bm{x}-\bm{\mu})^\top \Sigma^{-1}(\bm{x}-\bm{\mu})$ はまさにマハラノビス距離の2乗で、平均からの「データの形を考慮した距離」を測っています。これが等しい点の集合が、先ほど見た共分散楕円です。一方、正規化定数の $|\Sigma|^{1/2}$(行列式の平方根)は分布の「体積」を調整し、確率の総和を1にしています。
つまり、共分散行列の逆行列 $\Sigma^{-1}$ が等高線の形(向きと細長さ)を決め、行列式 $|\Sigma|$ が全体の広がりの大きさを決めるわけです。

色は確率密度、白い等高線はマハラノビス距離が一定(1、2、3)の点を結んだ線です。等密度線がそのまま共分散楕円になっており、$\Sigma^{-1}$ が距離の「ものさし」を、楕円の形が密度の地形を決めていることがわかります。マハラノビス距離の幾何についてはマハラノビス距離の幾何学的な意味を徹底的に理解するで詳しく解説しています。
理論が一通り出そろったので、これらをnumpyで確かめてみましょう。
Pythonでのスクラッチ実装
ここまでの理論を、numpyで一から実装して確認します。標本共分散行列を定義通りに計算し、numpyのnp.covと一致するか、そして固有値分解で得た固有ベクトルがデータの主軸になっているかを検証します。
まず、既知の共分散行列を持つデータを生成し、標本共分散行列をスクラッチで計算します。
import numpy as np
rng = np.random.default_rng(42)
# 真の平均と共分散行列
mu_true = np.array([1.0, -2.0])
Sigma_true = np.array([[2.0, 1.2],
[1.2, 1.0]])
# 多変量ガウスからサンプリング
n = 5000
X = rng.multivariate_normal(mu_true, Sigma_true, size=n) # 形状 (n, 2)
# 標本共分散行列をスクラッチで計算(n-1で割る = 不偏推定)
x_bar = X.mean(axis=0)
diff = X - x_bar # 各点の平均からのずれ
S_scratch = (diff.T @ diff) / (n - 1) # (d, d) 行列
print("スクラッチの標本共分散行列:\n", np.round(S_scratch, 3))
print("np.cov の結果:\n", np.round(np.cov(X, rowvar=False, ddof=1), 3))
print("真の共分散行列:\n", Sigma_true)
実行すると、スクラッチ計算とnp.covの結果は完全に一致し、どちらも真の共分散行列 [[2.0, 1.2], [1.2, 1.0]] に近い値(おおよそ [[2.0, 1.2], [1.2, 1.0]] 前後)になります。$n=5000$ と十分なサンプルがあるため、推定誤差は小さく抑えられています。定義式 $\bm{S} = \frac{1}{n-1}\sum(\bm{x}_i-\bar{\bm{x}})(\bm{x}_i-\bar{\bm{x}})^\top$ がそのまま行列積 diff.T @ diff で書けることも確認できました。
次に、標本共分散行列を固有値分解し、対称性・半正定値性・主軸の方向を検証します。
# 固有値分解(対称行列なので eigh を使う)
eigvals, eigvecs = np.linalg.eigh(S_scratch)
order = eigvals.argsort()[::-1] # 大きい順に並べ替え
eigvals, eigvecs = eigvals[order], eigvecs[:, order]
print("固有値:", np.round(eigvals, 3)) # すべて非負 → 半正定値
print("対称性の確認 |S - S^T|:", np.abs(S_scratch - S_scratch.T).max())
# 各固有ベクトル方向に射影した分散が固有値に一致するか
for k in range(2):
proj_var = eigvecs[:, k] @ S_scratch @ eigvecs[:, k]
print(f"第{k+1}主軸の射影分散={proj_var:.3f}, 固有値={eigvals[k]:.3f}")
# 相関行列への変換
D_inv = np.diag(1.0 / np.sqrt(np.diag(S_scratch)))
R = D_inv @ S_scratch @ D_inv
print("相関行列:\n", np.round(R, 3))
出力から3つのことが確認できます。第一に、固有値はすべて正で、半正定値性が成り立っています。第二に、各固有ベクトル方向に射影した分散が対応する固有値とぴったり一致し、「固有値=主軸方向の分散」という理論が裏付けられます。第三に、相関行列は対角がすべて1.0になり、非対角は $\Sigma_{12}/(\sigma_1\sigma_2) = 1.2/\sqrt{2.0 \times 1.0} \approx 0.849$ という標準化された相関値になります。理論で導いたすべての関係が、数値計算でも確認できました。
最後に、信頼楕円を描いて固有ベクトルが主軸になっていることを可視化します。
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
fig, ax = plt.subplots(figsize=(7, 6))
ax.scatter(X[:, 0], X[:, 1], s=5, alpha=0.2, color="#2c7fb8", label="データ点")
# 2シグマの信頼楕円を描く
angle = np.degrees(np.arctan2(eigvecs[1, 0], eigvecs[0, 0]))
width, height = 2 * 2.0 * np.sqrt(eigvals) # 2シグマ → 半径 2*sqrt(λ)
ell = Ellipse(xy=x_bar, width=width, height=height, angle=angle,
edgecolor="#e6550d", facecolor="none", lw=2.5, label="2σ 信頼楕円")
ax.add_patch(ell)
# 固有ベクトル(主軸)を矢印で描く
for k in range(2):
v = eigvecs[:, k] * 2 * np.sqrt(eigvals[k])
ax.annotate("", xy=x_bar + v, xytext=x_bar,
arrowprops=dict(arrowstyle="->", color="red", lw=2))
ax.set_xlabel("$X_1$"); ax.set_ylabel("$X_2$")
ax.set_title("データの雲・固有ベクトル・信頼楕円")
ax.set_aspect("equal"); ax.legend()
plt.tight_layout(); plt.show()
このグラフでは、データの雲が固有ベクトルの方向に沿って伸び、2シグマの信頼楕円がデータのおよそ大部分(2次元ガウスでは約86%)を囲みます。矢印(固有ベクトル)が楕円の長軸・短軸とぴったり一致しており、「共分散行列の固有値分解がデータの主軸を与える」という本記事の中心的なメッセージが視覚的にも確認できます。
まとめ
本記事では、共分散行列について基礎から実装まで一気通貫で解説しました。
- 定義と意味:共分散行列 $\Sigma = E[(\bm{X}-\bm{\mu})(\bm{X}-\bm{\mu})^\top]$ は、対角に各変数の分散、非対角に変数ペアの共分散を並べた行列で、データの広がりと向きを完全に記述します
- 相関行列との関係:各変数を標準偏差で割って標準化すると $R = \bm{D}^{-1}\Sigma\bm{D}^{-1}$ となり、単位に依存しない連動の強さが得られます
- 対称・半正定値性:共分散行列は必ず対称かつ半正定値で、$\bm{a}^\top\Sigma\bm{a}$ が「方向 $\bm{a}$ への射影分散」になることがその本質です
- 固有値分解=主成分方向:固有ベクトルがデータの主軸、固有値がその方向の分散で、これがPCAそのものです
- 共分散楕円・推定:信頼楕円の形は固有値分解で決まり、標本共分散行列は $n-1$ で割って不偏推定し、高次元では収縮推定で安定化します
- 多変量ガウス:密度の指数にマハラノビス距離($\Sigma^{-1}$)が、正規化に行列式 $|\Sigma|$ が現れます
共分散行列は、確率・統計と線形代数が交わる結節点です。ここを足がかりに、次のトピックへ進むと理解が一気に広がります。
次のステップとして、以下の記事も参考にしてください。