「2次元ガウス分布ってどんな形?」「共分散行列の数字を変えると分布はどう変わるの?」
こう聞かれたとき、すらすら答えられますか? 1次元の正規分布は直感的に理解しやすいのですが、2次元・3次元になったとたんに式が複雑に見えて、「よくわからないまま使っている」という人は少なくありません。
多変量正規分布を腹落ちさせると、機械学習で幅広く使えるようになります。ガウス過程回帰(時系列の予測)、カルマンフィルタ(センサーデータの統合)、Variational Autoencoder(画像や文章の生成)、異常検知——これらはすべて多変量正規分布を核として動いています。つまり、ここを押さえるだけで多くの手法の見通しが一気に良くなります。
本記事では次のことを解説します。
- 多変量正規分布(多変量ガウス分布)の定義と各項の意味
- 平均ベクトル $\bm{\mu}$・共分散行列 $\bm{\Sigma}$ が分布の形をどう決めるか
- マハラノビス距離の幾何学的な意味
- 等高線が楕円になる理由(固有値・固有ベクトルとの関係)
- 2次元・3次元ガウス分布の可視化
- 相関係数と楕円の傾きの関係
- Cholesky分解を使ったサンプリング

1次元(左)では「山型の曲線」でしたが、2次元(中)になると「等高線が楕円」に、3次元(右)になると「楕円体の雲」になります。次元が増えても本質的な構造は同じです。この図を念頭に置きながら読み進めてください。
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。

多変量正規分布とは?(まず直感で答える)
一言で言うと、「複数の変数を同時に扱う正規分布」です。
温度センサーと圧力センサーの2つを同時に計測するとします。それぞれを別々に1次元の正規分布でモデル化することはできますが、そうすると「温度が高いとき圧力も高くなりやすい」という変数間の相関を無視することになります。多変量正規分布は、この相関まで含めて複数変数を一つの確率分布で表します。
数式で書くと、$d$ 次元の確率変数ベクトル $\bm{x} = (x_1, x_2, \ldots, x_d)^\top$ が従う分布です。パラメータは2つ、平均ベクトル $\bm{\mu}$(分布の中心)と共分散行列 $\bm{\Sigma}$(分布の広がりと向き)です。この2つを指定すれば分布が完全に決まります。
1次元の正規分布 $\mathcal{N}(\mu, \sigma^2)$ では「平均」と「分散」という2つの数値でした。多変量への拡張は「数値 → ベクトル」「数値 → 行列」という置き換えとして理解できます。この対応を頭に入れておくと、以後の式がすっきり見えます。
ここで自然な疑問が湧きます——「なぜ式に行列の逆行列や行列式が出てくるのか?」。次のセクションで1次元の式から丁寧に多次元へ拡張しながら、それぞれの項の意味を説明します。
1次元正規分布の復習
まず1次元の正規分布の確率密度関数を確認します。
$$ p(x) = \frac{1}{\sqrt{2\pi \sigma^2}} \exp\!\left(-\frac{(x – \mu)^2}{2\sigma^2}\right) $$
前置き因子 $\frac{1}{\sqrt{2\pi \sigma^2}}$ は「面積が1になるよう正規化するためのスケール係数」です。指数部分 $-\frac{(x-\mu)^2}{2\sigma^2}$ が分布の形を決めます。
指数部分を見ると、$(x – \mu)^2 / \sigma^2$ という形になっています。これは「平均からの距離 $(x – \mu)$ を分散 $\sigma^2$ でスケーリングしたもの」と読めます。分散が大きいほど山は広く、小さいほど山は鋭くなります。
次の図で、1次元(左)と2次元(右)でパラメータの役割がどう対応するかを比較してみます。

