多変量正規分布(ガウス分布)は、機械学習や統計学の分野で本当に数多く登場する確率分布です。ガウス過程、カルマンフィルタ、ベイズ推定、主成分分析など、多くの手法の基盤となっています。
今回は、多変量正規分布の定義から性質、幾何学的特徴までを体系的にまとめます。
本記事の内容
- 多変量正規分布の定義と確率密度関数
- 共分散行列の幾何学的意味
- 固有値分解と等確率密度楕円
- Python での可視化
前提知識
- 線形代数の基本(行列、固有値分解、行列式)
- 1次元正規分布の基本
多変量正規分布の定義
$D$ 次元の確率変数 $\bm{x} = (x_1, x_2, \dots, x_D)^T$ が多変量正規分布に従うとき、その確率密度関数は、
$$ \begin{equation} \mathcal{N}(\bm{x}|\bm{\mu}, \bm{\Sigma}) = \frac{1}{\sqrt{(2\pi)^D |\bm{\Sigma}|}} \exp\left(-\frac{1}{2}(\bm{x} – \bm{\mu})^T \bm{\Sigma}^{-1} (\bm{x} – \bm{\mu})\right) \end{equation} $$
ここで、
- $\bm{\mu} \in \mathbb{R}^D$:平均ベクトル
- $\bm{\Sigma} \in \mathbb{R}^{D \times D}$:共分散行列(対称正定値行列)
- $|\bm{\Sigma}|$:$\bm{\Sigma}$ の行列式
指数部分に現れる二次形式 $(\bm{x} – \bm{\mu})^T \bm{\Sigma}^{-1} (\bm{x} – \bm{\mu})$ はマハラノビス距離の二乗です。
共分散行列の意味
共分散行列 $\bm{\Sigma}$ の $(i, j)$ 要素は、$x_i$ と $x_j$ の共分散です。
$$ \Sigma_{ij} = E[(x_i – \mu_i)(x_j – \mu_j)] = \text{Cov}(x_i, x_j) $$
- 対角要素 $\Sigma_{ii}$:各変数の分散
- 非対角要素 $\Sigma_{ij}$ ($i \neq j$):変数間の共分散
共分散行列は対称行列であり、$\bm{\Sigma} = \bm{\Sigma}^T$ が成り立ちます。
特殊な場合
独立な場合: $\bm{\Sigma}$ が対角行列のとき、各変数は独立で、同時分布は1次元正規分布の積になります。
$$ \mathcal{N}(\bm{x}|\bm{\mu}, \text{diag}(\sigma_1^2, \dots, \sigma_D^2)) = \prod_{d=1}^{D} \mathcal{N}(x_d|\mu_d, \sigma_d^2) $$
等方性: $\bm{\Sigma} = \sigma^2 \bm{I}$ のとき、すべての方向に同じ分散を持ちます。
固有値分解と等確率密度楕円
共分散行列 $\bm{\Sigma}$ を固有値分解すると、
$$ \bm{\Sigma} = \bm{U} \bm{\Lambda} \bm{U}^T $$
等確率密度面は楕円体になり、
- 楕円の主軸方向:固有ベクトル $\bm{u}_i$ の方向
- 楕円の半径:$\sqrt{\lambda_i}$ に比例(固有値の平方根)
固有値が大きい方向ほどデータの広がりが大きく、小さい方向ほど広がりが小さいことを意味します。
多変量正規分布の重要な性質
| 性質 | 内容 |
|---|---|
| 周辺分布 | 任意の部分ベクトルの周辺分布もガウス分布 |
| 条件付き分布 | 条件付き分布もガウス分布 |
| 線形変換 | $\bm{y} = \bm{A}\bm{x} + \bm{b}$ もガウス分布 |
| 再生性 | 独立なガウス変数の和もガウス分布 |
| 最大エントロピー | 平均と分散が固定のとき、エントロピーを最大化する分布 |
Python での可視化
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal
from matplotlib.patches import Ellipse
fig, axes = plt.subplots(1, 3, figsize=(16, 5))
# 3種類の共分散行列
params = [
{"mu": [0, 0], "Sigma": [[1, 0], [0, 1]], "title": "Independent\n(Sigma = I)"},
{"mu": [0, 0], "Sigma": [[2, 1.2], [1.2, 1]], "title": "Positive Correlation\n(rho > 0)"},
{"mu": [0, 0], "Sigma": [[1, -0.8], [-0.8, 2]], "title": "Negative Correlation\n(rho < 0)"},
]
for idx, p in enumerate(params):
ax = axes[idx]
mu = np.array(p["mu"])
Sigma = np.array(p["Sigma"])
# サンプル生成
np.random.seed(42)
samples = np.random.multivariate_normal(mu, Sigma, 500)
# 等高線
x_range = np.linspace(-5, 5, 200)
y_range = np.linspace(-5, 5, 200)
X, Y = np.meshgrid(x_range, y_range)
pos = np.dstack((X, Y))
rv = multivariate_normal(mu, Sigma)
ax.contourf(X, Y, rv.pdf(pos), levels=15, cmap='Blues', alpha=0.6)
ax.scatter(samples[:, 0], samples[:, 1], s=5, alpha=0.3, color='navy')
# 固有値・固有ベクトル
eigenvalues, eigenvectors = np.linalg.eigh(Sigma)
angle = np.degrees(np.arctan2(eigenvectors[1, 1], eigenvectors[0, 1]))
for k in [1, 2]:
ell = Ellipse(xy=mu, width=2*k*np.sqrt(eigenvalues[1]),
height=2*k*np.sqrt(eigenvalues[0]),
angle=angle, fill=False, color='red', linewidth=1.5, linestyle='--')
ax.add_patch(ell)
# 主軸
for i in range(2):
ax.arrow(mu[0], mu[1],
eigenvectors[0, i]*np.sqrt(eigenvalues[i]),
eigenvectors[1, i]*np.sqrt(eigenvalues[i]),
head_width=0.15, head_length=0.1, fc='red', ec='red', alpha=0.7)
ax.set_xlabel('x1', fontsize=11)
ax.set_ylabel('x2', fontsize=11)
ax.set_title(p["title"], fontsize=12)
ax.set_aspect('equal')
ax.set_xlim(-5, 5)
ax.set_ylim(-5, 5)
ax.grid(True, alpha=0.3)
plt.suptitle('Multivariate Normal Distributions', fontsize=14)
plt.tight_layout()
plt.show()
3つのグラフでは、共分散行列の構造がデータの分布形状にどう影響するかが確認できます。独立な場合は円形、正の相関がある場合は右上がりの楕円、負の相関がある場合は右下がりの楕円になります。赤い矢印は固有ベクトルの方向を示しています。
まとめ
本記事では、多変量正規分布の性質と特徴について解説しました。
- 多変量正規分布は平均ベクトルと共分散行列で完全に特徴づけられる
- 共分散行列の対角要素は各変数の分散、非対角要素は変数間の共分散を表す
- 固有値分解により、等確率密度面が楕円体として解釈できる
- 周辺分布、条件付き分布、線形変換後の分布もすべてガウス分布になる
次のステップとして、以下の記事も参考にしてください。