Calculer la distance de Mahalanobis en Python

Muhammad Maisam Abbas 30 janvier 2023
  1. Calculer la distance de Mahalanobis avec la fonction cdist() dans la bibliothèque scipy.spatial.distance en Python
  2. Calculer la distance de Mahalanobis avec la méthode numpy.einsum() en Python
Calculer la distance de Mahalanobis 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)).

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

Article connexe - Python NumPy