
Mahalanobis Distance [medium]
v1 공분산 행렬 은 특성 간 상관 구조를 담고 있음. 이 구조를 "거리" 로 변환한 것이 Mahalanobis distance (Mahalanobis 1936):
dM(x,μ)=(x−μ)⊤Σ−1(x−μ)
유클리드 거리가 모든 축을 동등 가중 하는 반면, Mahalanobis 는 분산과 상관 을 고려:
- 분산이 큰 방향 → 큰 거리로 안 봄 (expected variation).
- 분산이 작은 방향 → 작은 편차도 큰 거리로 인식.
- 상관 있는 방향 → 상관 패턴을 따르면 거리가 짧음.
왜 쓰나
- 이상치 탐지 (anomaly detection): 다변량 가우시안에서 dM2∼χD2 → 임계값 넘는 샘플을 outlier.
- 분류 (QDA 동치): 다변량 가우시안 가정에서 각 클래스 dM 최소화 = MAP.
- 군집화: correlation-aware 거리.
수치적 주의
- Σ−1 직접 계산은 불안정 → 보통 Cholesky 또는
np.linalg.solve 사용.
- Σ 가 특이 (N < D) → regularization: Σ+ϵI 로 ridge.
과제
함수 mahalanobis_dist(X, queries, epsilon=1e-6) 를 완성하세요.
X shape (N, D): 참조 분포 샘플 → 이로부터 μ,Σ.
queries shape (M, D): 거리를 측정할 쿼리 포인트들.
epsilon: 정규화 항 — Σ←Σ+ϵI.
- 반환: shape
(M,) 각 쿼리의 Mahalanobis 거리.
- 힌트:
np.linalg.solve(cov, diff.T).T 로 Σ−1(x−μ) 계산, 그다음 내적.
테스트 케이스
| # | 이름 | 검증 |
|---|
| 1 | 반환 shape (M,) | |
| 2 | 비음수 | |
| 3 | x=μ → 거리 ≈ 0 | |
| 4 | 독립 표준 분산 → 거리 = 유클리드 | Σ=I 일 때 |
| 5 | 상관 있는 분포: 상관 방향과 수직 방향에 따라 거리 변화 | |
| 6 | 특이한 공분산 (N<D) 에도 NaN/inf 없음 | regularization |
| 7 | scipy.spatial.distance.mahalanobis 와 일치 | |