He descargado el código GPML Matlab más reciente GPML Matlab code y he leído la documentación y ejecuté la demostración de regresión sin ningún problema. Sin embargo, estoy teniendo dificultades para entender cómo aplicarlo a un problema de regresión al que me enfrento.
El problema de regresión se define de la siguiente manera:
Sea un vector de entrada y sea su objetivo correspondiente. El conjunto de entradas se organiza en una matriz y sus objetivos correspondientes se almacenan en una matriz , con \ mathbf {\ bar {y}} es el valor objetivo medio en \ mathbf {Y} .
Deseo entrenar un modelo GPR usando la función exponencial al cuadrado:
,
donde es igual a si y contrario. Los hiperparámetros son siendo el nivel de ruido supuesto en los datos de entrenamiento y es la escala de longitud.
Para entrenar el modelo, necesito minimizar la probabilidad marginal logarítmica negativa con respecto a los hiperparámetros:
donde c es una constante y la matriz es una función de los hiperparámetros (ver ecuación k (xi, xj) = ...).
Basado en la demostración dada en el sitio web GPML, mi intento de implementar esto usando el código GPML Matlab está a continuación.
covfunc = @covSEiso;
likfunc = @likGauss;
sn = 0.1;
hyp.lik = log(sn);
hyp2.cov = [0;0];
hyp2.lik = log(0.1);
hyp2 = minimize(hyp2, @gp, -100, @infExact, [], covfunc, likfunc, X1, Y1(:, n));
exp(hyp2.lik)
nlml2 = gp(hyp2, @infExact, [], covfunc, likfunc, X1, Y1(:, n));
[m s2] = gp(hyp2, @infExact, [], covfunc, likfunc, X1, Y1(:, n), X2);
Y2r(:, n) = m;
X1 contiene las entradas de entrenamiento
X2 contiene las entradas de prueba
Y1 contiene los objetivos de entrenamiento
Y2r son las estimaciones de la aplicación del modelo.
n es el índice utilizado para hacer retroceder cada elemento en el vector de salida
Dado el problema, ¿es esta la forma correcta de entrenar y aplicar el modelo GPR? Si no, ¿qué necesito cambiar?
covfunc = { 'covSum', { 'covSEiso' } }
ya que no veo cómo esto se ocupa de los datos ruidosos ahora, parece que la caja de herramientas ha cambiado bastante desde la última vez que la usé, la examinaré más de cerca más adelante .Creo que el problema puede ser uno de especificación errónea del modelo. Si sus objetivos son ángulos ajustados a + -180 grados, entonces el "proceso de ruido" para sus datos puede no ser lo suficientemente guasiano como para que la evidencia baysiana no sea una buena manera de optimizar los hiperparámetros. Por ejemplo, considere qué sucede cuando el "ruido" hace que la señal se envuelva. En ese caso, puede ser conveniente realizar la selección ya sea modelo minimizando el error de validación cruzada (hay una implementación de dominio público del método de Nelder-Mead el simplex aquísi no tiene la caja de herramientas de optimización). La estimación de rendimiento de validación cruzada no es tan sensible a la especificación errónea del modelo, ya que es una estimación directa del rendimiento de la prueba, mientras que la probabilidad marginal del modelo es la evidencia en apoyo del modelo dado que los supuestos del modelo son correctos. Vea la discusión que comienza en la página 123 del libro de Rasmussen y Williams.
Otro enfoque sería volver a codificar las salidas para que un modelo de ruido gaussiano sea más apropiado. Una cosa que podría hacer es alguna forma de reducción de dimensionalidad no supervisada, ya que hay relaciones no lineales entre sus objetivos (ya que solo hay una forma limitada en la que un cuerpo puede moverse), por lo que habrá una variedad de dimensiones más bajas que su los objetivos siguen vivos, y sería mejor hacer retroceder las coordenadas de esa variedad en lugar de los ángulos en sí (también puede haber menos objetivos de esa manera).
También algún tipo de análisis de Procrustes podría ser una buena idea para normalizar las diferencias entre los sujetos antes de entrenar el modelo.
Es posible que encuentre interesante el trabajo realizado por Neil Lawrence sobre la recuperación de posturas humanas. Recuerdo haber visto una demostración de esto en una conferencia hace unos años y quedé muy impresionado.
fuente