Calcular la distancia de Mahalanobis en Python

Muhammad Maisam Abbas 30 enero 2023
  1. Calcule la distancia de Mahalanobis con la función cdist() en la biblioteca scipy.spatial.distance en Python
  2. Calcule la distancia de Mahalanobis con el método numpy.einsum() en Python
Calcular la distancia de Mahalanobis en Python

Este tutorial presentará los métodos para encontrar la distancia de Mahalanobis entre dos matrices NumPy en Python.

Calcule la distancia de Mahalanobis con la función cdist() en la biblioteca scipy.spatial.distance en Python

La distancia de Mahalanobis es la medida de la distancia entre un punto y una distribución. Si queremos encontrar la distancia de Mahalanobis entre dos matrices, podemos usar la función cdist() dentro de la biblioteca scipy.spatial.distance en Python. La función cdist() calcula la distancia entre dos colecciones. Podemos especificar mahalanobis en los parámetros de entrada para encontrar la distancia de Mahalanobis. Vea el siguiente ejemplo de código.

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)

Producción :

[3.63263583 2.59094773 1.97370848 1.97370848 2.177978   3.04256456
 3.04256456 1.54080605 2.58298363]

Calculamos y almacenamos la distancia de Mahalanobis entre las matrices x e y con la función cdist() en el código anterior. Primero creamos ambas matrices con la función np.array(). Luego reformamos ambas matrices y guardamos la transposición en las nuevas matrices xx e yy. Luego pasamos estas nuevas matrices a la función cdist() y especificamos mahalanobis en los parámetros con cdist(xx,yy,'mahalanobis').

Calcule la distancia de Mahalanobis con el método numpy.einsum() en Python

También podemos calcular la distancia de Mahalanobis entre dos matrices usando el método numpy.einsum(). El método numpy.einsum() se utiliza para evaluar la convención de suma de Einstein en los parámetros de entrada.

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)

Producción :

[3.63263583 2.59094773 1.97370848 1.97370848 2.177978   3.04256456
 3.04256456 1.54080605 2.58298363]

Pasamos matrices a la función np.vstack() y almacenamos el valor dentro de la X. Después de eso, pasamos la transposición de X a la función np.cov() y almacenamos el resultado dentro de V. Luego calculamos el inverso multiplicativo del array V y almacenamos el resultado en VI. Calculamos la diferencia entre xx e yy y almacenamos los resultados en delta. Al final, calculamos y almacenamos la distancia de Mahalanobis entre x e y con 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

Artículo relacionado - Python NumPy