Berechnen Sie die Mahalanobis-Distanz in Python
-
Berechnen Sie die Mahalanobis-Distanz mit der Funktion
cdist()
in der Bibliothekscipy.spatial.distance
in Python -
Berechnen Sie die Mahalanobis-Distanz mit der Methode
numpy.einsum()
in Python
In diesem Tutorial werden die Methoden zum Ermitteln des Mahalanobis-Abstands zwischen zwei NumPy-Arrays in Python vorgestellt.
Berechnen Sie die Mahalanobis-Distanz mit der Funktion cdist()
in der Bibliothek scipy.spatial.distance
in Python
Die Mahalanobis-Distanz ist das Maß für die Distanz zwischen einem Punkt und einer Verteilung. Wenn wir den Mahalanobis-Abstand zwischen zwei Arrays ermitteln möchten, können wir die Funktion cdist()
innerhalb der Bibliothek scipy.spatial.distance
in Python verwenden. Die Funktion cdist()
berechnet den Abstand zwischen zwei Sammlungen. Wir können in den Eingabeparametern mahalanobis
angeben, um die Mahalanobis-Distanz zu ermitteln. Siehe das folgende Codebeispiel.
import numpy as np
from scipy.spatial.distance import cdist
x = np.array([[[1, 2, 3], [3, 4, 5], [5, 6, 7]], [[5, 6, 7], [7, 8, 9], [9, 0, 1]]])
i, j, k = x.shape
xx = x.reshape(i, j * k).T
y = np.array([[[8, 7, 6], [6, 5, 4], [4, 3, 2]], [[4, 3, 2], [2, 1, 0], [0, 1, 2]]])
yy = y.reshape(i, j * k).T
results = cdist(xx, yy, "mahalanobis")
results = np.diag(results)
print(results)
Ausgabe:
[3.63263583 2.59094773 1.97370848 1.97370848 2.177978 3.04256456
3.04256456 1.54080605 2.58298363]
Wir haben den Mahalanobis-Abstand zwischen den Arrays x
und y
mit der Funktion cdist()
im obigen Code berechnet und gespeichert. Beide Arrays haben wir zunächst mit der Funktion np.array()
erstellt. Wir haben dann beide Arrays umgeformt und die Transponierung in den neuen Arrays xx
und yy
gespeichert. Diese neuen Arrays haben wir dann an die Funktion cdist()
übergeben und mahalanobis
in den Parametern mit cdist(xx,yy,'mahalanobis')
angegeben.
Berechnen Sie die Mahalanobis-Distanz mit der Methode numpy.einsum()
in Python
Wir können auch den Mahalanobis-Abstand zwischen zwei Arrays mit der Methode numpy.einsum()
berechnen. Die Methode numpy.einsum()
wird verwendet, um die Einstein-Summationskonvention für die Eingabeparameter auszuwerten.
import numpy as np
x = np.array([[[1, 2, 3], [3, 4, 5], [5, 6, 7]], [[5, 6, 7], [7, 8, 9], [9, 0, 1]]])
i, j, k = x.shape
xx = x.reshape(i, j * k).T
y = np.array([[[8, 7, 6], [6, 5, 4], [4, 3, 2]], [[4, 3, 2], [2, 1, 0], [0, 1, 2]]])
yy = y.reshape(i, j * k).T
X = np.vstack([xx, yy])
V = np.cov(X.T)
VI = np.linalg.inv(V)
delta = xx - yy
results = np.sqrt(np.einsum("nj,jk,nk->n", delta, VI, delta))
print(results)
Ausgabe:
[3.63263583 2.59094773 1.97370848 1.97370848 2.177978 3.04256456
3.04256456 1.54080605 2.58298363]
Wir haben Arrays an die Funktion np.vstack()
übergeben und den Wert im X
gespeichert. Danach haben wir die Transponierte von X
an die Funktion np.cov()
übergeben und das Ergebnis in V
gespeichert. Wir haben dann die multiplikative Inverse der Matrix V
berechnet und das Ergebnis in VI
gespeichert. Wir haben die Differenz zwischen xx
und yy
berechnet und die Ergebnisse in delta
gespeichert. Am Ende haben wir den Mahalanobis-Abstand zwischen x
und y
mit results = np.sqrt(np.einsum('nj,jk,nk->n', delta, VI, delta))
berechnet und gespeichert.
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn