construir múltiples modelos de redes neuronalesEstoy usando la plataforma neuronal para hacer predicciones y, como soy nuevo en las redes neuronales, solo estoy ligeramente familiarizado con todos los parámetros de entrada: número de capas ocultas, número de nodos / capa oculta, modelos de impulso, tasa de aprendizaje y recorridos. Lo que quiero hacer es intentar minimizar RMSE y la tasa de clasificación errónea del modelo de validación. Lo que he estado haciendo es cambiar iterativamente cada parámetro uno por uno, guardar los parámetros de rendimiento del modelo y pegarlos en una nueva tabla JMP, pero esto va a tomar días ya que hay tantas combinaciones de capas, nodos, recorridos, etc. ¿Sería posible escribir un script donde JMP Pro construye, digamos, 1,000 modelos y vuelca los datos en una tabla para que yo no tenga que cambiar manualmente cada parámetro de entrada del modelo?
#Capas ocultas: 1 o 2
# Nodos sigmoidales: 0, 1, 2, 3 o 4
# Nodos lineales: 0, 1, 2, 3 o 4
# Nodos radiales: 0, 1, 2, 3 o 4
#boosting models: ni idea, ¿1-5 quizás?
# tasa de aprendizaje: 0-0,5 en incrementos de 0,1
#tours: 1, 5, 10, 20, 100
Entonces eso sería 2 x 5 x 5 x 5 x 5 x 5 x 5 = ~ 30,000.
Supongo que podría reducir algunos de estos una vez que esté más familiarizado con el conjunto de datos. Por supuesto, tener muchos nodos y una gran cantidad de modelos de impulso no tiene sentido (ni ciertas otras combinaciones), pero todavía estamos hablando de cientos de modelos que vale la pena probar. Seguramente este tipo de selección / comparación de modelos podría estar programado, ¿verdad?
AnalíticaScriptingRe: construcción de múltiples modelos de redes neuronalesPuede diseñar un experimento con menos niveles para ajustarse a un modelo de segundo orden y luego usar el modelo para optimizar la configuración. Además, puede crear cada modelo y luego extraer todos los resultados a la vez haciendo clic con el botón derecho en una de las tablas de resultados y seleccionando Convertir en tabla combinada.
Re: construcción de múltiples modelos de redes neuronalesMark, gracias por tus sugerencias. El segundo lo intenté y fallé. Conozco la opción "convertir en tabla combinada" de otras plataformas, pero tal vez se dejó fuera de la plataforma neuronal por alguna razón. Curiosamente, el truco de la "opción", mediante el cual mantienes presionada la tecla de opción, haces una selección y se aplica a todas las partes del informe, no funciona ni en la plataforma neuronal, o eso podría acelerar las cosas.
Sería genial si pudiera tener mis parámetros de red neuronal (# nodos, #tours, etc.) como X en un DOE, con el objetivo de minimizar RSME, pero parece que no es posible debido a la forma en que debe ingresar el parámetros en los cuadros particulares en el lanzamiento del modelo neuronal. Tendría que hacer algunas secuencias de comandos realmente avanzadas, e incluso entonces no estoy seguro de si DOE y Neural podrían comunicarse correctamente. Pero si alguien conoce alguna forma en la que pueda hacer que la plataforma neuronal ejecute básicamente los modelos reflejados en esta captura de pantalla (siendo una sub-selección del gran total), lo agradecería enormemente. En otras palabras, los valores en la primera tabla de captura de pantalla deberían ir a los cuadros de entrada apropiados en la segunda captura de pantalla (es decir, el lanzamiento del modelo neuronal).
Re: construcción de múltiples modelos de redes neuronalesPor cierto, el truco de la "opción" para que todas las funciones relevantes muestren la misma información que la función que estás seleccionando activamente es en realidad el truco del "comando" en una Mac (de ahí que no funcionara anteriormente).
Re: construcción de múltiples modelos de redes neuronalesHola @abmayfield ,
Esto es algo que he querido escribir durante un tiempo y fue muy divertido, y tu publicación dio el impulso para hacerlo funcionar, ¡gracias! He querido tener una forma de sintonizar la plataforma NN por un tiempo, ya que es muy sensible a las condiciones iniciales y es bastante lento hacerlo manualmente.
Entonces, adapté algunos scripts que hice para otras plataformas modelo para automatizar sus procesos de ajuste, por ejemplo, el árbol impulsado, el bosque de arranque y las plataformas XGBoost. Los scripts deben guardarse en su tabla de datos y ejecutarse con el botón verde.
Es de esperar que sepa algo sobre secuencias de comandos y sepa dónde adaptar estas secuencias de comandos a sus situaciones específicas / estructura de datos / nombres de columna, etc. He ingresado algunos comentarios para tratar de ayudar a explicar lo que estoy haciendo en cada grupo más grande. Adjunto dos guiones: uno para Y continuas y otro para Y nominales / ordinales. Tuve que incluir una prueba para ver si la salida Y es nominal u ordinal porque el valor de Number Col Box () cambia dependiendo de esto. Usé la tabla de datos Big Class Families.jmp en los datos de muestra como un conjunto de datos de prueba. También incluyo dos tablas de datos de salida que genero usando el ajuste numérico NN o el ajuste NN nominal / ordinal. Hice nominal en: sexo usando: edad,: peso :,: altura, y luego cambié: edad de Ordinal a Continuo y edad modelada con: peso y: sexo para el ajuste continuo NN.Los ajustes y las estadísticas son horribles, pero está destinado solo con el propósito de ver si el JSL funciona o no. También agregué una columna: Validación a la tabla de datos estratificando en: edad, solo para verificar que todo funcionó correctamente.
Estoy seguro de que alguien más podría escribirlo de manera más elegante para probar la columna de entrada Y () para que sea del tipo de modelado Continuo, Nominal u Ordinal y luego tener el valor apropiado de Number Col Box () insertado para extraer los datos adecuadamente usando solo código JSL único.
Deberá editar las entradas Y () y X () en la sección dt << Nerual (), así como en la parte donde obtiene el nombre de la ventana del informe, ya que lleva el nombre de la variable que está modelando.
Las tablas de ajuste de NN podrían tratarse como un DOE que llena el espacio en principio, donde las configuraciones inferior y superior son las que desee configurar, excepto algunas de ellas, como N_Layers solo puede ser 1 o 2 porque JMP solo permite 1 o 2 capas. Penalty_Method son solo las opciones que son válidas en la plataforma NN, y Transform Covariate y Robust Fit solo toman valores de 0 o 1 (desactivado o activado). También incluyo la tabla de afinación NN.
Si usted tiene alguna pregunta, hágamelo saber.
Aquí está mi código para el tipo de modelado Nominal / Ordinal:
Names Default To Here( 1 );
dt = Data Table( "Big Class Families" );//enter the name of the current data table
dt_parms = Data Table( "NN Tuning" );//enter name of parameter data table for tuning the NN
dt_results = dt_parms << Subset( All rows, Selected Columns Only( 0 ) );//this copies the tuning table with all the different rows in it
//these commands create columns to record the fit results
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
//This part just creates a separate modelling progress, delete if you don't want it.
i = 1;
imax = N Row( dt_parms );
dlgStatus = New Window( "Overall Modeling Progress",
V List Box(
Text Box( " Overall Modeling Progress ", <<SET font="" size=""></SET>
Una cosa que es extraña que no entiendo es que recibo esta advertencia sobre la ventana de registro que creo cuando la ejecuto para la plataforma NN, pero nunca la obtuve de mis otras plataformas. No puedo seguir de dónde viene esa advertencia, pero aún se ejecuta correctamente. ¿Quizás alguien pueda arreglar esa parte de mi código?
Inesperado ",". Quizás falta un ")".
Intentando analizar el operando para el operador "<<".
Línea 23 Columna 10:)) ►,
Como última nota: tenga cuidado con la configuración, ya que puede llevar MUCHO tiempo ejecutar el modelado si tiene una gran cantidad de impulsos o recorridos o funciones de transferencia. Solo tenga cuidado de no exagerar.
¡Espero que esto ayude!,
DS
Re: construcción de múltiples modelos de redes neuronales¡Si! Esto es exactamente lo que quiero: una tabla con todos los parámetros de entrada NN (por ejemplo, número de nodos TanH, número de capas, etc.) que se sincronice con la plataforma NN. Todavía no lo he probado, y me imagino que me llevará un tiempo, pero estoy usando un pequeño conjunto de datos de "práctica" de predictores de 20 muestras x 90, por lo que podría ser factible. En realidad, solo he descubierto que el tipo de activación y la cantidad de nodos (así como la cantidad de recorridos) en realidad reducen mi RMSE, y que el impulso no ayuda mucho. Pero incluso entonces, esto será mucho más rápido que hacer todos los ~ 500 modelos que planeé ejecutar (no tantos como tenía la intención de ejecutar ayer, afortunadamente, ya que quiero permanecer por debajo de 4 nodos / tipo de activación). Lo probaré mañana y les haré saber a todos cómo va.
Re: construcción de múltiples modelos de redes neuronalesBueno, fallé, pero creo que probablemente se deba a un pequeño error de secuencia de comandos. Usé su tabla de ajuste NN con mis datos (adjuntos) e hice todas las actualizaciones necesarias (usé tres muestras de entrenamiento + validación + prueba). Si ejecuta el último script ("comparación de redes neuronales"), creará la nueva tabla, pero no se ejecutarán análisis. Solo incluí algunos términos X, pero en realidad serán las 86 columnas del grupo de "datos estandarizados". Cuando uso el depurador, dice que algo va mal con el
" por (yo = 1 , i <= imax, i ++, "área. ¡Espero / supongo que un guionista más competente probablemente pueda encontrar el problema en segundos!
Re: construcción de múltiples modelos de redes neuronalesHola @abmayfield ,
Gracias por compartir la tabla de datos, ayudó a depurar los cambios que realizó en el script.
Algunas cosas que noté:
- Necesitaba agregar columnas adicionales para las estadísticas del conjunto de datos de "Prueba" que desea registrar.
- Eliminó accidentalmente la definición de imax, que es el número de filas de la tabla de parámetros
- También cambió accidentalmente la llamada a la plataforma NN donde en el script dice dt << Neural (), aquí es donde envía el comando para realizar el modelado de la red neuronal en la tabla de datos "dt". Lo habías cambiado a otra cosa.
- La definición de la ventana "w" debe tener el nombre completo de la ventana NN, y si solo está ejecutando una única X, aparentemente JMP lo incluye como parte del nombre de la ventana, por lo que debe estar en ambos el comando GetName y la instrucción IF debajo de él. Pero eso solo es cierto cuando se modela con una sola X. Si usa más de uno, entonces no necesita tener el "por ......" en el nombre de la ventana o en la instrucción IF.
- La última parte es asegurarse de que las estadísticas de los datos de entrenamiento, validación y prueba se invoquen correctamente en el comando Number Col Box ().
El siguiente código funciona en su tabla de datos (también adjunto con un script modificado). Funciona con la tabla NN Tuning que le di anteriormente.
Si realmente va a usar las 86 columnas, debe colocarlas manualmente en la parte X (col1, col2, ...) del script. Luego, también debe editar la parte GetName porque no incluirá los 86 nombres, solo será el nombre de la ventana con la columna de respuesta.
Names Default To Here( 1 );
dt = Current Data Table();
dt_parms = Data Table( "NN Tuning" );
dt_results = dt_parms << Subset( All rows, Selected Columns Only( 0 ) );
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
dt_results << New Column( "Sum Freq Test" );
imax = N Row( dt_parms );
For( i = 1, i <= imax, i++,
Nlayer = dt_parms:N_Layers[i];
If( dt_results:N_Layers[i] == 1,
dt_results:N_TanH_2[i] = 0;
dt_results:N_Linear_2[i] = 0;
dt_results:N_Gauss_2[i] = 0;
);
If( dt_results:N_Layers[i] == 2,
dt_results:N_Boosts[i] = 0;
dt_results:Learn_Rate[i] = 0.1;
);
NTH1 = dt_results:N_TanH_1[i];
NTH2 = dt_results:N_TanH_2[i];
NL1 = dt_results:N_Linear_1[i];
NL2 = dt_results:N_Linear_2[i];
NG1 = dt_results:N_Gauss_1[i];
NG2 = dt_results:N_Gauss_2[i];
Nboosts = dt_results:N_Boosts[i];
LR = dt_results:Learn_Rate[i];
TCov = dt_results:T_Cov[i];
RFit = dt_results:Robust_Fit[i];
PMethod = dt_results:Penalty_Method[i];
Ntours = dt_results:N_Tours[i];
str = Eval Insert(
"report = (dt << Neural(
Y( :health designation ),
X(
:OFA...22_c0_g2_i1.p1
),
Validation ( :Validation with test ),
Informative Missing(0),
Transform Covariates(^TCov^),
Fit(
NTanH(^NTH1^),
NLinear(^NL1^),
NGaussian(^NG1^),
NTanH2(^NTH2^),
NLinear2(^NL2^),
NGaussian2(^NG2^),
Transform Covariates(^TCov^),
Penalty Method(\!"PMethod\!"),
Number of Tours(^Ntours^),
N Boost(^Nboosts^),
Learning Rate(^LR^)
)),
Go,
invisible
) << Report;"
);
Eval( Parse( str ) );
w = Window( dt << GetName || " - " || "Neural of health designation by OFA...22_c0_g2_i1.p1" );
If( !Is Missing( Regex( w << Get Window Title, "health designation by OFA...22_c0_g2_i1.p1" ) ) == 1,
ncol_box_v = 10;
ncol_box_test =19;
);
T_stats = w[Outline Box( 3 ), Number Col Box( 1 )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
V_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_v )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
Test_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_test )] << Get;
report << Close Window;
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
dt_results:Generalized R² Test[i] = Test_stats[1];
dt_results:Entropy R² Test[i] = Test_stats[2];
dt_results:RMSE Test[i] = Test_stats[3];
dt_results:Mean Abs Dev Test[i] = Test_stats[4];
dt_results:Misclassification Rate Test[i] = Test_stats[5];
dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
dt_results:Sum Freq Test[i] = Test_stats[7];
);
¡Espero que esto ayude!,
DS
Re: construcción de múltiples modelos de redes neuronales¡Ajá! Muchas gracias por volver a hacerlo por mí. Claramente no tengo conocimiento de scripting, así que simplemente cambié "Neural" por el nombre de mi tabla de datos ... lo cual obviamente no funcionaría. Una vez que cambié el nombre de mi tabla de datos a "Neural", agregué las columnas de Prueba e hice los otros cambios que recomendó, funcionó.
Ahora, lo que podría hacer es usar DOE para hacer un diseño factorial condicional (ya que, como notó, no puede aumentar con múltiples capas ocultas) y ejecutar algunos cientos de modelos en mi computadora de trabajo (para no gravar demasiado mi 8 -GB RAM portátil).
Siento que su secuencia de comandos debe convertirse en una GUI o un complemento (¿alguien más?). JMP Pro 16, que estoy probando en versión beta, tiene una herramienta de "detección de modelos" realmente excelente, pero creo que prueba en todos los tipos de modelos (por ejemplo, PLS frente a Gen-Reg), no DENTRO de los miles de modelos que podrían ser construido dentro de cada tipo de modelado (o puede que nunca deje de funcionar). He oído hablar del "simulador", pero creo que es hacer algo diferente (no generar toneladas de modelos simulados), aunque podría estar equivocado. Nuevamente, muchas gracias por su ayuda. ¡Esto seguramente me ahorrará DÍAS de tiempo!
Re: construcción de múltiples modelos de redes neuronalesHola @abmayfield ,
Me alegro de que haya solucionado tu problema.
Con el modelado basado en árboles (XGBoost, árboles potenciados y bosque de arranque), puede usar fácilmente la GUI de la tabla de ajuste dentro de JMP para ejecutar muchos modelos. Pero, una desventaja es que consume mucha RAM. Lo bueno de ejecutarlo de esta manera es que puede ejecutar decenas de miles de configuraciones de parámetros diferentes y no consume mucho RAM, solo consumo de CPU. He ejecutado hasta 40k configuraciones diferentes con el bosque de arranque (que es lento) y puede llevar algunos días en mi computadora portátil de trabajo (32 GB de RAM y 2 GHz de CPU).
También soy uno de los primeros en adoptar JMP 16, y la selección del modelo es buena, pero como usted señala, no está ajustando ninguno de los modelos, lo que puede ser un poco engañoso. Solo usa la configuración predeterminada, que no siempre es la mejor configuración para crear un modelo predictivo. Al menos podría ayudarlo a determinar qué plataformas valen la pena el esfuerzo de tiempo para sintonizar más y cuáles no vale la pena investigar.
Es posible que también desee considerar la plataforma SVM para modelar sus datos nominales, ya que se supone que también es un buen método para ese tipo de datos.
En cuanto al simulador, eso es algo diferente y está destinado a probar las estimaciones con diferentes condiciones iniciales (aleatorización). Esto le da una distribución de valores para la estimación y le da un intervalo de confianza para la estimación original y luego puede decidir si ese modelo con las estimaciones dadas es bueno o no.
En cuanto al DOE, podría hacer un factorial o incluso ejecutar un diseño de relleno de espacio con los factores establecidos de manera adecuada, y creo que la plataforma también permite restricciones condicionales. Además, podría considerar hacer un cribado de predictores o realizar un arranque de los predictores para ver si realmente necesita los 89 o si realmente solo puede usar un subconjunto más pequeño.
Como última nota, dado que tiene una tabla de datos corta y amplia, es posible que desee considerar en lugar de usar una columna de validación, hacer un enfoque de Dejar uno fuera para la validación. Si lo hace, tendrá que editar el script para eso.
¡Buena suerte!,
DS
Re: construcción de múltiples modelos de redes neuronalesMás sugerencias excelentes, especialmente en lo que respecta al tipo de validación. Veo que Neural admite retención, Kfold o exclusión de filas (por lo que supongo que elegiría aleatoriamente algunas filas para omitir). Si quisiera cambiar el script para cambiar el tipo de validación, ¿cambiaría simplemente la línea "Validación (: Validación con prueba)"? ¿Y las muestras retenidas serían equivalentes a los ojos de JMP como muestras de validación? De lo contrario, tendría que eliminar las columnas de validación (o cambiarles el nombre), y las columnas de prueba también tendrían que desaparecer.
Re: construcción de múltiples modelos de redes neuronalesHola @abmayfield ,
Kfold también es otra excelente manera de validar el conjunto de datos corto. Sí, la exclusión de filas que establecería como estado de fila, lo que podría hacer seleccionando el conjunto de datos de "prueba" y estableciendo el estado de fila en "excluido". Si usa Kfold o Holdback, JMP los usa para la validación de los datos, no como prueba de los datos. Con suerte, también tiene un conjunto de datos separado que puede usar como datos de prueba y no tenerlo en la misma tabla de datos que los datos de entrenamiento y validación.
Solo usaría Kfold para la validación y luego comentaría las partes que no necesita para ejecutar el script. A continuación se muestra la versión editada con una configuración de validación de 5 Kfold para la plataforma NN.Debería funcionar, a mí me funcionó.
Names Default To Here( 1 );
dt = Current Data Table();
dt_parms = Data Table( "NN Tuning" );
dt_results = dt_parms << Subset( All rows, Selected Columns Only( 0 ) );
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
//dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
//dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
//dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
//dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
//dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
//dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
//dt_results << New Column( "Sum Freq Test" );
imax = N Row( dt_parms );
For( i = 1, i <= imax, i++,
Nlayer = dt_parms:N_Layers[i];
If( dt_results:N_Layers[i] == 1,
dt_results:N_TanH_2[i] = 0;
dt_results:N_Linear_2[i] = 0;
dt_results:N_Gauss_2[i] = 0;
);
If( dt_results:N_Layers[i] == 2,
dt_results:N_Boosts[i] = 0;
dt_results:Learn_Rate[i] = 0.1;
);
NTH1 = dt_results:N_TanH_1[i];
NTH2 = dt_results:N_TanH_2[i];
NL1 = dt_results:N_Linear_1[i];
NL2 = dt_results:N_Linear_2[i];
NG1 = dt_results:N_Gauss_1[i];
NG2 = dt_results:N_Gauss_2[i];
Nboosts = dt_results:N_Boosts[i];
LR = dt_results:Learn_Rate[i];
TCov = dt_results:T_Cov[i];
RFit = dt_results:Robust_Fit[i];
PMethod = dt_results:Penalty_Method[i];
Ntours = dt_results:N_Tours[i];
str = Eval Insert(
"report = (dt << Neural(
Y( :health designation ),
X(:OFA...22_c0_g2_i1.p1 ),
Validation ( \!"KFold\!", 5 ),
Informative Missing(0),
Transform Covariates(^TCov^),
Fit(
NTanH(^NTH1^),
NLinear(^NL1^),
NGaussian(^NG1^),
NTanH2(^NTH2^),
NLinear2(^NL2^),
NGaussian2(^NG2^),
Transform Covariates(^TCov^),
Penalty Method(\!"PMethod\!"),
Number of Tours(^Ntours^),
N Boost(^Nboosts^),
Learning Rate(^LR^)
)),
Go,
invisible
) << Report;"
);
Eval( Parse( str ) );
w = Window( dt << GetName || " - " || "Neural of health designation by OFA...22_c0_g2_i1.p1" );
If( !Is Missing( Regex( w << Get Window Title, "health designation by OFA...22_c0_g2_i1.p1" ) ) == 1,
ncol_box_v = 10;
//ncol_box_test =19;
);
T_stats = w[Outline Box( 3 ), Number Col Box( 1 )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
V_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_v )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
//Test_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_test )] << Get;
report << Close Window;
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
//dt_results:Generalized R² Test[i] = Test_stats[1];
//dt_results:Entropy R² Test[i] = Test_stats[2];
//dt_results:RMSE Test[i] = Test_stats[3];
//dt_results:Mean Abs Dev Test[i] = Test_stats[4];
//dt_results:Misclassification Rate Test[i] = Test_stats[5];
//dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
//dt_results:Sum Freq Test[i] = Test_stats[7];
);
¡Buena suerte!,
DS
Re: construcción de múltiples modelos de redes neuronalesVaya, no puedo creer que haya ejecutado 300 modelos de redes neuronales antes del almuerzo gracias a su ayuda con las secuencias de comandos. Espero que esto sea recogido y "kudo'd" como imagino cuando más y más personas comiencen a ver el valor de la plataforma NN, gravitarán hacia algo como esto, especialmente si se trata de un nuevo conjunto de datos y usted realmente no saber dónde "sumergirse" con respecto a la cantidad desconcertante de parámetros de entrada del modelo NN que pueden modificarse ligeramente (a veces resultan en grandes diferencias incluso cuando se aumenta, por ejemplo, la tasa de aprendizaje de 0,05 a 0,1). A continuación, jugaré con los diferentes enfoques de validación (columna de validación frente a retención frente a KFold). Definitivamente debo tener cuidado dado mi tamaño de muestra (actualmente) pequeño (esperando usar estos datos preliminares para obtener fondos para agregar más "filas", es decir, corales).
Re: construcción de múltiples modelos de redes neuronalesMe alegra saber que está funcionando para usted. ¡Buena suerte con el modelaje! Es posible que también desee verificar otras plataformas de modelos y luego comparar modelos en un conjunto de datos de prueba para ver cuál es el mejor predictor.
DSRe: construcción de múltiples modelos de redes neuronalesTengo una pregunta de scripting (probablemente simple). Digamos que quiero cambiar la entrada dt por otra. ¿No debería poder copiar y pegar el script, y sustituir el dt de "Neural" por otra cosa?
str = Eval Insert(
"report = (dt << Neural (
Y( :health designation ),
X(
Si elimino el archivo "Neural" original y lo sustituyo con otra tabla con exactamente la misma información y un nombre diferente, ¡el script no funcionará! ¿Es necesario tener exactamente los mismos datos en dos tablas de datos, una de las cuales se llama "Neural"? ¡Quizás me perdí esa parte!
Re: construcción de múltiples modelos de redes neuronalesHola @abmayfield ,
Si regresa y revisa el script, la segunda línea define qué tabla de datos se utilizará durante el análisis. El código JSL dt = Current Data Table () define una variable local "dt" que luego se usa en el resto del script en lugar de tener que llamar a la tabla de datos por su nombre. De manera similar, dt_parms es la variable local que se asigna a la tabla de sintonización NN, "NN tuning". Esas dos tablas son realmente las únicas cosas que alimenta al script. El resto es todo interno.
Si copia / pega el código JSL en una nueva tabla de datos, debería funcionar automáticamente porque lo está ejecutando localmente en esa tabla de datos.
No debe modificar la llamada dt << Nerual (), excepto para definir sus Y () y X (), y tal vez el método Validation (). El código JSL dt << Nerual () es un comando que le dice a JMP que realice el modelado NN en la tabla de datos "dt". Por tanto, la definición de lo que es dt al principio del código.
También necesitará modificar la llamada w = Window () para reflejar cuál será el título de la ventana del informe NN, así como la expresión regular () debajo de ella. Finalmente, dependiendo de si realmente tendrá o no el conjunto de datos de "prueba" como parte de una columna de validación, entonces querrá comentar (con el comando // al comienzo de la línea) o eliminar el comentario al principio del código cuando crea las columnas de resultado de la prueba, así como la definición de Test_stats y donde el código escribe los resultados en la nueva tabla de datos de salida.
Aparte de eso, no debería tener que editar mucho.
Con respecto a su última pregunta, depende de cómo esté implementando el código. Si lo está ejecutando desde dentro de la tabla de datos, es decir, si está guardado en la parte del script de la tabla de datos y lo está ejecutando a través del botón verde, entonces solo necesitaría cambiar Y () y X ( ) que está utilizando como predictores y respuesta para hacer coincidir los nombres de las columnas de la nueva tabla de datos. Por supuesto, necesitará tener abierta la tabla "NN tuning". Por otro lado, si está ejecutando esto como una secuencia de comandos separada, es posible que desee cambiar la definición de dt de dt = Tabla de datos actual () a dt = Tabla de datos (""), donde debe insertar el nombre de la nueva tabla de datos entre las comillas.
El "Neural" al que se refiere no es una tabla de datos, sino el comando JMP para ejecutar un modelo de red neuronal en una tabla de datos especificada. El comando "<<" significa realizar la acción que está a la derecha de << en el objeto de la izquierda. Cerca del comienzo del código, puede ver eso con el comando de nueva columna. Donde dice dt_results << New Column (), el código le dice a JMP que cree una nueva columna para el objeto dt_results, que son los datos del subconjunto generados a partir de la tabla de datos dt_parms.
¡Espero que esto ayude!,
DS
Re: construcción de múltiples modelos de redes neuronalesVale genial. Esto responde a algunas preguntas adicionales que tenía. Ahora, lo único con lo que estoy luchando es, cuando copio, pego y ejecuto el script en una nueva tabla de datos, obtengo un error de cuadro de esquema, al que alude en los comentarios del script. "carácter esperado arg 1 en el acceso o evaluación del cuadro de esquema". ¿¿Qué significa eso?? He aumentado y disminuido los números, pero siempre aparece el mismo mensaje de error y el script no se ejecuta. Ni siquiera sé qué es un cuadro de contorno. Es extraño que la estructura del árbol sea idéntica. Acabo de cambiar el nombre del archivo. El nombre del archivo es más largo. ¿Quizás eso significa que necesito un cuadro de contorno más grande?