[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:04.00,Default,,0000,0000,0000,,Vamos a crear una regresión no lineal con los datos que se muestran aquí en los puntos azules. Dialogue: 0,0:00:04.00,0:00:10.00,Default,,0000,0000,0000,,Vamos a crear esta correlación roja y ajustar los parámetros de esta expresión no lineal. Dialogue: 0,0:00:10.00,0:00:21.00,Default,,0000,0000,0000,,Comenzamos con estos datos: tenemos xm y ym. Dialogue: 0,0:00:21.00,0:00:33.00,Default,,0000,0000,0000,,Queremos crear un nuevo modelo. Desde GEKKO importamos GEKKO y creamos un nuevo modelo con m = GEKKO(). Dialogue: 0,0:00:33.00,0:00:36.00,Default,,0000,0000,0000,,Ahí está nuestro nuevo modelo GEKKO. Dialogue: 0,0:00:36.00,0:00:38.00,Default,,0000,0000,0000,,Queremos configurar nuestra expresión. Dialogue: 0,0:00:38.00,0:00:45.00,Default,,0000,0000,0000,,La correlación que queremos ajustar es: Dialogue: 0,0:00:45.00,0:00:58.00,Default,,0000,0000,0000,,y = 0.1 * exp(a * x) Dialogue: 0,0:00:58.00,0:01:13.00,Default,,0000,0000,0000,,Esta es nuestra correlación no lineal que queremos ajustar. Dialogue: 0,0:01:13.00,0:01:24.00,Default,,0000,0000,0000,,Vamos a mantenerlo simple con un solo parámetro, pero podrías expandir esto a múltiples parámetros o ecuaciones si lo deseas. Dialogue: 0,0:01:24.00,0:01:30.00,Default,,0000,0000,0000,,x será igual a nuestros datos xm. Dialogue: 0,0:01:30.00,0:02:03.00,Default,,0000,0000,0000,,Creamos un parámetro a con un valor inicial, por ejemplo, 0.1, y permitimos que el optimizador lo ajuste. Dialogue: 0,0:02:03.00,0:02:15.00,Default,,0000,0000,0000,,Para nuestra salida, usamos una variable controlada en GEKKO con los valores de ym. Dialogue: 0,0:02:15.00,0:02:22.00,Default,,0000,0000,0000,,Indicamos que use las mediciones estableciendo status = 1. Dialogue: 0,0:02:22.00,0:02:37.00,Default,,0000,0000,0000,,Esto configura nuestros parámetros y variables con los datos en nuestro modelo. Dialogue: 0,0:02:37.00,0:02:42.00,Default,,0000,0000,0000,,Ahora configuramos nuestra ecuación: Dialogue: 0,0:02:42.00,0:02:49.00,Default,,0000,0000,0000,,y = 0.1 * exp(a * x) Dialogue: 0,0:02:49.00,0:03:03.00,Default,,0000,0000,0000,,Usamos m.exp() para que el solucionador basado en gradientes pueda calcular derivadas exactas de primer y segundo orden. Dialogue: 0,0:03:03.00,0:03:11.00,Default,,0000,0000,0000,,Ahora, establecemos la opción IMODE = 2 para indicar que estamos utilizando datos en estado estacionario. Dialogue: 0,0:03:11.00,0:03:29.00,Default,,0000,0000,0000,,Si deseas más información sobre los diferentes modos, te recomiendo consultar la documentación de GEKKO. Dialogue: 0,0:03:29.00,0:03:42.00,Default,,0000,0000,0000,,Estamos realizando una actualización de parámetros del modelo o regresión con datos en estado estacionario, por lo que IMODE = 2. Dialogue: 0,0:03:42.00,0:03:50.00,Default,,0000,0000,0000,,Continuamos con esto. Dialogue: 0,0:03:50.00,0:04:09.00,Default,,0000,0000,0000,,Ahora, resolvemos el modelo con m.solve(disp=False) para no mostrar la salida del solucionador. Dialogue: 0,0:04:09.00,0:04:23.00,Default,,0000,0000,0000,,Finalmente, imprimimos el valor de a. Dialogue: 0,0:04:23.00,0:04:26.00,Default,,0000,0000,0000,,Luego, graficamos los resultados. Dialogue: 0,0:04:26.00,0:04:50.00,Default,,0000,0000,0000,,Usamos xm y los valores predichos de y para trazar la línea roja de la correlación ajustada. Dialogue: 0,0:04:50.00,0:04:57.00,Default,,0000,0000,0000,,Esta es nuestra correlación regresada. Dialogue: 0,0:04:57.00,0:05:02.00,Default,,0000,0000,0000,,Ejecutamos una vez más y realizamos la regresión. Dialogue: 0,0:05:02.00,0:05:08.00,Default,,0000,0000,0000,,Resuelve y produce los valores regresados que puedes ver. Dialogue: 0,0:05:08.00,0:05:16.00,Default,,0000,0000,0000,,Parece que cometí un error con la leyenda. Dialogue: 0,0:05:16.00,0:05:27.00,Default,,0000,0000,0000,,Necesito establecer label='regression' para que no piense que quiero cambiar el eje y. Dialogue: 0,0:05:27.00,0:05:30.00,Default,,0000,0000,0000,,Ahí está la regresión y los datos. Dialogue: 0,0:05:30.00,0:05:49.00,Default,,0000,0000,0000,,Si deseas agregar otro parámetro, por ejemplo, b, para ver si obtienes un mejor ajuste, simplemente copias esto y agregas b. Dialogue: 0,0:05:49.00,0:05:57.00,Default,,0000,0000,0000,,Obtenemos el valor de b también. Dialogue: 0,0:05:57.00,0:06:14.00,Default,,0000,0000,0000,,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. Dialogue: 0,0:06:14.00,0:06:17.00,Default,,0000,0000,0000,,Este es un tutorial sobre regresión no lineal general. Dialogue: 0,0:06:17.00,0:06:27.00,Default,,0000,0000,0000,,Podemos usar regresión lineal, como mostramos en el video anterior, o regresión polinómica, que es otra forma de regresión lineal. Dialogue: 0,0:06:27.00,0:06:38.00,Default,,0000,0000,0000,,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. Dialogue: 0,0:06:38.00,0:06:45.00,Default,,0000,0000,0000,,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. Dialogue: 0,0:06:45.00,0:06:54.00,Default,,0000,0000,0000,,Si deseas cambiar eso, ve a m.options.EV_TYPE = 2 para usar la suma del error cuadrático. Dialogue: 0,0:06:54.00,0:07:03.00,Default,,0000,0000,0000,,Esto simplemente rehace la correlación con esa función objetivo diferente. Dialogue: 0,0:07:03.00,0:07:09.00,Default,,0000,0000,0000,,Obtendrás un resultado ligeramente diferente. Dialogue: 0,0:07:09.00,0:07:18.00,Default,,0000,0000,0000,,También puedes configurar la función objetivo tú mismo. Dialogue: 0,0:07:18.00,0:07:32.00,Default,,0000,0000,0000,,Por ejemplo, puedes definir una variable de estado o simplemente una variable y no establecer el estado. Dialogue: 0,0:07:32.00,0:07:41.00,Default,,0000,0000,0000,,Puedes tener una función objetivo que intentes minimizar. Dialogue: 0,0:07:41.00,0:07:49.00,Default,,0000,0000,0000,,Necesitamos cargar otro parámetro con los valores de ym. Dialogue: 0,0:07:49.00,0:08:09.00,Default,,0000,0000,0000,,Luego, podemos construir nuestra propia función objetivo, por ejemplo, (yp - y) / yp, y asegurarnos de que no cause problemas si yp es cero. Dialogue: 0,0:08:09.00,0:08:12.00,Default,,0000,0000,0000,,Esa es nuestra función objetivo. Dialogue: 0,0:08:12.00,0:08:19.00,Default,,0000,0000,0000,,Si queremos tener la diferencia normalizada, necesitamos elevar al cuadrado esta expresión. Dialogue: 0,0:08:19.00,0:08:26.00,Default,,0000,0000,0000,,Optimizamos una vez más. Dialogue: 0,0:08:26.00,0:08:28.00,Default,,0000,0000,0000,,Debería ejecutarse y darnos los resultados. Dialogue: 0,0:08:28.00,0:08:32.00,Default,,0000,0000,0000,,Ahí está el error cuadrático normalizado. Dialogue: 0,0:08:32.00,0:08:38.00,Default,,0000,0000,0000,,Supongo que esto debería estar al cuadrado. Dialogue: 0,0:08:38.00,0:08:41.00,Default,,0000,0000,0000,,Lo pondré dentro también, solo otra forma de hacerlo. Dialogue: 0,0:08:41.00,0:08:48.00,Default,,0000,0000,0000,,Será la diferencia fraccional entre los dos que minimizamos. Dialogue: 0,0:08:48.00,0:09:01.00,Default,,0000,0000,0000,,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. Dialogue: 0,0:09:01.00,0:09:08.00,Default,,0000,0000,0000,,Dependiendo del problema que estés resolviendo, podemos configurarlo de diferentes maneras. Dialogue: 0,0:09:08.00,0:09:12.00,Default,,0000,0000,0000,,Eso es todo para este tutorial sobre regresión. Dialogue: 0,0:09:12.00,0:09:17.00,Default,,0000,0000,0000,,El código fuente está publicado aquí. Dialogue: 0,0:09:17.00,0:09:22.00,Default,,0000,0000,0000,,Solo baja a "nonlinear regression" y verás el código fuente que puedes copiar. Dialogue: 0,0:09:22.00,0:09:36.00,Default,,0000,0000,0000,,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. Dialogue: 0,0:09:36.00,0:09:39.00,Default,,0000,0000,0000,,El próximo tema que vamos a abordar será el aprendizaje automático con redes neuronales. Dialogue: 0,0:09:39.00,0:10:00.00,Default,,0000,0000,0000,,También haremos una regresión allí y luego abordaremos la resolución de ecuaciones diferenciales y más temas de optimización.