Calculer la distance de Mahalanobis en Python
-
Calculer la distance de Mahalanobis avec la fonction
cdist()
dans la bibliothèquescipy.spatial.distance
en Python -
Calculer la distance de Mahalanobis avec la méthode
numpy.einsum()
en Python
Ce tutoriel présentera les méthodes pour trouver la distance de Mahalanobis entre deux tableaux NumPy en Python.
Calculer la distance de Mahalanobis avec la fonction cdist()
dans la bibliothèque scipy.spatial.distance
en Python
La distance de Mahalanobis est la mesure de la distance entre un point et une distribution. Si nous voulons trouver la distance de Mahalanobis entre deux tableaux, nous pouvons utiliser la fonction cdist()
à l’intérieur de la bibliothèque scipy.spatial.distance
en Python. La fonction cdist()
calcule la distance entre deux collections. On peut spécifier mahalanobis
dans les paramètres d’entrée pour trouver la distance de Mahalanobis. Voir l’exemple de code suivant.
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)
Production:
[3.63263583 2.59094773 1.97370848 1.97370848 2.177978 3.04256456
3.04256456 1.54080605 2.58298363]
Nous avons calculé et stocké la distance de Mahalanobis entre les tableaux x
et y
avec la fonction cdist()
dans le code ci-dessus. Nous avons d’abord créé les deux tableaux avec la fonction np.array()
. Nous avons ensuite remodelé les deux tableaux et enregistré la transposition dans les nouveaux tableaux xx
et yy
. Nous avons ensuite passé ces nouveaux tableaux à la fonction cdist()
et spécifié mahalanobis
dans les paramètres avec cdist(xx,yy,'mahalanobis')
.
Calculer la distance de Mahalanobis avec la méthode numpy.einsum()
en Python
On peut aussi calculer la distance de Mahalanobis entre deux tableaux en utilisant la méthode numpy.einsum()
. La méthode numpy.einsum()
est utilisée pour évaluer la convention de sommation d’Einstein sur les paramètres d’entrée.
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)
Production:
[3.63263583 2.59094773 1.97370848 1.97370848 2.177978 3.04256456
3.04256456 1.54080605 2.58298363]
Nous avons passé des tableaux à la fonction np.vstack()
et stocké la valeur dans le X
. Après cela, nous avons passé la transposition de X
à la fonction np.cov()
et stocké le résultat à l’intérieur de V
. Nous avons ensuite calculé l’inverse multiplicatif de la matrice V
et stocké le résultat dans VI
. Nous avons calculé la différence entre xx
et yy
et stocké les résultats dans delta
. Au final, nous avons calculé et stocké la distance de Mahalanobis entre x
et y
avec results = np.sqrt(np.einsum('nj,jk,nk->n', delta, VI, delta))
.
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