0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

判別分析とマハラノビスの平方距離

Last updated at Posted at 2025-10-16

判別分析とマハラノビスの平方距離

はじめに

統計的学習や機械学習の古典的な方法として判別分析(Discriminant Analysis)があります。
これは「新しいデータがどのグループに属するか」を決定する方法で、教師あり分類の一種です。

判別分析の背後にある重要な概念が マハラノビスの平方距離
本記事では、判別分析の基本とマハラノビス距離とのつながりを整理します。

判別分析とは

判別分析は、既知のグループ(例:A群、B群)のデータをもとにして、未知データの所属群を判定する方法です。

代表的な手法には以下があります:

  • 線形判別分析(Linear Discriminant Analysis, LDA)

    • 各群が正規分布に従うと仮定
    • 共分散行列が群間で等しいと仮定
    • 判別境界は「線形(超平面)」になる
  • 二次判別分析(Quadratic Discriminant Analysis, QDA)

    • 共分散行列が群ごとに異なる場合
    • 判別境界は「二次曲線(楕円)」になる

マハラノビスの平方距離

マハラノビス距離は、データの相関構造を考慮した距離です。
点 $x $ と平均ベクトル $ \mu$ の間のマハラノビスの平方距離は次のように定義されます:

$$
D^2(x) = (x - \mu)^T \Sigma^{-1} (x - \mu)
$$

  • $ \mu $:平均ベクトル
  • $ \Sigma $:共分散行列

もし変数間に相関がなければ、これは単なるユークリッド距離に一致します。
しかし変数が相関しているときは、楕円形に伸びた距離感を与えるのがマハラノビス距離です。

判別分析とマハラノビス距離の関係

判別分析では、各群が多変量正規分布に従うと仮定します。

群 $ k $ の確率密度関数は:

$$
f_k(x) = \frac{1}{(2\pi)^{p/2} |\Sigma|^{1/2}}
\exp\left( -\tfrac{1}{2}(x-\mu_k)^T \Sigma^{-1} (x-\mu_k) \right)
$$

ここで出てくる指数部分がまさに マハラノビスの平方距離 です。

したがって、LDAの判別関数は

$$
g_k(x) = -\tfrac{1}{2} D^2_k(x) + \log \pi_k
$$

の形になり、「マハラノビス距離が小さい方へ分類」することと等価になります。 ($\pi_k$ は事前確率)

実装例(Python)

scikit-learnにはLDAとQDAが実装されています。

import numpy as np
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.datasets import make_classification
import matplotlib.pyplot as plt

# サンプルデータ生成
X, y = make_classification(n_features=2, n_classes=2, 
                           n_redundant=0, n_informative=2,
                           n_clusters_per_class=1, random_state=42)

lda = LinearDiscriminantAnalysis()
lda.fit(X, y)

# 境界線を描画
xx, yy = np.meshgrid(np.linspace(X[:,0].min()-1, X[:,0].max()+1, 200),
                     np.linspace(X[:,1].min()-1, X[:,1].max()+1, 200))
Z = lda.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.2)
plt.scatter(X[:,0], X[:,1], c=y, edgecolor='k')
plt.title("LDA with Mahalanobis distance")
plt.show()
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?