< Return to Video

Nonlinear Regression with Python GEKKO

  • 0:00 - 0:04
    Vamos a crear una regresión no lineal con los datos que se muestran aquí en los puntos azules.
  • 0:04 - 0:10
    Vamos a crear esta correlación roja y ajustar los parámetros de esta expresión no lineal.
  • 0:10 - 0:21
    Comenzamos con estos datos: tenemos xm y ym.
  • 0:21 - 0:33
    Queremos crear un nuevo modelo. Desde GEKKO importamos GEKKO y creamos un nuevo modelo con m = GEKKO().
  • 0:33 - 0:36
    Ahí está nuestro nuevo modelo GEKKO.
  • 0:36 - 0:38
    Queremos configurar nuestra expresión.
  • 0:38 - 0:45
    La correlación que queremos ajustar es:
  • 0:45 - 0:58
    y = 0.1 * exp(a * x)
  • 0:58 - 1:13
    Esta es nuestra correlación no lineal que queremos ajustar.
  • 1:13 - 1:24
    Vamos a mantenerlo simple con un solo parámetro, pero podrías expandir esto a múltiples parámetros o ecuaciones si lo deseas.
  • 1:24 - 1:30
    x será igual a nuestros datos xm.
  • 1:30 - 2:03
    Creamos un parámetro a con un valor inicial, por ejemplo, 0.1, y permitimos que el optimizador lo ajuste.
  • 2:03 - 2:15
    Para nuestra salida, usamos una variable controlada en GEKKO con los valores de ym.
  • 2:15 - 2:22
    Indicamos que use las mediciones estableciendo status = 1.
  • 2:22 - 2:37
    Esto configura nuestros parámetros y variables con los datos en nuestro modelo.
  • 2:37 - 2:42
    Ahora configuramos nuestra ecuación:
  • 2:42 - 2:49
    y = 0.1 * exp(a * x)
  • 2:49 - 3:03
    Usamos m.exp() para que el solucionador basado en gradientes pueda calcular derivadas exactas de primer y segundo orden.
  • 3:03 - 3:11
    Ahora, establecemos la opción IMODE = 2 para indicar que estamos utilizando datos en estado estacionario.
  • 3:11 - 3:29
    Si deseas más información sobre los diferentes modos, te recomiendo consultar la documentación de GEKKO.
  • 3:29 - 3:42
    Estamos realizando una actualización de parámetros del modelo o regresión con datos en estado estacionario, por lo que IMODE = 2.
  • 3:42 - 3:50
    Continuamos con esto.
  • 3:50 - 4:09
    Ahora, resolvemos el modelo con m.solve(disp=False) para no mostrar la salida del solucionador.
  • 4:09 - 4:23
    Finalmente, imprimimos el valor de a.
  • 4:23 - 4:26
    Luego, graficamos los resultados.
  • 4:26 - 4:50
    Usamos xm y los valores predichos de y para trazar la línea roja de la correlación ajustada.
  • 4:50 - 4:57
    Esta es nuestra correlación regresada.
  • 4:57 - 5:02
    Ejecutamos una vez más y realizamos la regresión.
  • 5:02 - 5:08
    Resuelve y produce los valores regresados que puedes ver.
  • 5:08 - 5:16
    Parece que cometí un error con la leyenda.
  • 5:16 - 5:27
    Necesito establecer label='regression' para que no piense que quiero cambiar el eje y.
  • 5:27 - 5:30
    Ahí está la regresión y los datos.
  • 5:30 - 5:49
    Si deseas agregar otro parámetro, por ejemplo, b, para ver si obtienes un mejor ajuste, simplemente copias esto y agregas b.
  • 5:49 - 5:57
    Obtenemos el valor de b también.
  • 5:57 - 6:14
    Si obtienes un mejor ajuste usando un parámetro adicional, parece que fue casi cero, pero es -0.033, como puedes ver en los valores de los parámetros.
  • 6:14 - 6:17
    Este es un tutorial sobre regresión no lineal general.
  • 6:17 - 6:27
    Podemos usar regresión lineal, como mostramos en el video anterior, o regresión polinómica, que es otra forma de regresión lineal.
  • 6:27 - 6:38
    Una cosa a tener en cuenta con la regresión no lineal es que muchas correlaciones son en realidad lineales en el espacio de parámetros, por lo que puedes reorganizarlas y hacer una regresión lineal.
  • 6:38 - 6:45
    Otra cosa única del paquete GEKKO es que, por defecto, utiliza la suma del error absoluto en lugar de la suma del error cuadrático.
  • 6:45 - 6:54
    Si deseas cambiar eso, ve a m.options.EV_TYPE = 2 para usar la suma del error cuadrático.
  • 6:54 - 7:03
    Esto simplemente rehace la correlación con esa función objetivo diferente.
  • 7:03 - 7:09
    Obtendrás un resultado ligeramente diferente.
  • 7:09 - 7:18
    También puedes configurar la función objetivo tú mismo.
  • 7:18 - 7:32
    Por ejemplo, puedes definir una variable de estado o simplemente una variable y no establecer el estado.
  • 7:32 - 7:41
    Puedes tener una función objetivo que intentes minimizar.
  • 7:41 - 7:49
    Necesitamos cargar otro parámetro con los valores de ym.
  • 7:49 - 8:09
    Luego, podemos construir nuestra propia función objetivo, por ejemplo, (yp - y) / yp, y asegurarnos de que no cause problemas si yp es cero.
  • 8:09 - 8:12
    Esa es nuestra función objetivo.
  • 8:12 - 8:19
    Si queremos tener la diferencia normalizada, necesitamos elevar al cuadrado esta expresión.
  • 8:19 - 8:26
    Optimizamos una vez más.
  • 8:26 - 8:28
    Debería ejecutarse y darnos los resultados.
  • 8:28 - 8:32
    Ahí está el error cuadrático normalizado.
  • 8:32 - 8:38
    Supongo que esto debería estar al cuadrado.
  • 8:38 - 8:41
    Lo pondré dentro también, solo otra forma de hacerlo.
  • 8:41 - 8:48
    Será la diferencia fraccional entre los dos que minimizamos.
  • 8:48 - 9:01
    Hay muchas formas diferentes que puedes usar para la función objetivo: suma del error absoluto, suma del error cuadrático para esta regresión no lineal.
  • 9:01 - 9:08
    Dependiendo del problema que estés resolviendo, podemos configurarlo de diferentes maneras.
  • 9:08 - 9:12
    Eso es todo para este tutorial sobre regresión.
  • 9:12 - 9:17
    El código fuente está publicado aquí.
  • 9:17 - 9:22
    Solo baja a "nonlinear regression" y verás el código fuente que puedes copiar.
  • 9:22 - 9:36
    No recomiendo simplemente copiar eso, pero usa el enlace de código git que te dará una forma en bruto, solo texto, y puedes pegar eso y probarlo, modificarlo como desees.
  • 9:36 - 9:39
    El próximo tema que vamos a abordar será el aprendizaje automático con redes neuronales.
  • 9:39 - 10:00
    También haremos una regresión allí y luego abordaremos la resolución de ecuaciones diferenciales y más temas de optimización.
Title:
Nonlinear Regression with Python GEKKO
Description:

more » « less
Video Language:
English
Duration:
09:50

Spanish subtitles

Revisions