左の1次元では、$\mu$ を変えると山の中心が移動し、$\sigma^2$ を変えると山の幅が変わります。右の2次元では、$\bm{\mu}$ を変えると等高線の中心が移動し、$\bm{\Sigma}$ を変えると楕円の大きさと傾きが変わります。対応関係は明快です。
1次元の $\sigma^2$(スカラー)が、多次元では $\bm{\Sigma}$(行列)に置き換わる——これが多変量正規分布を理解する出発点です。では次に、この「置き換え」を式として書き下してみましょう。
確率密度関数 $\mathcal{N}(\bm{x};\bm{\mu},\bm{\Sigma})$ の定義と各項の意味
$d$ 次元の多変量正規分布の確率密度関数はこうなります。
$$ \mathcal{N}(\bm{x};\bm{\mu},\bm{\Sigma}) = \frac{1}{(2\pi)^{d/2} |\bm{\Sigma}|^{1/2}} \exp\!\left(-\frac{1}{2}(\bm{x}-\bm{\mu})^\top \bm{\Sigma}^{-1} (\bm{x}-\bm{\mu})\right) $$
一見複雑ですが、1次元の式と並べて比較すると構造がよく見えます。
| 部分 | 1次元 | $d$ 次元 |
|---|---|---|
| 正規化係数 | $(2\pi\sigma^2)^{-1/2}$ | $(2\pi)^{-d/2}\|\bm{\Sigma}\|^{-1/2}$ |
| 指数部(二乗距離) | $(x-\mu)^2/\sigma^2$ | $(\bm{x}-\bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x}-\bm{\mu})$ |
正規化係数 $\frac{1}{(2\pi)^{d/2} |\bm{\Sigma}|^{1/2}}$
$(2\pi)^{d/2}$ は次元数 $d$ に応じたスケーリングです。1次元なら $\sqrt{2\pi}$、2次元なら $2\pi$、と次元が増えるにつれて大きくなります。
$|\bm{\Sigma}|$(行列式)は、共分散行列が定義する「楕円体の体積」に相当します。$|\bm{\Sigma}|$ が大きいほど分布が広く、正規化係数は小さくなります(山のピークが低くなる)。$\sigma^2$ が1次元での「幅の二乗」だったのと同じ役割を、$|\bm{\Sigma}|$ が多次元で担っています。
指数部 $(\bm{x}-\bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x}-\bm{\mu})$
この部分がすべての核心です。1次元の $(x-\mu)^2/\sigma^2$ を行列・ベクトルで書き直したものです。
- $(\bm{x}-\bm{\mu})$: 点 $\bm{x}$ から平均 $\bm{\mu}$ への差ベクトル($d$ 次元)
- $\bm{\Sigma}^{-1}$: 共分散行列の逆行列。この行列を挟んで「計量」を変換します
- 全体がスカラー: $\bm{a}^\top \bm{B} \bm{a}$ は二次形式と呼ばれ、スカラー値になります
この二次形式を $\Delta^2$ と書いてマハラノビス距離の二乗と呼びます。
$$ \Delta^2 = (\bm{x}-\bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x}-\bm{\mu}) $$
多変量正規分布の確率密度は、この $\Delta^2$ が同じ点で等しくなります。つまり「等高線 = $\Delta^2$ が一定の点の集合」です。これが楕円になる理由をこの後詳しく見ていきます。
平均ベクトル $\bm{\mu}$ — 分布の「中心」
$$ \bm{\mu} = \begin{pmatrix} \mu_1 \\ \mu_2 \\ \vdots \\ \mu_d \end{pmatrix} $$
平均ベクトルは「分布が最も密集している点」です。1次元での $\mu$(単一の数値)の直接の拡張です。
多変量正規分布 $\mathcal{N}(\bm{x};\bm{\mu},\bm{\Sigma})$ において、$\bm{\mu}$ は分布を $d$ 次元空間のどこに置くかを決めます。$\bm{\Sigma}$ を固定したまま $\bm{\mu}$ だけを変えると、分布の形は変わらず位置だけが移動します——ちょうど1次元で「平均を変えると山が左右に動く」のと同じ感覚です。
また、各成分 $\mu_i$ は変数 $x_i$ の期待値(平均値)です。つまり:
$$ E[x_i] = \mu_i, \quad E[\bm{x}] = \bm{\mu} $$
データの平均値を計算してベクトルに並べれば、それが $\bm{\mu}$ の自然な推定量(標本平均ベクトル)になります。
次は分布の「形」を決める共分散行列 $\bm{\Sigma}$ を理解します。
共分散行列 $\bm{\Sigma}$ — 分布の「形」と「向き」
共分散行列 $\bm{\Sigma}$ は $d \times d$ の行列で、対角成分と非対角成分がそれぞれ異なる意味を持ちます。
$$ \bm{\Sigma} = \begin{pmatrix} \sigma_1^2 & \sigma_{12} & \cdots & \sigma_{1d} \\ \sigma_{21} & \sigma_2^2 & \cdots & \sigma_{2d} \\ \vdots & \vdots & \ddots & \vdots \\ \sigma_{d1} & \sigma_{d2} & \cdots & \sigma_d^2 \end{pmatrix} $$
対角成分: 各変数の分散
$\sigma_i^2 = \text{Var}(x_i)$ は第 $i$ 番目の変数の分散(広がり)です。この値が大きいほど、$x_i$ の方向への散らばりが大きくなります。
非対角成分: 変数間の共分散
$\sigma_{ij} = \text{Cov}(x_i, x_j) = E[(x_i – \mu_i)(x_j – \mu_j)]$ は第 $i$ 変数と第 $j$ 変数の共分散です。
- $\sigma_{ij} > 0$: 正の相関($x_i$ が大きいとき $x_j$ も大きい傾向)
- $\sigma_{ij} = 0$: 無相関(二変数間に線形の関係がない)
- $\sigma_{ij} < 0$: 負の相関($x_i$ が大きいとき $x_j$ は小さい傾向)
$\bm{\Sigma}$ は必ず対称行列 ($\sigma_{ij} = \sigma_{ji}$)で、かつ正定値 ($\bm{v}^\top\bm{\Sigma}\bm{v} > 0$ for all $\bm{v} \neq \bm{0}$) です。これは「すべての方向に広がりがゼロにならない」ことを保証し、確率密度関数が正しく定義されるための条件です。
2次元の例で考えてみます。$d=2$ のとき、共分散行列は次の形です。
$$ \bm{\Sigma} = \begin{pmatrix} \sigma_1^2 & \sigma_{12} \\ \sigma_{12} & \sigma_2^2 \end{pmatrix} $$
$\sigma_{12} = 0$ のときは「楕円の軸が座標軸に平行」になり、$\sigma_{12} \neq 0$ のときは楕円が傾きます。次の図でその違いを見てみましょう。

