12 votos

Cálculo eficaz y rápido de la distancia de Mahalanobis

Supongamos que tengo $n$ puntos de datos $x_1,\dots,x_n$ cada uno de los cuales es $p$ -dimensional. Sea $\Sigma$ sea la covarianza poblacional (no singular) de estas muestras. Con respecto a $\Sigma$ ¿cuál es la forma más eficiente conocida de calcular el vector de distancias de Mahalanobis al cuadrado (de $\vec 0$ ) de los n puntos de datos.

Es decir, queremos calcular el vector $(x_1^T\Sigma^{-1}x_1,\dots,x_n^T\Sigma^{-1}x_n)$ .

Cálculo de la inversa $\Sigma^{-1}$ parece ser bastante lento para matrices grandes. ¿Hay alguna forma más rápida?

0 votos

¿Puede dar referencias de esta información, por favor?

19voto

farzad Puntos 4180
  1. Sea $x$ ser uno de sus puntos de datos.

  2. Calcule el Cholesky descomposición $\Sigma=LL^\top$ .

  3. Defina $y=L^{-1}x$ .

  4. Compute $y$ por sustitución hacia delante en $Ly=x$ .

  5. La distancia de Mahalanobis al origen es la norma euclídea al cuadrado de $y$ :

$$ \begin{align} x^\top\Sigma^{-1}x &= x^\top(LL^\top)^{-1}x \\ &= x^\top(L^\top)^{-1}L^{-1}x \\ &= x^\top(L^{-1})^\top L^{-1}x \\ &= (L^{-1}x)^\top(L^{-1}x) \\ &= \|y\|^2. \end{align} $$

0 votos

Tuve un problema con la precisión de este algoritmo propuesto y creé una nueva pregunta: stats.stackexchange.com/questions/147654/

0 votos

Sin querer quitar nada de lo completa que es esta respuesta (he votado antes); especialmente porque el OP (@Lepidopteris) utiliza MATLAB yo diría que para sólo para fines de aplicación se debe utilizar x'* Sigma \ x donde efectivamente Sigma \ x se encargará de la inv(A) * x (por favor, no utilice nunca este comando posterior).

0 votos

¿Por qué dices que para la aplicación se debe utilizar x'* Sigma \ x? ¿Por qué chol no es una buena opción en MATLAB?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X