2010-12-15 113 views
3

J'ai un gaussien de haute dimension avec la matrice M et la matrice de covariance V. Je voudrais calculer la distance du point p à M, en considérant V (I suppose que c'est la distance en écarts-types de p à partir de M?).Calculer la distance du point p au gaussien de grande dimension (M, V)

Phrasé différemment, je prends une ellipse un sigma loin de M, et je voudrais vérifier si p est à l'intérieur de cette ellipse.

+0

Essayez http://math.stackexchange.com/ – Jacob

Répondre

2

Si V est une matrice de covariance valide d'une gaussienne, il est alors symétrique positive définie et définit donc un produit scalaire valide. Par ailleurs inv(V) fait également.

Par conséquent, en supposant que M et p sont des vecteurs colonne, vous pouvez définir des distances comme:

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

la façon Matlab on réécrire d2 que (probablement quelques parenthèses inutiles):

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

La bonne chose est que lorsque V est la matrice unité, alors d1==d2 et correspond à la distance euclidienne classique. Pour trouver si vous devez utiliser d1 ou d2 est laissé comme un exercice (désolé, une partie de mon travail est l'enseignement). Ecrire la formule gaussienne multidimensionnelle et la comparer au cas 1D, puisque le cas multidimensionnel n'est qu'un cas particulier du 1D (ou effectuer une expérience numérique). NB: dans des espaces de très grandes dimensions ou pour de très nombreux points à tester, vous pouvez trouver une voie intelligente/rapide à partir des vecteurs propres et des valeurs propres de V (c'est-à-dire les axes principaux de l'ellipsoïde et leur variance correspondante).

Espérons que cela aide.

A.

+0

Cela semble être le cas. Je vous remercie! –

+0

La chose a un nom: [distance de Mahalanobis] (https://en.wikipedia.org/wiki/Mahalanobis_distance). :-) –

0

Peut-être que je suis complètement éteint, mais n'est-ce pas la même chose que de demander chaque dimension: Suis-je dans le sigma?

pseudocode:

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

Parce que vous voulez savoir si p est à l'intérieur toutes les dimensions de votre gaussienne. Donc en fait, c'est juste un problème d'espace et votre Gaussien n'a rien à faire avec ça (sauf pour M et sigma qui ne sont que des distances).

Dans Matlab, vous pouvez essayer quelque chose comme:

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

Une distance à cet endroit pourrait être, où je ne sais pas la fonction de la distance euclidienne. Peut-être que dist fonctionne:

dist(M, p) 

Parce que M est juste un point dans l'espace et p aussi bien. Juste 2 vecteurs. Et maintenant le dernier. Vous voulez connaître la distance sous une forme de sigma:

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

Je pense que cela fera l'affaire.

+0

Cette solution ne fonctionnera pas, car il ne prend pas en considération la covariance (l'ellipse est « tendancieuses », d'une manière). Merci quand même! –

2

Tenir compte calculer la probabilité du point compte tenu de la distribution normale:

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) 

La fonction MVNPDF est fourni par la boîte à outils Statistiques