左(無相関、$\rho=0$)では楕円の軸が座標軸に平行です。中(正の相関、$\rho=+0.75$)では楕円が右上方向に傾き、右(負の相関、$\rho=-0.75$)では右下方向に傾いています。共分散の符号が傾きの方向を決め、絶対値が傾きの強さを決める——これが共分散行列の幾何学的な直感です。
なお相関係数 $\rho_{ij}$ は、共分散を各変数の標準偏差で割って「$-1$ から $+1$ の間」に正規化したものです。
$$ \rho_{ij} = \frac{\sigma_{ij}}{\sigma_i \sigma_j} $$
$|\rho_{ij}|$ が1に近いほど強い相関(細い楕円)、0に近いほど無相関(円に近い楕円)になります。
共分散行列が分布の「形」を決めることがわかりました。では次に、この「形を考慮した距離」であるマハラノビス距離を見ていきましょう。
マハラノビス距離 — 分布の形を考慮した距離
確率密度関数の指数部に登場する二次形式:
$$ \Delta^2 = (\bm{x}-\bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x}-\bm{\mu}) $$
の平方根 $\Delta = \sqrt{(\bm{x}-\bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x}-\bm{\mu})}$ をマハラノビス距離(Mahalanobis distance)と呼びます。
なぜユークリッド距離では不十分か
ユークリッド距離は「どちらの方向にどれだけ離れているか」を均等に扱います。しかし、データに相関や分散のばらつきがある場合、これは問題を引き起こします。
例えば、ある変数 $x_1$ は分散が大きく(散らばりが大きい)、別の変数 $x_2$ は分散が小さい(散らばりが小さい)とします。$x_1$ の方向に3単位ずれた点と、$x_2$ の方向に3単位ずれた点は、ユークリッド距離では同じ「3」です。しかし「正常データの広がりから見てどれだけ外れているか」という観点では、分散の小さい $x_2$ 方向のずれの方がずっと「異常」です。
マハラノビス距離は $\bm{\Sigma}^{-1}$ を挟むことで、この「データの広がりの方向・大きさを考慮した距離」を実現します。
$$ \bm{\Sigma}^{-1} = \frac{1}{|\bm{\Sigma}|} \text{adj}(\bm{\Sigma}) $$
分散が大きい方向の成分は $\bm{\Sigma}^{-1}$ によって縮小され、分散が小さい方向の成分は拡大されます。これにより「分布の形に合わせた距離」が測れます。

