d=(x-\mu)^T\Sigma^{-1}(x-\mu)
$ x $ ist der Vektor, für den Sie den Abstand zur Datengruppe ermitteln möchten. $ \ Mu $ ist der Durchschnittswert der Datengruppe. $ \ Sigma ^ {-1} $ ist die Umkehrung der Kovarianzmatrix der Datengruppe. Unter Verwendung der Choleskey-Zerlegung kann die Gleichung wie folgt transformiert werden.
\begin{eqnarray}
d &=& (x-\mu)^T\Sigma^{-1}(x-\mu) \\
  &=& (x-\mu)^T(LL^T)^{-1}(x-\mu) \\
  &=& (L^{-1}(x-\mu))^T(L^{-1}(x-\mu)) \\
  &=& z^Tz
\end{eqnarray}
$ L $ ist die untere Dreiecksmatrix, die durch die Choleskey-Zerlegung erhalten wird.
Wenn Sie 
Implementieren Sie das Obige in Python.
import numpy as np
from scipy.linalg import solve_triangular
def mahalanobis(x, mu, sigma):
    L = np.linalg.cholesky(sigma)
    d = x - mu
    z = solve_triangular(
        L, d.T, lower=True, check_finite=False,
        overwrite_b=True)
    squared_maha = np.sum(z * z, axis=0)
    return squared_maha
$ L $ finden Sie in numpys linalg.cholesky. $ z $ befindet sich in scipys linalg.solve_triangular.
Recommended Posts