Вычислить расстояние от точки p до многомерной гауссианы (M, V)

У меня есть высокоразмерный гауссов со средним M и ковариационной матрицей V. Я хотел бы рассчитать расстояние от точки p до M, принимая во внимание V (я думаю, это расстояние в стандартных отклонениях p от M?).

Говоря иначе, я беру эллипс на одну сигму от M и хочу проверить, находится ли p внутри этого эллипса.


person El-ad    schedule 15.12.2010    source источник
comment
Попробуйте math.stackexchange.com.   -  person Jacob    schedule 16.12.2010


Ответы (3)


Если V является допустимой ковариационной матрицей гауссова, то она является симметричной положительно определенной и, следовательно, определяет допустимое скалярное произведение. Кстати inv(V) тоже делает.

Поэтому, предполагая, что M и p являются векторами-столбцами, вы можете определить расстояния как:

d1 = sqrt((M-p)'*V*(M-p));
d2 = sqrt((M-p)'*inv(V)*(M-p));

способ Matlab можно было бы переписать d2as (возможно, некоторые ненужные скобки):

d2 = sqrt((M-p)'*(V\(M-p)));

Хорошо, что когда V — единичная матрица, то d1==d2 соответствует классическому евклидову расстоянию. Чтобы узнать, нужно ли вам использовать d1 или d2, оставлено в качестве упражнения (извините, часть моей работы - преподавание). Напишите многомерную формулу Гаусса и сравните ее с одномерным случаем, поскольку многомерный случай является лишь частным случаем одномерного (или проведите некоторый численный эксперимент).

NB: в очень многомерных пространствах или для очень многих точек для проверки вы можете найти умный/более быстрый способ из собственных векторов и собственных значений V (т.е. главных осей эллипсоида и их соответствующей дисперсии).

Надеюсь это поможет.

A.

person Adrien    schedule 15.12.2010
comment
Кажется, это все. Спасибо! - person El-ad; 16.12.2010
comment
У этой штуки есть имя: Расстояние Махаланобиса. :-) - person A. Donda; 29.11.2013

Рассмотрим вычисление вероятности точки при нормальном распределении:

M = [1 -1];             %# mean vector
V = [.9 .4; .4 .3];     %# covariance matrix
p = [0.5 -1.5];         %# 2d-point
prob = mvnpdf(p,M,V);   %# probability P(p|mu,cov)

Функция MVNPDF предоставляется набором инструментов статистики.

person Amro    schedule 15.12.2010

Может быть, я совсем ошибаюсь, но разве это не то же самое, что просто спрашивать каждое измерение: нахожусь ли я внутри сигмы?

ПСЕВДОКОД:

foreach(dimension d)
    (M(d) - sigma(d) < p(d) < M(d) + sigma(d)) ?

Потому что вы хотите знать, находится ли p внутри каждого измерения вашего гауссова. Так что на самом деле это просто пространственная проблема, и ваш гауссиан ничего не должен с ней делать (кроме M и сигмы, которые являются просто расстояниями).

В MATLAB вы можете попробовать что-то вроде:

all(M - sigma < p < M + sigma)

Расстояние до того места может быть, где я не знаю функцию для евклидова расстояния. Возможно, dist работает:

dist(M, p)

Потому что M — это просто точка в пространстве и p тоже. Всего 2 вектора. А теперь последний. Вы хотите узнать расстояние в виде сигмы:

% create a distance vector and divide it by sigma
M - p ./ sigma

Думаю, это поможет.

person Marnix    schedule 15.12.2010
comment
Это решение не будет работать, так как оно не учитывает ковариацию (эллипс в некотором роде наклонен). Спасибо хоть! - person El-ad; 16.12.2010