左図(ユークリッド距離)では、点AとBが平均から同じ距離に見えます。しかし右図(マハラノビス距離)では、分布の広がりを考慮するため、分布の主軸から外れた方向の点ほど「遠い」と判定されます。この性質を使って、多変量ガウスの等高線上の点はすべて同じマハラノビス距離を持ちます。
特別なケース: $\bm{\Sigma} = \bm{I}$(単位行列)
$\bm{\Sigma}^{-1} = \bm{I}$ のとき、
$$ \Delta^2 = (\bm{x}-\bm{\mu})^\top \bm{I} (\bm{x}-\bm{\mu}) = \|\bm{x}-\bm{\mu}\|^2 $$
となり、通常のユークリッド距離の二乗に戻ります。つまりユークリッド距離はマハラノビス距離の特殊ケース(すべての方向の分散が等しく、相関がゼロの場合)です。
等高線とマハラノビス距離の関係が見えてきました。次は「なぜ等高線が楕円になるのか」を固有値分解の観点から理解しましょう。
等高線が楕円になる理由 — 固有値・固有ベクトルとの関係
多変量正規分布の等高線は $\Delta^2 = \text{const}$ の集合です。これが楕円(または高次元では楕円体)になることを、共分散行列の固有値分解から理解します。
固有値分解
$\bm{\Sigma}$ は実数対称行列なので、固有値分解できます。
$$ \bm{\Sigma} = \bm{U} \bm{\Lambda} \bm{U}^\top $$
ここで $\bm{U}$ は固有ベクトルを列に持つ直交行列($\bm{U}\bm{U}^\top = \bm{I}$)、$\bm{\Lambda} = \text{diag}(\lambda_1, \lambda_2, \ldots, \lambda_d)$ は固有値の対角行列です($\lambda_i > 0$。$\bm{\Sigma}$ が正定値なので固有値はすべて正)。
逆行列は同じ固有ベクトル行列を使って:
$$ \bm{\Sigma}^{-1} = \bm{U} \bm{\Lambda}^{-1} \bm{U}^\top = \bm{U} \text{diag}\!\left(\frac{1}{\lambda_1}, \ldots, \frac{1}{\lambda_d}\right) \bm{U}^\top $$
マハラノビス距離を固有基底で展開する
$\bm{y} = \bm{U}^\top (\bm{x} – \bm{\mu})$ という変数変換(固有ベクトルの方向への射影)を行います。
$\bm{U}^\top$ を掛けることは「座標系を固有ベクトルの方向に回転する」操作です。この新しい座標 $\bm{y}$ でマハラノビス距離を書き直すと:
$$ \Delta^2 = (\bm{x}-\bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x}-\bm{\mu}) = \bm{y}^\top \bm{\Lambda}^{-1} \bm{y} = \sum_{i=1}^d \frac{y_i^2}{\lambda_i} $$
これは固有ベクトルの方向に向けた座標 $y_i$ をそれぞれの固有値 $\lambda_i$ で割った和です。
$\Delta^2 = c^2$(定数)とおくと:
$$ \sum_{i=1}^d \frac{y_i^2}{\lambda_i} = c^2 \quad \Longleftrightarrow \quad \sum_{i=1}^d \frac{y_i^2}{(c\sqrt{\lambda_i})^2} = 1 $$
これはまさに「半軸の長さが $c\sqrt{\lambda_i}$」の楕円体($d=2$ なら楕円)の方程式です。
まとめると: * 固有ベクトル: 楕円の軸の方向 * 固有値 $\lambda_i$: 軸方向の分散。$\sqrt{\lambda_i}$ が楕円の半軸長に比例 * $c = 1$ の等高線: 各方向の標準偏差1個分の「1シグマ楕円」

