4 votos

Derivada de la matriz de distancia por pares de Mahalanobis respecto a la matriz de transformación

Para un conjunto de observaciones vectoriales $x_i$ almacenado en la matriz $X$ me gustaría obtener el gradiente de la matriz de distancia de Mahalanobis por pares $D$ con respecto a la matriz de transformación de Mahalanobis $M$ ( $\frac{\partial D}{\partial M}$ ), dado que:

$D_{ij} = (x_i - x_j)^TM(x_i - x_j)$

edit: M debería ser semidefinido positivo, o alternativamente $M = A^T A$

He encontrado cómo la matriz de distancia euclidiana por pares se puede expresar como en una forma vectorizada ( Matriz de distancias por pares ), y cómo se puede obtener la distancia de Mahalanobis entre dos elementos con respecto a la matriz M ( Diferenciar la distancia mahalanobis ), pero no he sido capaz de juntarlo todo.

3voto

greg Puntos 156

$ \def\o{{\tt1}}\def\p{\partial} \def\L{\left}\def\R{\right} \def\LR#1{\L(#1\R)} \def\BR#1{\Big(#1\Big)} \def\bR#1{\big(#1\big)} \def\vecc#1{\operatorname{vec}\LR{#1}} \def\diag#1{\operatorname{diag}\LR{#1}} \def\Sym#1{\operatorname{Sym}\!\BR{#1}} \def\sym#1{\operatorname{Sym}\LR{#1}} \def\Diag#1{\operatorname{Diag}\LR{#1}} \def\trace#1{\operatorname{Tr}\LR{#1}} \def\qiq{\quad\implies\quad} \def\grad#1#2{\frac{\p #1}{\p #2}} \def\m#1{\left[\begin{array}{r}#1\end{array}\right]} \def\c#1{\color{red}{#1}} $ En primer lugar, defina algunas variables nuevas $$\eqalign{ B &= \tfrac 12D \\ y_k &= Mx_k \\ X &= \m{x_1&x_2&\ldots&x_n}\;\in{\mathbb R}^{m\times n} \\ Y &= \m{y_1&y_2&\,\ldots&\,y_n}\;= MX \qiq \c{dY = dM\,X} \\ J &=X\oslash X \qiq J_{ij}=\o\quad\big({\rm all\!-\!ones\;matrix}\big) \\ X &= J\odot X \\ {\cal D}_Y &= {\rm Diag}\BR{\!\vecc{Y}}\,\in{\mathbb R}^{mn\times mn} \\ }$$ donde $\{\odot,\oslash\}$ denotan multiplicación y división elemental/Hadamard.

Entonces reescribe el problema en notación matricial pura y calcular su diferencial. $$\eqalign{ 2B &= (X\odot Y)^TJ + J^T(X\odot Y) - X^TY - Y^TX \\ &= 2\,\Sym{J^T(X\odot{Y}) - X^T{Y}} \\ dB &= \Sym{J^T(X\odot{\c{dY}}) - X^T{\c{dY}}} \\ &= \Sym{J^T(X\odot\LR{\c{dM\,X}}) - X^T{\c{dM\,X}}} \\ }$$ donde $\;\sym{A} \doteq \tfrac 12\LR{A+A^T}$

En este punto, se puede calcular un gradiente por componentes $$\eqalign{ \grad{B}{M_{ij}} &= \Sym{J^T(X\odot\LR{E_{ij}\,X}) - X^T{E_{ij}\,X}} \\ }$$ donde $E_{ij}$ es una matriz de una sola entrada cuya $(i,j)$ elemento es $\o$ y todos los demás son cero.

En términos de la variable original $$\eqalign{ \grad{B}{M_{ij}} &= \frac 12 \LR{\grad{D}{M_{ij}}} \\ }$$ El problema con el gradiente solicitado $\LR{\grad DM}$ es que es un cuarto orden tensor que no puede escribirse en notación matricial estándar.

Actualización

Has añadido una restricción a tu pregunta original, es decir $$M=A^TA \qiq \c{dM=dA^TA+A^TdA}$$ El procedimiento para hallar el nuevo gradiente es sencillo. Se escribe la diferencial, se cambia la variable independiente de $P\to A$ y, a continuación, aislar el gradiente.

He aquí el cálculo del gradiente por componentes $$\eqalign{ dB &= \Sym{J^T(X\odot\LR{\c{dM\,X}}) - X^T\LR{\c{dM\,X}}} \\ &= \Sym{J^T(X\odot\LR{\c{dA^TAX+A^TdA\,X}} - X^T\LR{\c{dA^TAX+A^TdA\,X}}} \\ &= 2 \Sym{J^T\bR{\!\LR{AX}\odot\LR{dA\,X}\!} - X^TA^TdA\,X} \\ \grad{B}{A_{ij}} &= 2 \Sym{J^T\bR{\!\LR{AX}\odot\LR{E_{ij}X}\!}-X^TA^TE_{ij}X} \\ }$$ El documento enlazado es bastante bueno si lo comparamos con la mayoría Aprendizaje automático pero las matemáticas aún están lejos demasiado "a mano". Está dirigido a un público que solo quiere codificar la expresión del gradiente directamente en sus programas Python sin molestarse en comprobar las matemáticas.

Derivar el resultado de su gradiente utilizando la notación matricial sería un esfuerzo hercúleo. Incluso convertir su resultado en notación matricial sería muy difícil, porque la suma anidada viola la convención de suma habitual, ya que contiene una expresión con cuatro $i$ -índices y cuatro $j$ -índices. La notación convencional de índices sólo permite dos de cualquier índice.

Si quieres que alguien te descifre ese embrollo, entonces, como sugirió Steph, deberías publicar una nueva pregunta $-$ Dejaré que responda a esa pregunta.

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