Non ottenere gli stessi risultati nella rete neurale eseguita dal menu rispetto all'esecuzione da script.Sto cercando di eseguire uno script che automatizza lo screening delle otto diverse modalità di penalità nella rete neurale e restituisce i risultati nella tabella corrente. Ho risolto i problemi relativi al motivo per cui non ottengo risultati diversi dai diversi adattamenti nello script. Questo mi ha portato a guardare i risultati per ogni singola modalità di penalità quando il modello è stato impostato dal menu neurale rispetto allo script. Lo script è stato creato salvando lo script di analisi nella tabella dati e quindi eseguendolo. Quindi i risultati dovrebbero essere identici.
Set up of model from Analyze>Predictive Modeling>NeuralSet up of model from Analyze>Predictive Modeling>NeuralConfigurazione del modello da Analizza>Modellazione predittiva>Neurale
Initial run of modelInitial run of modelEsecuzione iniziale del modello
Redo Analysis #1Redo Analysis #1 Ripeti analisi n. 1
Redo Analysis #2Redo Analysis #2 Ripeti l'analisi n. 2
Se rilancio il modello e seleziono tutte le stesse impostazioni, ottengo lo stesso risultato del risultato iniziale sopra. Se eseguo da uno script, ottengo gli stessi risultati di Redo Analysis.
Ri: Non ottenere gli stessi risultati nella rete neurale eseguita dal menu rispetto all'esecuzione da script.Avere una colonna di convalida e impostare il seme casuale non risolve il problema.Ho creato una colonna di convalida KFold(5) casuale (ValidationCol) e l'ho usata nel codice seguente. Ho anche verificato utilizzando una colonna di convalida Holdback e il comportamento è lo stesso.
Innanzitutto, se commenti Fit() dall'alto verso il basso, vedrai che la seconda (Absolute), la terza (WeightDecay) e la quarta (NoPenalty) modalità di penalità danno lo stesso risultato della prima (Squadrato). In secondo luogo, se reimpostate il seme casuale su 999 tra Fits, i risultati sono gli stessi per tutti i modelli robusti e gli stessi per tutti i modelli non robusti. La funzione Imposta seme casuale deve eseguire qualcosa (reimpostare?) sui parametri del modello in fase di esecuzione.
La mia preoccupazione è che l'unico modo per ottenere la riproducibilità sia usare un seme, ma così facendo sembra "aggiustare" la modalità di penalità.
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 squadrato
Robust AbsoluteRobust AbsoluteAssoluto robusto
Robust Weight DecayRobust Weight DecayRobusto decadimento del peso
Robust No PenaltyRobust No PenaltyRobusto senza penalità
All Robust, reset seed for each fitAll Robust, reset seed for each fitTutti i semi robusti e reimpostati per ogni adattamento
All, non-robust, reset seed for each fitAll, non-robust, reset seed for each fitTutti, non robusti, reimpostano il seme per ogni adattamento
Ri: Non ottenere gli stessi risultati nella rete neurale eseguita dal menu rispetto all'esecuzione da script.C'è una ragionevole possibilità che io stia completamente fraintendendo quello che stai facendo e il tuo copione; tuttavia da parte mia riesco a ottenere risultati diversi e riproducibili.
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" ) )
);
Innanzitutto, dovrai creare una colonna di convalida. Colonna Analizza/Modellazione predittiva/Crea convalida (jmp pro v13,14) Rendila stratificata su :Target
Quando eseguo questo script, così com'è, ottengo stime diverse per l'errore tra gli adattamenti e tra le esecuzioni dello script, sebbene le esecuzioni tra le esecuzioni siano piuttosto vicine.
Decommenta la linea del seme casuale: ottengo stime diverse tra gli accoppiamenti e tra l'esecuzione dello script i risultati sono gli stessi.
Ri: Non ottenere gli stessi risultati nella rete neurale eseguita dal menu rispetto all'esecuzione da script.In realtà ci sono due diverse sfaccettature dello stesso problema. Uno è che non ottengo risultati diversi se azzero il seme tra Fits nello script ma utilizzo metodi di penalità diversi. Per questo motivo, non posso fidarmi del fatto che le differenze che vedo quando non resetto il seme sono reali; potrebbero essere semplicemente lo stesso metodo di penalità utilizzato ma a partire da un punto diverso. Questo è ciò che ho illustrato nel file caricato.
Il secondo problema (originale) è che due diverse istanze che eseguono lo stesso modello ma con metodi di penalità diversi danno lo stesso risultato, quindi non posso essere sicuro di quale metodo venga effettivamente utilizzato ovunque.
Ri: Non ottenere gli stessi risultati nella rete neurale eseguita dal menu rispetto all'esecuzione da script.Ho caricato un piccolo modello con script per illustrare cosa intendo. Quando esegui lo script, vedrai che il primo adattamento NN è unico; tutti gli altri danno gli stessi risultati.
Ri: Non ottenere gli stessi risultati nella rete neurale eseguita dal menu rispetto all'esecuzione da script.Il mio problema è iniziato quando stavo cercando di eseguire 2 istanze di JMP, ciascuna in esecuzione di uno script con 4 esecuzioni NN. L'istanza 1 stava eseguendo modelli testa di serie utilizzando penalità Squared, Robust Squared, Absolute e Robust Absolute. L'istanza 2 stava eseguendo esattamente lo stesso script (in un file con nome diverso) tranne per il fatto che i 4 modelli eseguivano Weight Decay, Robust Weight Decay, No Penaly e Robust No Penalty NN. Le esecuzioni richiedono circa 20 ore per essere completate e lo script salva le formule alla tabella dati alla fine. Quello che ho scoperto è che entrambe le istanze hanno restituito esattamente gli stessi risultati. C'erano 4 risultati diversi in ogni istanza, ma erano esattamente gli stessi. Ho provato varie combinazioni per cercare di scoprire cosa stesse succedendo. Ho reso ogni variabile unica tra i due script. Ho usato una casella di testo per impostare la tabella dati su una variabile in ogni istanza. Qualunque cosa facessi, non potevo generare risultati diversi tra le due istanze.
Se eseguo ogni modello dal menu, ottengo otto risultati diversi. Se eseguo uno script, non lo faccio.
Ri: Non ottenere gli stessi risultati nella rete neurale eseguita dal menu rispetto all'esecuzione da script.Il mio problema è che non ottengo risultati diversi durante l'esecuzione da uno script utilizzando un seme fisso e diversi metodi di penalità.
Ri: Non ottenere gli stessi risultati nella rete neurale eseguita dal menu rispetto all'esecuzione da script.Nei tuoi script hai questa riga:
Validation Method( "Holdback", 0.3333 )
E questo è il tuo problema. Ogni volta che lo esegui otterrai un diverso set di holback casuali.
Poiché stai utilizzando JMP Pro, imposta una colonna Convalida e usala.
1. arrivare a controllare quali righe sono in attesa, come quando si crea un sottoinsieme stratificato.
2. utilizzare le stesse righe per l'hold back per ciascuna versione del modello.
Ri: Non ottenere gli stessi risultati nella rete neurale eseguita dal menu rispetto all'esecuzione da script.Inoltre, i seguenti script danno tutti lo stesso risultato: è come se i modelli di rete neurale eseguiti da uno script utilizzassero solo uno dei metodi di penalizzazione
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 )
)
)