赤い矢印が第1固有ベクトル(固有値 $\lambda_1 = 4.56$、長い軸)、橙の矢印が第2固有ベクトル(固有値 $\lambda_2 = 0.44$、短い軸)です。矢印の長さが $2\sqrt{\lambda_i}$ に比例していることに注目してください。固有値が大きい方向ほど楕円が「太い」ことが一目でわかります。また2つの矢印は直交しています——固有ベクトルは常に互いに垂直です。
この事実は非常に重要です。多変量正規分布の「形」を理解したいときは、共分散行列の固有値分解を行い「どの方向に広がっているか(固有ベクトル)」「どれくらい広がっているか(固有値)」を調べるとよいです。
2次元正規分布の可視化
理論を視覚で確認してみましょう。まず代表的な2次元正規分布の3Dサーフェス(確率密度の山)を見ます。

これは $\bm{\mu} = \bm{0}$、$\bm{\Sigma} = \bm{I}$ のときの2次元正規分布の確率密度です。山の頂上が平均 $\bm{0}$ に対応し、どの方向にも同じ速さで裾野が広がっています。相関ゼロ・等分散の場合は等高線が正円になります。
次に、共分散行列のさまざまな設定が等高線の形にどう影響するかを俯瞰してみます。

6つのパネルから次のことが読み取れます。左上(無相関・等分散)は正円です。上中($x_1$ 方向の分散を大きくした)は横長の楕円に、上右($x_2$ 方向)は縦長の楕円になります。下段では相関係数 $\rho$ を変化させています。正の相関(下左)では右上がりの楕円、負の相関(下中)では右下がりの楕円となり、強い正の相関(下右、$\rho=+0.9$)では非常に細長い楕円になっています。
これで「共分散行列の各成分が等高線にどう現れるか」が一目でわかります。次は3次元に拡張したケースを見てみましょう。
3次元正規分布への拡張
$d=3$ の場合、確率変数は $\bm{x} = (x_1, x_2, x_3)^\top$ の3次元ベクトル、平均は $\bm{\mu} \in \mathbb{R}^3$、共分散行列は $3 \times 3$ の正定値対称行列です。式の形は全く同じです。
$$ \mathcal{N}(\bm{x};\bm{\mu},\bm{\Sigma}) = \frac{1}{(2\pi)^{3/2} |\bm{\Sigma}|^{1/2}} \exp\!\left(-\frac{1}{2}(\bm{x}-\bm{\mu})^\top \bm{\Sigma}^{-1} (\bm{x}-\bm{\mu})\right) $$
3次元では等高線の代わりに「等高面(楕円体)」になりますが、それを直接は描けないので、サンプルを散布図で表示します。

