1 votos

Interpretación de la deficiencia de rango en la optimización de Levenberg-Marquardt

Estoy resolviendo un problema de LSE no lineal que, dependiendo de los datos, tiene un grado de dependencia diferente entre los parámetros del modelo estimado. La dependencia se manifiesta, por ejemplo, como una deficiencia de rango del jacobiano.

Un ejemplo de este tipo de problema sería la adaptación de un $f(x)=be^{ax}+c$ a un conjunto de puntos de datos. Si estos puntos de datos forman una línea horizontal, el $a$ sería $0$ y parámetros $b$ y $c$ serían dependientes (ya que sólo podemos estimar su suma a partir de los datos).

Me gustaría poder analizar de alguna manera qué parámetros son dependientes y en qué grado. Tengo la sensación de que un SVD de la jacobiana podría ayudar, pero no tengo ni idea de cómo abordar esto.

EDITAR:

He hecho un pequeño programa de prueba en python 2.7 para el ejemplo anterior, con el cálculo de la matriz Corr, según la respuesta de vibe.

import sympy as sp
import numpy as np

def merge_dicts(a,b):
    c = a.copy()
    c.update(b)
    return c

a,b,c,x,y=sp.symbols("a b c x y")
params = [a,b,c]

fun = sp.exp(a*x)*b+c
residual = fun-y
diffs = [ sp.diff(residual,p) for p in params ]
print("diffs:\n",diffs)

sol = {a:0.0, b:10.0, c:-5.0}
data = [ {x:xv, y: float(fun.subs(merge_dicts(sol, {x:xv})))  } for xv in range(-2,5) ]
print("data:\n",data)

J = np.array([[ float(diffs[i].subs(merge_dicts(data[j], sol))) for i in range(len(diffs)) ] for j in range(len(data))] )

print("J:\n", J)
C = np.linalg.pinv(np.matmul(J.transpose(), J))
print("C:\n", C)

D = np.diag(np.sqrt(np.diag(C)))
print("D:\n", D)

Dinv = np.linalg.inv(D);
print("Corr:\n", np.matmul(np.matmul(Dinv, C), Dinv))

1voto

vibe Puntos 21

El SVD del Jacobiano para el problema que ha descrito probablemente tendrá un valor singular de cero, lo que le indica que uno de los parámetros del modelo (o una combinación lineal de parámetros del modelo) no está determinado por los datos. Sin embargo, no le dirá qué parámetro del modelo es el culpable.

Lo que quieres analizar es la matriz de covarianza, $$ C = (J^T J)^{-1} $$ Los elementos diagonales son las varianzas de los parámetros de su modelo $a,b,c$ y los elementos no diagonales dan las covarianzas entre los diferentes parámetros del modelo. Mi opinión es que para su problema usted encontraría que $Cov(b,c)$ es grande, lo que significa que son casi colineales. Lo ideal sería que los elementos no diagonales estuvieran cerca de cero, lo que indicaría que los parámetros son independientes entre sí.

En algunos casos, si los parámetros de su modelo tienen escalas muy diferentes, la matriz de covarianza puede ser engañosa, ya que lleva unidades. En este caso, también se puede mirar la matriz de correlación, que es la versión adimensional de la matriz de covarianza: $$ Corr = D^{-1} C D^{-1} $$ donde $D = \sqrt{\textrm{diag}(C)}$ . Aquí los elementos diagonales serán 1, y los elementos no diagonales le dan el coeficiente de correlación entre los diferentes parámetros del modelo.

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