Python에서 Mahalanobis 거리 계산
-
Python의
scipy.spatial.distance
라이브러리의cdist()
함수를 사용하여 Mahalanobis 거리 계산 -
Python에서
numpy.einsum()
메서드를 사용하여 Mahalanobis 거리 계산
이 튜토리얼은 Python에서 두 NumPy 배열 사이의 Mahalanobis 거리를 찾는 방법을 소개합니다.
Python의scipy.spatial.distance
라이브러리의cdist()
함수를 사용하여 Mahalanobis 거리 계산
Mahalanobis 거리는 점과 분포 사이의 거리를 측정 한 것입니다. 두 배열 사이의 Mahalanobis 거리를 찾으려면 Python의scipy.spatial.distance
라이브러리 내에서cdist()
함수를 사용할 수 있습니다. cdist()
함수는 두 컬렉션 사이의 거리를 계산합니다. 입력 매개 변수에mahalanobis
를 지정하여 Mahalanobis 거리를 찾을 수 있습니다. 다음 코드 예제를 참조하십시오.
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)
출력:
[3.63263583 2.59094773 1.97370848 1.97370848 2.177978 3.04256456
3.04256456 1.54080605 2.58298363]
위 코드에서cdist()
함수를 사용하여x
및y
배열 사이의 Mahalanobis 거리를 계산하고 저장했습니다. 먼저np.array()
함수로 두 배열을 모두 만들었습니다. 그런 다음 두 배열의 모양을 변경하고 새 배열xx
및yy
에 조옮김을 저장했습니다. 그런 다음 이러한 새 배열을cdist()
함수에 전달하고cdist(xx,yy,'mahalanobis')
를 사용하여 매개 변수에mahalanobis
를 지정했습니다.
Python에서numpy.einsum()
메서드를 사용하여 Mahalanobis 거리 계산
또한 numpy.einsum()
메소드를 사용하여 두 배열 간의 Mahalanobis 거리를 계산할 수 있습니다. numpy.einsum()
메소드는 입력 매개 변수에 대한 Einstein 합계 규칙을 평가하는 데 사용됩니다.
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)
출력:
[3.63263583 2.59094773 1.97370848 1.97370848 2.177978 3.04256456
3.04256456 1.54080605 2.58298363]
배열을np.vstack()
함수에 전달하고 값을X
안에 저장했습니다. 그 후X
의 전치를np.cov()
함수에 전달하고 결과를V
에 저장했습니다. 그런 다음 행렬V
의 곱셈 역수를 계산하고 결과를VI
에 저장했습니다. xx
와yy
의 차이를 계산하고 결과를delta
에 저장했습니다. 결국,results = np.sqrt(np.einsum('nj,jk,nk->n', delta, VI, delta))
를 사용하여x
와y
사이의 Mahalanobis 거리를 계산하고 저장했습니다.
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