Berechnen Sie die Mahalanobis-Distanz in Python

Muhammad Maisam Abbas 30 Januar 2023
  1. Berechnen Sie die Mahalanobis-Distanz mit der Funktion cdist() in der Bibliothek scipy.spatial.distance in Python
  2. Berechnen Sie die Mahalanobis-Distanz mit der Methode numpy.einsum() in Python
Berechnen Sie die Mahalanobis-Distanz 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.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

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

Verwandter Artikel - Python NumPy