Как рассчитать расстояние Махаланобиса между случайно сгенерированными значениями? - PullRequest
0 голосов
/ 24 сентября 2019

В настоящее время я изучаю Дистанцию ​​Махаланобиса, и мне это довольно сложно.Чтобы лучше понять идею, я сгенерировал 2 набора случайных значений (x и y) и случайную точку, где для всех 3 среднее = 0, а стандартное отклонение = 1.Как я могу рассчитать расстояние Махаланобиса между ними?Пожалуйста, найдите мой код Python ниже. Большое спасибо за вашу помощь!

import numpy as np
from numpy import cov
from scipy.spatial import distance


generate 20 random values where mean = 0 and standard deviation = 1, assign one set to x and one to y

x = [random.normalvariate(0,1) for i in range(20)]
y = [random.normalvariate(0,1) for i in range(20)]
r_point = [random.normalvariate(0,1)] #that's my random point


sigma = cov(x, y)
print(sigma)
print("random point =", r_point)

#use the covariance to calculate the mahalanobis distance from a random point```

1 Ответ

0 голосов
/ 24 сентября 2019

Вот пример, который показывает, как вычислить расстояние Махаланобиса от точки r_point до некоторых данных.Расстояние Махаланобиса учитывает дисперсию и корреляцию данных, к которым вы измеряете расстояние (используя обратную его ковариационную матрицу).Здесь расстояние Махаланобиса и евклидово расстояние должны быть очень близкими из-за распределения данных (среднее значение 0 и стандартное отклонение 1).Для других данных они будут другими.

import numpy as np

N = 5000
mean = 0.0
stdDev = 1.0
data = np.random.normal(mean, stdDev, (2, N))   # 2D random points

r_point = np.random.randn(2)
cov = np.cov(data)

mahalanobis_dist = np.sqrt(r_point.T @ np.linalg.inv(cov) @ r_point)
print("Mahalanobis distance = ", mahalanobis_dist)

euclidean_dist = np.sqrt(r_point.T @ r_point)
print("Euclidean distance = ", euclidean_dist)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...