No se obtienen los mismos resultados en la red neuronal ejecutada desde el menú o ejecutada desde el script.Estoy intentando ejecutar un script que automatice la detección de los ocho modos de penalización diferentes en Neural Network y genere los resultados en la tabla actual. He estado solucionando problemas por los cuales no obtengo resultados diferentes de los diferentes ajustes en el script. Esto me llevó a observar los resultados de cada modo de penalización individual cuando el modelo se configuró desde el menú neuronal frente al script. El script se creó guardando el script de análisis en la tabla de datos y luego ejecutándolo. Entonces los resultados deberían ser idénticos.
Set up of model from Analyze>Predictive Modeling>NeuralSet up of model from Analyze>Predictive Modeling>NeuralConfiguración del modelo desde Analizar>Modelado predictivo>Neural
Initial run of modelInitial run of modelEjecución inicial del modelo
Redo Analysis #1Redo Analysis #1 Rehacer análisis n.° 1
Redo Analysis #2Redo Analysis #2 Rehacer análisis #2
Si reinicio el modelo y selecciono las mismas configuraciones, obtengo el mismo resultado que el Resultado inicial anterior. Si ejecuto desde un script, obtengo los mismos resultados que con Redo Analysis.
Re: No se obtienen los mismos resultados en la red neuronal ejecutada desde el menú o ejecutada desde el script.Tener una columna de validación y configurar la semilla aleatoria no soluciona el problema.Hice una columna de validación Random KFold(5) (ValidationCol) y la usé en el código siguiente. También verifiqué usando una columna de validación de retención y el comportamiento es el mismo.
Primero, si comenta Fit() de arriba a abajo, verá que los modos de penalización segundo (Absoluto), tercero (Decaimiento de peso) y cuarto (Sin penalización) dan el mismo resultado que el primero (Cuadrado). En segundo lugar, si restablece la semilla aleatoria a 999 entre ajustes, los resultados son los mismos para todos los modelos robustos y los mismos para todos los modelos no robustos. La función Establecer semilla aleatoria debe estar haciendo algo (¿restablecer?) a los parámetros del modelo en tiempo de ejecución.
Mi preocupación es que la única forma de lograr reproducibilidad es mediante el uso de una semilla, pero hacerlo parece "arreglar" el modo de penalización.
Neural(
Y( :Target ),
X( :Name( "8-12_Mean" ), :Name( "12-16_Mean" ), :Name( "16-20_Mean" ) ),
Validation( :ValidationCol ),
Informative Missing( 0 ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "Absolute" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "Weight Decay" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "NoPenalty" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 0 ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 0 ), Penalty Method( "Absolute" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 0 ), Penalty Method( "Weight Decay" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 0 ), Penalty Method( "NoPenalty" ) )
);
Robust SquaredRobust SquaredRobusto Cuadrado
Robust AbsoluteRobust AbsoluteRobusto Absoluto
Robust Weight DecayRobust Weight DecayFuerte caída de peso
Robust No PenaltyRobust No PenaltyRobusto sin penalización
All Robust, reset seed for each fitAll Robust, reset seed for each fitTodo robusto, reinicie la semilla para cada ajuste
All, non-robust, reset seed for each fitAll, non-robust, reset seed for each fitSemillas todas, no robustas, reiniciadas para cada ajuste
Re: No se obtienen los mismos resultados en la red neuronal ejecutada desde el menú o ejecutada desde el script.Existe una posibilidad razonable de que no entienda completamente lo que estás haciendo y tu guión; sin embargo, por mi parte puedo obtener resultados diferentes y reproducibles.
Neural(
Y( :Target ),
X( :Name( "8-12_Mean" ), :Name( "12-16_Mean" ), :Name( "16-20_Mean" ) ),
//Validation Method( "KFold", 5 ),
Validation( :Validation ),
Informative Missing( 0 ),
//Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ) ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "Absolute" ) ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "Weight Decay" ) ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "NoPenalty" ) )
);
Primero, tendrás que crear una columna de validación. Columna Analizar/Modelado predictivo/Realizar validación (jmp pro v13,14) Hacerlo estratificado en: Objetivo
Cuando ejecuto este script, tal como está, obtengo diferentes estimaciones de error entre ajustes y entre ejecuciones del script, aunque las ejecuciones entre ejecuciones son bastante cercanas.
Descomente la línea de semilla aleatoria: obtengo estimaciones diferentes entre ajustes y entre ejecuciones del scipt, los resultados son los mismos.
Re: No se obtienen los mismos resultados en la red neuronal ejecutada desde el menú o ejecutada desde el script.En realidad, hay dos facetas diferentes de un mismo problema. Una es que no obtengo resultados diferentes si restablezco la semilla entre Ajustes en el script pero uso diferentes métodos de penalización. Debido a esto, no puedo confiar en que las diferencias que veo cuando no reinicio la semilla sean reales; podrían simplemente ser el mismo método de penalización utilizado pero comenzando desde un lugar diferente. Esto es lo que ilustré en el archivo subido.
El segundo problema (original) es que dos instancias diferentes que ejecutan el mismo modelo pero con diferentes métodos de penalización dan el mismo resultado, por lo que no puedo estar seguro de qué método se está utilizando realmente en alguna parte.
Re: No se obtienen los mismos resultados en la red neuronal ejecutada desde el menú o ejecutada desde el script.He subido un pequeño modelo con guión para ilustrar lo que quiero decir. Cuando ejecute el script, verá que el primer ajuste NN es único; todos los demás dan los mismos resultados.
Re: No se obtienen los mismos resultados en la red neuronal ejecutada desde el menú o ejecutada desde el script.Mi problema comenzó cuando intentaba ejecutar 2 instancias de JMP, cada una ejecutando un script con 4 ejecuciones NN. La instancia 1 estaba ejecutando modelos sembrados usando penalizaciones Cuadrado, Cuadrado Robusto, Absoluto y Absoluto Robusto. La instancia 2 ejecutaba exactamente el mismo script (en un archivo con un nombre diferente), excepto que los 4 modelos ejecutaban Weight Decay, Robust Weight Decay, No Penaly y Robust No Penalty NN. Las ejecuciones tardan aproximadamente 20 horas en completarse y el script guarda las fórmulas. a la tabla de datos al final. Lo que encontré fue que ambas instancias arrojaron exactamente los mismos resultados. Hubo 4 resultados diferentes en cada caso, pero fueron exactamente iguales. Probé varias combinaciones para intentar descubrir qué estaba pasando. Hice que cada variable fuera única entre los dos scripts. Utilicé un cuadro de texto para configurar la tabla de datos en una variable en cada instancia. No importa lo que hice, no pude generar resultados diferentes entre las dos instancias.
Si ejecuto cada modelo desde el menú, obtengo ocho resultados diferentes. Si ejecuto un script, no lo hago.
Re: No se obtienen los mismos resultados en la red neuronal ejecutada desde el menú o ejecutada desde el script.Mi problema es que no obtengo resultados diferentes cuando ejecuto desde un script usando una semilla fija y diferentes métodos de penalización.
Re: No se obtienen los mismos resultados en la red neuronal ejecutada desde el menú o ejecutada desde el script.En tus scripts tienes esta línea:
Validation Method( "Holdback", 0.3333 )
Y ese es tu problema. Cada vez que ejecutas esto, obtienes un conjunto de holback aleatorio diferente.
Como estás usando JMP Pro, configura una columna de Validación y úsala.
Primero, controla qué filas están en la retención, como cuando creas un subconjunto estratificado.
2. Utilice las mismas filas para la retención para cada versión del modelo.
Re: No se obtienen los mismos resultados en la red neuronal ejecutada desde el menú o ejecutada desde el script.Además, los siguientes scripts dan todos el mismo resultado: es como si los modelos de redes neuronales ejecutados desde un script solo usaran uno de los métodos de penalización.
Neural(
Y( :Target ),
X( :Name( "0-4_Mean" ), :Name( "4-8_Mean" ), :Name( "8-12_Mean" ) ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Set Random Seed( 999 ),
Fit(
NTanH( 3 ),
Robust Fit( 1 ),
Penalty Method("Squared"),
Number of Tours( 3 )
)
)Neural(
Y( :Target ),
X( :Name( "0-4_Mean" ), :Name( "4-8_Mean" ), :Name( "8-12_Mean" ) ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Set Random Seed( 999 ),
Fit(
NTanH( 3 ),
Robust Fit( 1 ),
Penalty Method("Absolute"),
Number of Tours( 3 )
)
)Neural(
Y( :Target ),
X( :Name( "0-4_Mean" ), :Name( "4-8_Mean" ), :Name( "8-12_Mean" ) ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Set Random Seed( 999 ),
Fit(
NTanH( 3 ),
Robust Fit( 1 ),
Penalty Method("Weight Decay"),
Number of Tours( 3 )
)
)
Neural(
Y( :Target ),
X( :Name( "0-4_Mean" ), :Name( "4-8_Mean" ), :Name( "8-12_Mean" ) ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Set Random Seed( 999 ),
Fit(
NTanH( 3 ),
Robust Fit( 1 ),
Penalty Method("NoPenalty"),
Number of Tours( 3 )
)
)