3変量の正の相関を持つサンプルを3次元散布図として描きました。色は $x_3$ の値を表します。全体的に右上前方($x_1$, $x_2$, $x_3$ が同時に大きい方向)への広がりが見て取れます——これが「正の相関」の視覚的なイメージです。楕円体の形をした雲が広がっているのが直感的にわかります。
3次元以上では可視化が難しくなりますが、本質は2次元と変わりません。固有ベクトルが楕円体の軸方向を決め、固有値が各軸の長さを決めます。
相関係数と楕円の傾き
ここで相関係数と楕円の関係をより詳しく見ておきます。$d=2$ の場合、共分散行列を相関係数 $\rho$ と標準偏差 $\sigma_1, \sigma_2$ で書き直すと:
$$ \bm{\Sigma} = \begin{pmatrix} \sigma_1^2 & \rho \sigma_1 \sigma_2 \\ \rho \sigma_1 \sigma_2 & \sigma_2^2 \end{pmatrix} $$
このとき固有値は:
$$ \lambda_{1,2} = \frac{\sigma_1^2 + \sigma_2^2 \pm \sqrt{(\sigma_1^2 – \sigma_2^2)^2 + 4\rho^2\sigma_1^2\sigma_2^2}}{2} $$
と計算でき、$|\rho|$ が大きいほど $\lambda_1/\lambda_2$ の比(楕円の長軸と短軸の比の二乗)が大きくなります。つまり相関が強いほど楕円は細長くなります。
$\sigma_1 = \sigma_2 = \sigma$(等分散)のケースでは、計算が少し簡単になります。
$$ \lambda_{1,2} = \sigma^2(1 \pm |\rho|) $$
固有ベクトルは、$\rho > 0$ のとき $(1/\sqrt{2}, 1/\sqrt{2})^\top$(右上45度方向)と $(-1/\sqrt{2}, 1/\sqrt{2})^\top$(左上45度方向)になります。等分散・正の相関なら楕円は45度傾く、というのが直感的な理解です。
Cholesky分解によるサンプリング
多変量正規分布から乱数サンプルを生成する最も一般的な方法がCholesky分解を使った手順です。
アイデア
標準正規分布 $\mathcal{N}(\bm{0}, \bm{I})$ からのサンプリングは容易です(各成分を独立に生成すればよい)。これを「平均 $\bm{\mu}$、共分散行列 $\bm{\Sigma}$ の分布」に変換するにはどうすればよいでしょうか?
鍵となる性質: $\bm{z} \sim \mathcal{N}(\bm{0}, \bm{I})$ のとき、線形変換 $\bm{x} = \bm{L}\bm{z} + \bm{\mu}$ を施すと $\bm{x} \sim \mathcal{N}(\bm{\mu}, \bm{L}\bm{L}^\top)$ になります。ここで $\bm{L}$ は $\bm{\Sigma} = \bm{L}\bm{L}^\top$ を満たす行列です。
Cholesky因子 $\bm{L}$
正定値対称行列 $\bm{\Sigma}$ は必ず $\bm{\Sigma} = \bm{L}\bm{L}^\top$ と分解できます。$\bm{L}$ は下三角行列で、「Cholesky因子」と呼ばれます。2次元の例では:
$$ \begin{pmatrix} \sigma_1^2 & \sigma_{12} \\ \sigma_{12} & \sigma_2^2 \end{pmatrix} = \begin{pmatrix} \ell_{11} & 0 \\ \ell_{21} & \ell_{22} \end{pmatrix} \begin{pmatrix} \ell_{11} & \ell_{21} \\ 0 & \ell_{22} \end{pmatrix} $$
$\ell_{11} = \sigma_1$(第1行・第1列から直接)と置き、次の成分を順に解けば:
$$ \ell_{11} = \sigma_1, \quad \ell_{21} = \frac{\sigma_{12}}{\sigma_1}, \quad \ell_{22} = \sqrt{\sigma_2^2 – \ell_{21}^2} $$
サンプリング手順
- Step 1: $\bm{z} \sim \mathcal{N}(\bm{0}, \bm{I})$ から標準正規乱数を $d$ 個生成
- Step 2: Cholesky因子 $\bm{L}$ を計算($\bm{\Sigma} = \bm{L}\bm{L}^\top$)
- Step 3: $\bm{x} = \bm{L}\bm{z} + \bm{\mu}$ で変換

