Calcular la distancia de Mahalanobis en Python
-
Calcule la distancia de Mahalanobis con la función
cdist()
en la bibliotecascipy.spatial.distance
en Python -
Calcule la distancia de Mahalanobis con el método
numpy.einsum()
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))
.
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