判別分析とマハラノビスの平方距離
はじめに
統計的学習や機械学習の古典的な方法として判別分析(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()