Question

J'ai une gaussienne dimensionnelle avec une moyenne M et covariance matrice V. Je voudrais calculer la distance du point p à M, en V en considération (je suppose que c'est la distance dans les écarts-types de p de M?).

Phrasée différentiellement, je prends une ellipse une sigma à une distance de M, et souhaite vérifier si p est égal à l'intérieur de cette ellipse.

Était-ce utile?

La solution

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

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));

une façon Matlab réécrivaient d2as (probablement quelques parenthèses inutiles de):

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

La bonne chose est que lorsque V est la matrice unitaire, d1==d2and il correspond à la distance euclidienne classique. Pour trouver wether vous devez utiliser d1 ou d2is à titre d'exercice (désolé, une partie de mon travail est l'enseignement). Écrivez la formule gaussienne multidimensionnelle et comparer le cas 1D, puisque le cas multidimensionnel est qu'un cas particulier du 1D (ou effectuer une expérience numérique).

NB: dans des espaces très grande dimension ou pour un très grand nombre de points à tester, vous pourriez trouver un moyen intelligent / plus rapide des vecteurs propres et valeurs propres de V (à savoir les principaux axes de l'ellipsoïde et leur variance correspondante)

Hope this helps.

A.

Autres conseils

Considérons le calcul de la probabilité que le point donné 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 assurée par la boîte à outils statistiques

Peut-être que je suis tout à fait éteint, mais pas la même chose que simplement demander pour chaque dimension: Suis-je à l'intérieur du 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 gaussienne a pas à quoi que ce soit avec elle (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 les travaux dist:

dist(M, p)

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

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

Je pense que cela va faire l'affaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top