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