左が標準正規分布(円形の点群)、右が変換後の目的の分布(楕円形の点群)です。$\bm{L}$ を掛けることで円形の点群が「伸ばされ・回転され」て楕円形になり、$\bm{\mu}$ を足すことで中心が移動します。この変換の組み合わせで、任意の共分散構造を持つ多変量正規分布を生成できます。
逆の操作(楕円形の点群を円形に戻す)は白色化(whitening)と呼ばれ、次の図で確認できます。

左が元のデータ(平均2, 1に位置し、正の相関で楕円形)、右が白色化後(平均0に移動し、無相関の円形)です。白色化は前処理として機械学習モデルに渡す前に使われることがあります。特に主成分分析(PCA)や独立成分分析(ICA)の前処理として有効です。
Python実装と検証
ここまでの理論を Python で実際に確認します。numpy の多変量正規分布生成関数と固有値分解を使います。
import numpy as np
from scipy.stats import multivariate_normal
rng = np.random.default_rng(42)
# 共分散行列と平均の設定
mu = np.array([1.0, 2.0])
Sigma = np.array([[3.0, 2.0],
[2.0, 2.0]])
# 固有値・固有ベクトルを確認
eigenvalues, eigenvectors = np.linalg.eigh(Sigma)
print("固有値:", eigenvalues.round(3))
print("固有ベクトル(列方向):\n", eigenvectors.round(3))
# => 固有値: [0.438 4.562]
# => 固有ベクトル(列が各固有ベクトル):
# [[ 0.615 -0.788]
# [-0.788 -0.615]]
固有値と固有ベクトルが得られました。$\lambda_1 \approx 0.44$、$\lambda_2 \approx 4.56$ で、第2固有ベクトル方向(約37.9度傾いた方向)に強く広がっていることがわかります。
# Cholesky 分解によるサンプリング
L = np.linalg.cholesky(Sigma)
z = rng.standard_normal((1000, 2))
samples = z @ L.T + mu
# サンプルの統計量を確認
print("サンプル平均:", samples.mean(axis=0).round(3))
print("サンプル共分散:\n", np.cov(samples.T).round(3))
# => サンプル平均: [0.876 1.886] ← mu = [1, 2] に近い
# => サンプル共分散:
# [[2.948 2.046]
# [2.046 2.102]] ← Sigma = [[3,2],[2,2]] に近い
1000サンプルの平均と共分散が指定した $\bm{\mu}=[1,2]$、$\bm{\Sigma}=\begin{pmatrix}3&2\\2&2\end{pmatrix}$ におおむね一致していることが確認できます。乱数のばらつきにより完全には一致しませんが、標本数を増やすほど真の値(大数の法則)に収束します。
# マハラノビス距離の計算
Sigma_inv = np.linalg.inv(Sigma)
def mahalanobis(x, mu, Sigma_inv):
diff = x - mu
return np.sqrt(diff @ Sigma_inv @ diff)
test_pts = np.array([[3.0, 2.0], [1.0, 4.0], [4.0, 5.0]])
for pt in test_pts:
md = mahalanobis(pt, mu, Sigma_inv)
eu = np.linalg.norm(pt - mu)
print(f"点 {pt}: ユークリッド={eu:.3f}, マハラノビス={md:.3f}")
# => 点 [3. 2.]: ユークリッド=2.000, マハラノビス=2.000
# => 点 [1. 4.]: ユークリッド=2.000, マハラノビス=2.449
# => 点 [4. 5.]: ユークリッド=4.243, マハラノビス=2.121
3つのテスト点で、ユークリッド距離とマハラノビス距離の違いが浮かび上がります。点 $[3, 2]$ と点 $[1, 4]$ はユークリッド距離では同じ「2」ですが、マハラノビス距離では $[3,2]$ が 2.000、$[1,4]$ が 2.449 と異なります。平均 $[1,2]$ からの差ベクトルに対して、共分散行列 $\bm{\Sigma}$ の逆行列が「向きに応じた重み付け」を行うためです。点 $[4,5]$ はユークリッド距離では最も遠い(4.243)ですが、マハラノビス距離では 2.121 と、ユークリッド距離ほどの開きはありません——これは $[4,5]$ が共分散の広がり方向(主軸方向)に近い方向にあるためです。
# 確率密度の確認: 等マハラノビス距離上の点は同じ確率密度
rv = multivariate_normal(mean=mu, cov=Sigma)
# マハラノビス距離=2.000 になる3点(異なる方向から)を比較
# 各固有ベクトル方向に 2*sqrt(lambda) 進むとMD=2になる
u1 = eigenvectors[:, 0] # 第1固有ベクトル (lambda=0.438)
u2 = eigenvectors[:, 1] # 第2固有ベクトル (lambda=4.562)
check_pts = [
np.array([3.0, 2.0]), # 元のテスト点 (MD=2.000)
mu + 2.0 * np.sqrt(eigenvalues[0]) * u1, # 第1固有ベクトル方向
mu + 2.0 * np.sqrt(eigenvalues[1]) * u2, # 第2固有ベクトル方向
]
for pt in check_pts:
md = mahalanobis(pt, mu, Sigma_inv)
pdf_val = rv.pdf(pt)
print(f"点 {pt.round(3)}: マハラノビス距離={md:.3f}, PDF={pdf_val:.6f}")
# => 点 [3. 2. ]: マハラノビス距離=2.000, PDF=0.015231
# => 点 [1.815 0.956]: マハラノビス距離=2.000, PDF=0.015231
# => 点 [-2.367 -0.629]: マハラノビス距離=2.000, PDF=0.015231
等マハラノビス距離の点が同じ確率密度を持つことを確認できます。これが「等高線 = 楕円体」の本質です。
まとめ
本記事では、多変量正規分布(多変量ガウス分布)の定義から幾何学的な直感まで解説しました。
- 確率密度関数: $\mathcal{N}(\bm{x};\bm{\mu},\bm{\Sigma}) \propto \exp\!\left(-\frac{1}{2}(\bm{x}-\bm{\mu})^\top\bm{\Sigma}^{-1}(\bm{x}-\bm{\mu})\right)$。1次元の自然な拡張
- 平均ベクトル $\bm{\mu}$: 分布の中心。各成分が各変数の期待値
- 共分散行列 $\bm{\Sigma}$: 対角成分が各変数の分散、非対角成分が変数間の共分散(相関の強さと向き)
- マハラノビス距離: $\bm{\Sigma}^{-1}$ を挟んだ二次形式の平方根。データの広がりを考慮した距離。等高線上の点はすべて等距離
- 固有値・固有ベクトル: 固有ベクトルが楕円の軸方向、$\sqrt{\lambda_i}$ が軸の長さ(標準偏差)
- Choleskyサンプリング: $\bm{\Sigma}=\bm{L}\bm{L}^\top$ と分解し、$\bm{x} = \bm{L}\bm{z} + \bm{\mu}$ で変換
多変量正規分布を次のトピックへのブリッジとして使えます。「周辺化(特定の変数を積分して消す)」や「条件付き分布(一部の変数を観測した後の残りの変数の分布)」は、どちらも多変量正規分布のまま解析的に計算できます。以下の記事も参考にしてください。

