| Vocero |
Transcripción |
| Lucas |
Bien, gracias a todos por venir a escuchar mi charla. Me llamo Lucas Beverlin. Soy estadístico en Intel. |
| |
Y hoy voy a hablar sobre el uso de JMP para comparar modelos de varios entornos. |
| |
Bien, actualmente JMP 15 Pro es lo último y lo mejor que JMP tiene en el mercado y, si quieres adaptar el modelo, tienen varias herramientas diferentes para hacerlo. |
| |
Existe la plataforma de modelos de ajuste. Existe la plataforma neuronal para particiones de redes neuronales. Si busca árboles de clasificación y regresión, la plataforma no lineal para modelado no lineal y muchas más. |
| |
Y entonces, dentro de JMP 15 creo que salió en 12 o 13, pero esta plataforma de comparación de modelos es una herramienta muy ingeniosa que puedes usar para comparar |
| |
El modelo se adapta a varias plataformas dentro de JMP. Por lo tanto, si tienes un árbol y una red neuronal y no estás seguro de cuál es mejor, podrías alternar entre ambos. Pero ahora con esto, |
| |
Tienes todo en la misma pantalla. Es muy rápido y fácil saber si esto es mejor que aquello, etc. |
| |
Dicho esto, JMP puede adaptarse a muchas cosas, pero lamentablemente no a todo. Por lo tanto, solo daré algunas ideas de algunas cosas que no encajan. Por ejemplo, |
| |
Aquellos que hacen mucho aprendizaje automático e IA podrían adaptar algo como un codificador automático o una red neuronal convolucional que generalmente requiere muchas funciones de activación o sí, muchos nodos de capas ocultas. |
| |
otras funciones de activación distintas a las que ofrece JMP, por lo que JMP no podrá hacer mucho de eso dentro de JMP. |
| |
Otra opción es la llamada regresión de búsqueda de proyección. Otra opción son los splines de regresión adaptativa multivariante. Lamentablemente, hay algunas cosas que JMP no puede hacer. |
| |
R, Python y MATLAB. |
| |
Hay muchos más por ahí. |
| |
Pero me centraré en esos tres. Dicho esto, las ideas que voy a tratar aquí deben integrarse en C++, Java, Rust o cualquier otro lenguaje. |
| |
Me viene a la mente que deberías poder usar muchos de ellos. |
| |
Como ya he dicho, también podemos usar la plataforma de comparación de modelos para comparar con otros programas. ¿Qué necesitas? |
| |
Entonces, las dos cosas importantes que vas a necesitar son las predicciones del modelo del software que uses para ajustar el modelo. |
| |
Y, en general, cuando realizamos ajustes de modelos, particularmente con modelos más grandes, podemos dividir los datos en conjuntos de prueba y/o validación de entrenamiento. |
| |
Vas a necesitar algo que le diga a todo el software cuál es entrenamiento, cuál es validación, cuál es prueba, porque vas a querer que sean consistentes cuando estés comparando los ajustes. |
| |
Bien, entonces la razón más importante por la que elegí R, Python y MATLAB para centrarnos en esta charla es que resulta que JMP y el lenguaje de scripting pueden realmente crear sus propias sesiones de R y ejecutar código desde ellas. |
| |
Así que esta imagen aquí muestra muy rápidamente si quisiera ajustar un modelo de regresión lineal a alguna salida. |
| |
Al conjunto de datos de vivienda de Boston. Trabajaré con más detalle con ese conjunto de datos más adelante. |
| |
Pero si quisieras ajustar rápidamente un modelo de regresión lineal en R y obtener los valores predictivos, puedes hacerlo. Claro que puedes hacerlo con JMP. Pero solo para dar una idea muy simple. |
| |
Entonces, |
| |
Una cosa a tener en cuenta: estoy usando R 3.6.3, pero JMP puede manejar cualquier cosa siempre que sea mayor que 2.9. |
| |
De forma similar, con Python, puedes crear tu propia sesión de Python. Aquí la imagen muestra cómo ajusté la regresión lineal con Python. No voy a explicar todas las líneas de código, pero ya entiendes la idea básica. |
| |
Ahora bien, con Python, por supuesto, hay que tener cuidado, ya que la versión más reciente es la 3.8.5. Pero si se usa Anaconda para instalar cosas, JMP tiene problemas para comunicarse con ella cuando es superior a la 3.6, así que... |
| |
ya que estoy usando 3.6.5 para esta demostración. |
| |
Y por último, también podemos crear nuestra propia sesión de MATLAB. |
| |
Aquí estoy usando MATLAB 2019b. Pero, básicamente, si tu versión de MATLAB se ha publicado en los últimos siete u ocho años, debería funcionar perfectamente. |
| |
Bien, ¿cómo conectamos todo? En realidad, veremos un proceso de cuatro pasos. Primero, queremos ajustar cada modelo. Enviaremos a cada software los datos y el conjunto al que pertenece cada observación. |
| |
Una vez que tengamos los modelos ajustados, queremos generar esos ajustes y sus predicciones y agregarlos a una tabla de datos que JMP pueda ver. |
| |
Así que, por supuesto, mi advertencia es: asegúrate de nombrar cosas que puedas identificar dónde o cómo encajaste en el modelo. Pronto tendré ejemplos de ambos. |
| |
Así que, el tercer paso, dependiendo del modelo, puede que quieras consultar algunos diagnósticos del modelo. Solo porque un modelo encaja... parece encajar bien según los números; basta con mirar el gráfico de residuos, por ejemplo, para descubrir rápidamente... |
| |
El área de mayor interés no encaja muy bien. |
| |
O hay algún problema con los residuos, etc. Así que también mostraremos cómo generar ese tipo de información. |
| |
Y por último, utilizaremos la plataforma de comparación de modelos para reunir todo en una gran tabla para comparar números, mucho más fácilmente en lugar de estar yendo y viniendo una y otra vez. |
| |
Bien, ahora desglosaremos los pasos con más detalle. Para el primer paso, donde realizamos el ajuste del modelo, tenemos básicamente dos opciones. Primero, podemos indicarle a JMP mediante JSL que llame al software que elijamos. |
| |
Envíale los datos y el código para que encaje. De hecho, voy a dejar esto por un momento y hacer exactamente eso. |
| |
Entonces, como puedes ver aquí, tengo un código para llamar a R. |
| |
Una vez hecho, llamaré a Python y, una vez hecho, a MATLAB y luego lo uniré todo. Hablaré más sobre el código en breve, pero tardará probablemente entre tres y cuatro minutos en ejecutarse. Así que lo haré ahora. |
| |
Y volveremos a él cuando estemos listos. |
| |
Nuestra otra opción es crear un conjunto de datos con la validación. Creamos un conjunto de datos con la columna de validación y/o una columna de prueba, según la cantidad de... |
| |
Los conjuntos dividían nuestros datos. Estamos programados para ejecutar cualquier software que necesitemos, y por supuesto, la salida de ese software es la que necesitamos. |
| |
Así que, por supuesto, algunas advertencias. Asegúrate de que el software que uses realmente tenga lo necesario para ajustar el modelo. |
| |
Asegúrate de que el modelo haya terminado de ajustarse antes de intentar compararlo con otras cosas. |
| |
Asegúrese de que el formato de salida sea compatible con JMP. Afortunadamente, JMP admite bastantes formatos, así que esa no es la principal de las cuatro advertencias. |
| |
Pero como les advertí anteriormente, asegúrense de que las predicciones de cada modelo correspondan a las observaciones correctas del conjunto de datos original. |
| |
Y eso nos lleva de nuevo a si es entrenamiento, si es una observación de entrenamiento, cuando la ajustas en JMP, |
| |
Es mejor que sea una observación de entrenamiento al integrarla en cualquier software. Si se trata de una validación en JMP, se realizará la validación en otro lugar. Si se trata de una prueba en JMP, se realizará la prueba en otro lugar. |
| |
Así que asegúrese de que todo corresponda correctamente, porque lo último que queremos descubrir es mirar los conjuntos de prueba y decir: "Este encajó mucho mejor". Bueno, es porque las observaciones que encajaron en él tenían ponderaciones diferentes y no tenían valores atípicos reales. Así que eso termina distorsionando su razonamiento. |
| |
Una palabra de precaución, disculpe, una palabra de precaución ahí. |
| |
Bien. Como ya mencioné, tengo un ejemplo que estoy ejecutando en segundo plano. Quiero dar algunos detalles sobre lo que estoy haciendo. |
| |
Resulta que voy a integrar redes neuronales en R, Python y MATLAB. Para ello, dentro de R, necesito instalar dos paquetes, además de la instalación base: Keras y Tensorflow. |
| |
numpy, pandas y matplotlib. |
| |
Numpy permite realizar cálculos con bastante facilidad; Pandas, Pandas, para manipular datos; y Matplotlib debería ser bastante sencillo para crear gráficos. Y en MATLAB utilizo las herramientas de aprendizaje profundo, aunque no tengas acceso a ellas. |
| |
Bien. Paso dos: queremos añadir predicciones a la tabla de datos de JMP. Si usas JMP para llamar al software, puedes usar código JSL para recuperar esas predicciones y añadirlas a una tabla de datos para compararlas posteriormente. |
| |
Entonces, la otra forma de hacerlo es que el software se ejecute por sí solo y guarde el resultado; puede indicarle rápidamente a JMP que extraiga el archivo de salida y luego haga alguna manipulación para llevar las predicciones a cualquier tabla de datos que tenga almacenando sus resultados. |
| |
Ahora que también podemos leer los gráficos de diagnóstico, generalmente guardo esos gráficos como archivos gráficos. En mi caso, serán archivos PNG. Pero, por supuesto, cualquiera que sea... |
| |
Gráficos que puedes usar. JMP no puede abarcar todos los formatos, pero creo que PNG, que mapea archivos JPG y otros, cubre los más comunes. |
| |
Entonces, la segunda nota que utilizo es para la plataforma de comparación de modelos, pero para ayudar a identificar qué modelo se ajusta a usted y dónde lo ajusta, |
| |
Generalmente recomiendo agregar la siguiente propiedad a cada columna de predicción. Como vemos aquí, al enviar la tabla de datos de interés, esta propiedad se denomina "predicción". |
| |
Y entonces aquí tenemos lo que sea que estés usando para predecir cosas (ahora, aquí en valor probablemente no sea la mejor opción), pero |
| |
Pero con este creador, esto me indica qué software usé para crear este modelo. Así que aquí usé R. Muestra R, así que cabe en la pantalla. Python y MATLAB eran un poco largos, pero podemos poner la cadena que queramos. |
| |
Los verás cuando revise el código con un poco más de detalle aquí en breve. |
| |
Esto resulta útil porque también integraré varios modelos en R más adelante. Así, si elijo correctamente los nombres de las columnas y tengo varias creadas por R, aún sé qué modelo estoy viendo. |
| |
Bien, así es como se ve el cuadro de diálogo de comparación de modelos típico. |
| |
Algo que quiero destacar es que, a grandes rasgos, así se vería si hiciera clic al final del ajuste del modelo. Como pueden ver, tengo varios predictores. Tengo redes neuronales para MATLAB, Python y R. |
| |
Varias formas de predicción; solía usar JMP para ajustar algunas cosas. |
| |
Ahora, muchas veces lo que la gente hará es poner esta columna de validación como un grupo, |
| |
Para agrupar la validación del entrenamiento y la prueba. De hecho, me gusta más el resultado cuando lo incluyo en la declaración "By". Lo mostraré más adelante. Pero puedes incluirlo en una de las dos opciones. |
| |
Pero me gusta más el resultado de esta manera, en resumidas cuentas. |
| |
Así que esta es la razón más importante por la que ahora puedo verlo claramente, todo esto es entrenamiento, |
| |
Estas son todas las validaciones (no se deben ver por los encabezados) y estas son todas las pruebas. |
| |
Si usas la validación como variable de grupo, obtendrás una tabla grande con 21 entradas. Ahora, habrá una columna adicional. Indica "prueba de validación de entrenamiento" o, en mi caso, será 012, pero |
| |
De esta manera, con las palabras, no tengo que pensar tanto. No tengo que explicarle a nadie qué significa 012, etc. Por eso tomé esa decisión. |
| |
Bien, en el ejemplo que voy a desglosar, usaré el conjunto de datos clásico de vivienda de Boston. Este está incluido en JMP. Por eso no lo incluí como archivo en mi presentación, ya que si tienes JMP, ya lo tienes. |
| |
Así, Harrison y Rubinfeld tenían varios predictores del valor medio de la casa, como la tasa de criminalidad per cápita, la proporción de acres de negocios no minoristas por ciudad, |
| |
número promedio de habitaciones dentro de lo que sea que estés tratando de comprar, proporción de alumnos por profesor por ciudad (por lo tanto, si hay muchos profesores y no tantos estudiantes, eso generalmente significa que una mejor educación es lo que mucha gente busca) |
| |
encontrado) y varios más. No voy a intentar repasar los 13 aquí. |
| |
Bien, permítanme darles algunos antecedentes sobre los modelos que revisé. Luego, profundizaré en el código JSL y cómo lo adapté todo. |
| |
He analizado algunos modelos. Primero, el modelo de regresión lineal por excelencia. Aquí ven una regresión lineal simple. Simplemente ajusté el valor de la mediana a, aparentemente, la tasa impositiva. |
| |
Pero por supuesto utilizaré una regresión lineal múltiple y los utilizaré todos. |
| |
Entonces, |
| |
Pero con 13 predictores diferentes, y sabiendo que algunos de ellos podrían estar correlacionados entre sí, decidí que tal vez valdría la pena analizar algunos otros tipos de regresión. |
| |
Una de ellas es la llamada regresión puente. En realidad, se trata de una regresión lineal con una restricción adicional que... |
| |
Los valores cuadrados de mis parámetros no pueden ser mayores que alguna constante. |
| |
Puedo... resulta que en realidad puedo reescribir esto como un problema de optimización donde algún valor de lambda corresponde a algún valor de C. |
| |
Así que simplemente estoy tratando de minimizar esto con este término de penalización adicional, a diferencia de los mínimos cuadrados típicos que estamos acostumbrados a ver. |
| |
Ahora bien, esto se llama método de contracción porque, claro, a medida que lo hago cada vez más pequeño, se acercará cada vez más a cero. Por lo tanto, es necesario reflexionar sobre cuán restrictivo quiero que sea. |
| |
Ahora, con la reducción, todos se irán acercando poco a poco a cero. Pero con otro tipo de término de penalización, puedo eliminar algunos términos por completo. |
| |
Y puedo usar algo llamado lazo. La restricción aquí es que, en lugar de las estimaciones de los parámetros al cuadrado, simplemente tomaré la suma del valor absoluto de esas estimaciones. |
| |
Y resulta que lo que realmente sucederá es que aquellos que son muy débiles tendrán sus estimaciones de parámetros establecidas en cero, lo que en cierto modo funciona como... |
| |
eliminación, por así decirlo, de términos sin importancia. |
| |
Para ilustrar brevemente el efecto de las regresiones de lazo y cresta, el círculo representa el término de penalización en la regresión de cresta. |
| |
Aquí observamos el espacio de parámetros. Por lo tanto, las verdaderas estimaciones de mínimos cuadrados estarían aquí. Por lo tanto, no estamos llegando a ese punto, debido a esta restricción adicional. |
| |
Así que, al final, encontramos dónde... dónde obtenemos el valor mínimo que toca el círculo, básicamente. Y así, estas serían nuestras estimaciones de los parámetros de regresión de cresta. |
| |
Para el lazo, el dibujo es similar, pero ahora, con el valor absoluto, se ve más como un diamante que como un círculo. Tengan en cuenta que esto es bidimensional; por supuesto, vamos a analizar las hiperesferas y todas esas formas. |
| |
Pero pueden ver aquí, noten que toca justo en la punta del diamante. Y entonces, en este caso, beta uno es cero. Así es como se eliminan los términos. |
| |
Bien, otra cosa que veremos es lo que se llama un árbol de regresión. JMP usa las plataformas de partición para esto. Para una breve demostración de lo que esto muestra, tengo todos mis datos. |
| |
Y entonces mi primera pregunta que me haré es, ¿cuántas habitaciones hay en la vivienda?, y sé que no puedo tener 0,943 de una habitación, así que básicamente, |
| |
Tengo seis habitaciones o menos. Así que, baja por esta parte del árbol, mejor no. Si tengo siete habitaciones o más, esto me indica inmediatamente que voy a predecir mi mediana. |
| |
El valor debe ser 37. Recuerde que está en decenas de miles de dólares, así que gane $370,000. |
| |
Si es menor que siete, entonces la siguiente pregunta que hice es, bueno, ¿qué tan grande es lstat? |
| |
Entonces, si es mayor o igual a 14,43, miraré este nodo y, de repente, mis estimaciones de vivienda media serán de alrededor de 150.000 dólares, y si vengo aquí, serán alrededor de 233.000 dólares. |
| |
Lo que realmente hacen los árboles de regresión es dividir el espacio de entrada en diferentes áreas. Y damos la misma predicción a cada valor dentro de esa área. |
| |
Entonces, puedes ver aquí que he dividido... ahora, en este caso, estoy tomando una bidimensional porque es más fácil de dibujar... |
| |
Y así pueden ver este árbol, donde primero miro x1. Ahora miren x2 y hagan otra pregunta sobre x1 y otra sobre x2, y así es como termino particionado el espacio de entrada. |
| |
Ahora, cada uno de estos cinco tendrá un valor de predicción. Y así es básicamente como se ve. Lo veo desde arriba. Obtendré exactamente esto. Pero pueden ver aquí que... |
| |
La predicción es un poco diferente dependiendo de cuál de las cinco áreas sea correcta. |
| |
Ahora, no voy a entrar en muchos detalles sobre cómo colocar exactamente uno de estos, pero |
| |
James, Witten, Tibshirani y Friedman aportan algo; Leo ??? escribió el libro seminal sobre el tema, así que puedes echarle un vistazo allí. |
| |
A continuación, hablaré de las redes neuronales, que se utilizan mucho en el aprendizaje automático y otras áreas hoy en día. Esto ofrece una representación visual de cómo se ve una red neuronal. Aquí, esta representación visual solo utiliza cinco y trece entradas al pasarlas. |
| |
A esta capa oculta. Y cada una de ellas se transforma mediante una función de activación. |
| |
Y para cada una de estas funciones de activación, obtienes una salida y usaremos... |
| |
Muchas veces simplemente usaremos una regresión lineal de estos resultados para predecir el valor medio. |
| |
Bueno, entonces |
| |
En realidad, las redes neuronales son modelos no lineales, al fin y al cabo, y se llaman redes neuronales porque la representación general es cómo vemos a las neuronas funcionando dentro del cerebro humano. |
| |
De esta manera, cada entrada puede pasarse a nodos en una capa oculta. En esta capa, las entradas se procesan mediante una función de activación y se calcula una salida. Cada salida puede pasarse a un nodo en otra capa oculta o ser una salida de la red. |
| |
Ahora, dentro de JMP, solo se permiten dos capas ocultas. |
| |
La verdad sea dicha, en cuanto a crear una red neuronal, no hay nada que diga que no puedes tener 20 para todo ese tiempo. |
| |
Nos preocupa ahora. A decir verdad, existe una teoría estadística que sugiere que podemos aproximar cualquier función continua, |
| |
Dadas algunas condiciones de contorno, con dos capas ocultas. Probablemente por eso JMP tomó esa decisión. |
| |
lineal, tangente hiperbólica y base radial gaussiana. De hecho, |
| |
En estos nodos, observen la pequeña curva. Creo que corresponde a la función tangente hiperbólica; lineal será una línea recta ascendente; y la base radial gaussiana, creo, se parecerá más a una curva normal. |
| |
Esa es la plataforma de red neuronal. La última que veremos es algo llamado regresión de proyección-persecución. Quería mostrar algo que JMP simplemente no puede hacer, solo para dar un ejemplo. |
| |
La regresión de proyección-persecución fue un modelo propuesto originalmente por Jerome Friedman y Steutzle en Stanford. Su modelo realiza predicciones de la forma "y" igual a la suma de beta i, f sub i y una transformación lineal de las entradas. |
| |
En realidad, esto es algo similar a una red neuronal. Aquí tienes una capa oculta con k nodos, cada uno con una función de activación fi. |
| |
L. Resulta que con la regresión de proyección, en realidad también vamos a estimar estos f sub i. |
| |
Generalmente, se trata de un ajuste más suave o spline. Normalmente, las funciones f sub i se denominan funciones de cresta. Tenemos alfas, betas y funciones F que necesitamos optimizar. Por lo tanto, generalmente se realiza un ajuste por etapas. No entraré en detalles en este momento. |
| |
Bueno, entonces he revisado todos mis modelos. |
| |
Ahora voy a mostrar algunos resultados y espero que todo se vea bien. Algo que voy a tener en cuenta antes de empezar con JMP es que... |
| |
Es muy difícil establecer valores de referencia para las redes neuronales en R, Python o Keras. Así que tengan en cuenta que si ejecutan mi código, probablemente no obtendrán exactamente lo mismo que yo, pero debería ser bastante parecido. Dicho esto, |
| |
Veamos qué obtuvimos. Este fue el resultado. Ahora bien, desafortunadamente, parece que las cosas no han funcionado a la perfección. |
| |
Entonces, |
| Lucas |
¿Qué tengo aquí? Tengo mi entrenamiento, mi validación y mi prueba. Y vemos rápidamente que uno de estos modelos no encajaba bien. Desafortunadamente, algo terrible ocurrió con la red neuronal de R. |
| |
Debió haber quedado atrapado en un punto defectuoso en el espacio de entrada para empezar, etc. Así que no encajaba bien en un modelo. |
| |
Lamentablemente, los parámetros iniciales de los modelos no lineales son importantes; en algunos casos, nos perjudican. |
| |
Pero si analizamos todo lo demás, todo parece encajar bastante bien. Ahora bien, lo que sí encaja bastante bien, podemos discutirlo, pero veo R cuadrados, uno por encima de 0,5. Veo la raíz cuadrada promedio. |
| |
Los errores al cuadrado rondan el 5%, e incluso nuestros errores absolutos promedio rondan el 3%. En cuanto al entrenamiento, parece que las regresiones de búsqueda de proyección obtuvieron los mejores resultados. |
| |
Si bajo al conjunto de datos de validación, todavía parece R |
| |
La búsqueda de proyección obtuvo el mejor resultado. Pero si analizamos el conjunto de datos de prueba, de repente, no, la regresión de búsqueda de proyección quedó en segundo lugar, suponiendo que ignoramos la red neuronal de R, la segunda peor. |
| |
Muchas veces, en un marco como este, observaremos el conjunto de datos de prueba más cercano porque no se usó de ninguna manera para determinar el ajuste del modelo. |
| |
Y vemos en base a eso que parece que... |
| |
La regresión de cresta de JMP se ajusta mejor. |
| |
Podemos ver aquí arriba que su R cuadrado era .71 aquí, antes era aproximadamente .73, y aproximadamente .73 aquí, por lo que podemos ver que se ajusta de manera consistente. |
| |
Lo mismo ocurre en los tres conjuntos de datos. Así que, si tuviera que tomar una decisión, basándome solo en lo que veo en este momento, probablemente optaría por... |
| |
La regresión de cresta. Dicho esto, tenemos un montón de diagnósticos y demás aquí. Si quiero ver qué sucedió con esa red neuronal de R, |
| |
Puedo ver rápidamente que algo sucedió a solo unos pasos. Como pueden ver, el ajuste es pésimo, porque prácticamente todo está previsto en unos 220 mil. |
| |
Entonces sabemos que algo salió mal durante la instalación. |
| |
Vimos que la regresión de cresta parecía la mejor. Veamos qué genera. En un momento mostraré rápidamente mi código JSL. |
| |
Muestra cómo hice todo esto, pero aquí están las estimaciones de los parámetros de la regresión de cresta. Podemos ver los gráficos de diagnóstico de cresta, así que los datos no se redujeron mucho con respecto a las estimaciones originales. |
| |
Puedes ver en las pruebas de validación con registro que no pasó nada. |
| |
Y aquí a la derecha, tenemos nuestros gráficos de residuos. Estos son reales y predichos. |
| |
Como pueden ver en el entrenamiento, parece que hubo algunos que fueron bastante costosos y no se predijeron bien. Vemos menos aquí que en el conjunto de prueba; realmente no parece que hayamos tenido muchos problemas. Tenemos un par de puntos un poco extraños, pero podemos ver que, en general, |
| |
Cuando se trata de viviendas de menor precio, se ajusta bastante bien a los tres conjuntos de datos. De nuevo, podríamos preguntarnos qué sucedió con estos, pero... |
| |
Por el momento, este parece ser el mejor del grupo. Como podemos ver, los demás también. |
| |
Mira aquí. Veamos MATLAB por un momento. |
| |
Aquí también se puede ver la validación de la prueba de entrenamiento. MATLAB genera un diagnóstico y, como pueden ver, tardó varias épocas en completarse. |
| |
Pero afortunadamente MATLAB se ejecuta bastante rápido como podemos ver. |
| |
Y luego lo real por lo predicho aquí. |
| |
Podemos ver todo esto. |
| |
Bien, ahora voy a tomarme unos minutos para echar un vistazo al código. |
| |
Entonces, por supuesto, algunas notas: asegúrese de que las cosas estén instaladas para que realmente pueda ejecutar todo esto porque, si no, JMP simplemente fallará miserablemente, no arrojará predicciones y luego fallará porque no puede encontrar las predicciones. |
| |
JMP permite crear una columna de validación con código. Elegí 60 20 20. Elegí esa semilla aleatoria para que puedas usar los mismos conjuntos de pruebas de validación de entrenamiento que yo. |
| |
De momento, lo que hago es guardar las columnas de entrenamiento, validación y prueba. Voy a borrar esa columna por un momento. |
| |
La razón por la que hago esto aquí es porque estoy enviando el conjunto de datos a R, Python y MATLAB y es más fácil codificar cuando todo en él es la salida o todas las entradas. |
| |
Así que no quería una columna de validación que no lo fuera, y entonces se vuelve un poco más difícil hacerlo. Así que lo que hice fue enviarle el conjunto de datos. |
| |
Le envié las filas de entrenamiento, validación y prueba, y luego llamé al código R para ejecutarlo. Ahora puedes... |
| |
Coloca el código R aquí. Opté por escribir solo una línea aquí para no tener que desplazarme eternamente. Pero nada te lo impide. Si son solo unas pocas líneas de código, como lo que viste antes en la presentación, las pegaría aquí. |
| |
Así que una vez hecho esto, resulta que... este código escupe |
| |
Una imagen del diagnóstico. Vimos que se detuvo después de seis o siete iteraciones. Veamos si esto es correcto. |
| |
Y también se ajusta la regresión de cresta en este script, por lo que obtenemos dos imágenes. Así que la escribo también, la guardo y el cuadro de contorno. Ahora, todo esto se junta al final del código. |
| |
Y luego obtengo el resultado y lo agregaré a la tabla de datos aquí en un momento. |
| |
Bien, les dejo un poco de código. Supongamos que tienen 6 millones de observaciones y que ajustar el modelo tomará 24 horas; probablemente no querrán ejecutarlo en JMP. |
| |
Entonces, con un pequeño fragmento de código que puedes hacer desde aquí, puedes decir: "Hola, estoy... |
| |
Bien, voy a abrir la tabla de datos que me interesa. Le diré a R que la ejecute en otro lugar mientras tanto, y una vez que mi sistema me dé luz verde de que está listo, puedo decir: "Bien, abro la salida y la traigo a... |
| |
Mi tabla de datos. Así que esta sería una forma de hacer algo de eso. Y, por supuesto, querrás guardar esos archivos de imagen en algún lugar y usar este código también. Pero este será exactamente el mismo código. |
| |
Bien, para Python, será muy similar. Voy a pasarle estas cosas: ejecutar código Python, generar el gráfico de diagnóstico y las predicciones. |
| |
Les dejo un código Python. Pueden ver que es muy similar a lo que hicimos con JMP. En este caso, simplemente abriré un archivo CSV. Copiaré la columna y la cerraré, porque ya no la necesito. |
| |
Y luego, MATLAB, otra vez el mismo juego. Activos, ejecuta el script de MATLAB. Obtengo el archivo PNG que escupí. Lo guardo donde lo necesito, guardo las predicciones. Y si necesitas descargarlo... |
| |
En lugar de ejecutarlo desde aquí, un pequeño código de muestra lo hará. |
| |
Bien, ahora que terminé de llamar a R, Python y Matlab, restablezco mis columnas de validación para que JMP pueda usarlas. Así que, como recuerdo cuál es cuál, |
| |
De forma predeterminada, JMP analiza los valores de la columna de validación que usaremos. El valor más pequeño corresponde al entrenamiento, el siguiente al mayor a la validación y el más grande a la prueba. Si se realiza una validación cruzada de K-folds, se indicará cuál corresponde. Así, se pasa por 012345678 y así sucesivamente. |
| |
Entonces crea esto. También creé esto aquí, así que, en lugar de 012, en mi salida aparecerá "entrenamiento, validación y prueba", para que sea más claro. |
| |
Entiendo. Si le muestro a alguien que nunca ha usado JMP, no sabrá qué significa 012, pero debería saber que existen entrenamiento, validación y prueba. |
| |
Bien, ahora empiezo a añadir las predicciones a mi tabla de datos. Aquí está la propiedad de conjunto que mencioné antes en mi charla. |
| |
En el MATLAB de mi creador, le di el nombre a la columna, así que sé que es la predicción de la red neuronal para MATLAB. Así que puede que no necesite necesariamente al creador, pero por si acaso soy un poco descuidado al nombrar las cosas... |
| |
Lo lamento. |
| |
De esta manera, podemos obtener toda la proyección, búsqueda, regresión, redes neuronales y todo eso. |
| |
Luego también noté que, bueno, ajusto la regresión de cresta, el lazo, la regresión lineal en JMP. |
| |
Así que hice todo eso aquí. Aquí hago mi modelo de ajuste, mi regresión generalizada. Escupo todo esto. |
| |
Guarda mis fórmulas de predicción. |
| |
Grafique mi resultado real y lo previsto para obtener mi resultado total al final. |
| |
Voy a ajustar mi red neuronal. ¿Puedo mencionar la columna de validación? Transfiero mis covariables. Generalmente, las redes neuronales tienden a ajustarse mejor cuando escalamos los valores alrededor de cero, en comparación con el valor habitual de la salida. |
| |
Mi primera capa oculta tiene tres nodos. Mi segunda capa oculta tiene dos. Aquí, ambas son funciones de activación lineal. Resulta que para las tres anteriores, utilizo la función de activación de unidades lineales restringidas, por lo que es ligeramente diferente. |
| |
Pero descubrí que parecen encajar prácticamente igual de todos modos. |
| |
5. Lo que eso significa es que voy a probar cinco conjuntos diferentes de valores iniciales y conservaré el que funcione mejor. |
| |
Como pueden ver en mi código, probablemente debería haber hecho eso con la R. Ha hecho una especie de bucle de cuatro pasos, ha ejecutado varios y ha generado el que mejor funciona. Así que, para futuros trabajos, ese sería mi punto de partida. |
| |
Guardo todo eso y ya estoy listo para la comparación de modelos. Ahora incorporo todas esas nuevas columnas a la comparación de modelos. |
| |
Desplázate un poco. Aquí estoy haciendo la validación, como mencioné antes. |
| |
Y por último estoy haciendo un poco de código para que se vea básicamente como quiero que se vea. |
| |
Entonces, obtengo estos cuadros de esquema, solo para indicar diagnósticos de entrenamiento, diagnósticos de validación, diagnósticos de prueba, en lugar de las cosas habituales que dice JMP. |
| |
Voy a obtener estas gráficas de diagnóstico. |
| |
Ahora, aquí solo estoy diciendo que solo quiero una parte de las salidas al agarrar un controlador para eso. |
| |
Voy a hacer algunos gráficos residuales muy rápido porque no todos los generan instantáneamente, particularmente los de MATLAB, Python y R. |
| |
Establezca esos títulos y luego aquí simplemente creo la gran tabla antigua o el gran diálogo antiguo. |
| |
Y luego escribo todo en un diario. |
| |
Para que quede limpio y ordenado. Cierro un montón de cosas para no tener que preocuparme. Y lo que hice al final es lo que quería que sucediera: al abrir uno de estos, |
| |
Todo lo demás que está debajo se abre inmediatamente en lugar de... |
| |
Tener que hacer clic en seis o siete cosas diferentes. Como pueden ver, tengo que hacer clic aquí y aquí y... |
| |
Aquí hay tres más. Supongo que uno más. Lo siento. Pero así no tengo que hacer clic en ninguno, se abren automáticamente. |
| |
Entonces eso es lo que hace este último fragmento de código. |
| |
Bueno. |
| Lucas |
Esto es simplemente una salida diferente y una ejecución en vivo. Pero aquí es donde también se puede ver. |
| |
Entonces, como mencioné, en el código, vieron allí, vieron algo más, eso es lo que vimos. |
| |
Ricardo |
| Lucas |
No. En resumen, la plataforma de comparación de modelos es una herramienta muy útil para comparar la capacidad predictiva de varios modelos en un solo lugar. No tienes que estar cambiando constantemente entre varias cosas. Puedes simplemente ver todo lo que tienes frente a ti. |
| |
La flexibilidad puede incluso utilizarse para ajustar modelos que no se ajustaban en JMP o comparar modelos que ni siquiera se ajustaban en JMP. Y así... |
| |
Con esto, si necesitamos ajustar modelos muy grandes que tardan mucho en ajustarse, podemos indicarles que se ajusten. Extraer todo en JMP y analizar fácilmente los resultados para determinar los siguientes pasos. |
| |
Y con esto, gracias por su tiempo. |