costruire più modelli di rete neuraleSto usando la piattaforma neurale per fare previsioni e, essendo nuovo nel networking neurale, conosco solo leggermente tutti i parametri di input: numero di livelli nascosti, numero di nodi / livello nascosto, modelli di boost, velocità di apprendimento e tour. Quello che voglio fare è cercare di ridurre al minimo RMSE e il tasso di errata classificazione del modello di convalida. Quello che ho fatto è stato modificare iterativamente ogni parametro uno per uno, salvare i parametri di prestazione del modello e incollarli in una nuova tabella JMP, ma ci vorranno giorni poiché ci sono così tante combinazioni di livelli, nodi, tour, ecc. Sarebbe possibile scrivere uno script in cui JMP Pro crea, diciamo, 1.000 modelli e scarica i dati in una tabella in modo da non dover modificare manualmente ogni parametro di input del modello?
# Livelli nascosti: 1 o 2
#Nodi sigmoidali: 0, 1, 2, 3 o 4
#Nodi lineari: 0, 1, 2, 3 o 4
#Nodi radiali: 0, 1, 2, 3 o 4
#boosting models: nessuna idea, 1-5 forse?
# tasso di apprendimento: 0-0,5 con incrementi di 0,1
#tours: 1, 5, 10, 20, 100
Quindi sarebbe 2 x 5 x 5 x 5 x 5 x 5 x 5 = ~ 30.000.
Immagino che potrei ridurne alcuni una volta che avrò familiarità con il set di dati. Ovviamente, avere molti nodi e un numero elevato di modelli di boosting non ha senso (né alcune altre combinazioni), ma stiamo ancora parlando di potenzialmente centinaia di modelli che vale la pena testare. Sicuramente questo tipo di screening / confronto del modello potrebbe essere programmato, giusto?
AnalyticsScriptingRi: costruzione di più modelli di rete neuraleÈ possibile progettare un esperimento con meno livelli per adattarsi a un modello di secondo ordine e quindi utilizzare il modello per ottimizzare le impostazioni. Inoltre, puoi creare ciascun modello e quindi estrarre tutti i risultati contemporaneamente facendo clic con il pulsante destro del mouse su una delle tabelle dei risultati e selezionando Crea tabella combinata.
Ri: costruzione di più modelli di rete neuraleMark, grazie per i tuoi suggerimenti. Il secondo che ho provato e fallito. Conosco l'opzione "trasforma in tabella combinata" da altre piattaforme, ma forse è stata lasciata fuori dalla piattaforma neurale per qualche motivo. Stranamente, il trucco "opzione", in base al quale si tiene premuto il tasto opzione, si effettua una selezione e si applica a tutte le parti del report, non funziona né sulla piattaforma neurale, né potrebbe accelerare le cose.
Sarebbe bello se potessi avere i miei parametri di rete neurale (# nodi, #tours, ecc.) Come X in un DOE, con l'obiettivo di ridurre al minimo RSME, ma sembra che non sia possibile a causa del modo in cui devi entrare nel parametri nelle caselle particolari nel lancio del modello neurale. Dovresti fare degli script davvero avanzati, e anche in questo caso non sono sicuro che DOE e Neural possano comunicare correttamente. Ma se qualcuno là fuori conosce un modo in cui potrei fare in modo che la piattaforma neurale esegua fondamentalmente i modelli riflessi in questo screenshot (essendo una sotto-selezione del totale generale), lo apprezzerei molto. In altre parole, i valori nella prima tabella dello screenshot dovrebbero andare nelle caselle di input appropriate nel secondo screenshot (cioè, il lancio del modello neurale).
Ri: costruzione di più modelli di rete neuraleA proposito, il trucco "opzione" per ottenere tutte le funzioni rilevanti per mostrare le stesse informazioni della funzione che stai attivamente selezionando è in realtà il trucco "comando" su un Mac (quindi perché in precedenza non funzionava).
Ri: costruzione di più modelli di rete neuraleCiao @abmayfield ,
Questo era qualcosa che volevo scrivere da un po 'ed è stato davvero divertente, e il tuo post ha dato fuoco per farlo funzionare, grazie! È da un po 'che volevo avere un modo per mettere a punto la piattaforma NN poiché è molto sensibile alle condizioni iniziali ed è piuttosto lento farlo manualmente.
Quindi, ho adattato alcuni script che ho creato per altre piattaforme modello per automatizzare i loro processi di ottimizzazione, ad esempio l'albero potenziato, la foresta di bootstrap e le piattaforme XGBoost. Gli script sono pensati per essere salvati nella tabella dei dati ed essere eseguiti con il pulsante verde caldo.
Si spera che tu sappia un po 'di scripting e sappia dove adattare questi script alle tue situazioni specifiche / struttura dati / nomi di colonne, ecc. Ho inserito alcuni commenti per cercare di aiutare a spiegare cosa sto facendo in ogni gruppo più grande. Allego due script: uno per Y continui e uno per Y nominali / ordinali. Ho dovuto includere un test per vedere se l'output Y è nominale o ordinale perché il valore Number Col Box () cambia a seconda di questo. Ho utilizzato la tabella dati Big Class Families.jmp nei dati di esempio come set di dati di test. Includo anche due tabelle di dati di output che generi utilizzando l'ottimizzazione NN numerica o l'ottimizzazione NN nominale / ordinale. Ho fatto nominal su: sex utilizzando: age,: weight :,: height, e poi ho cambiato: age da Ordinal a Continuous ed età modellata con: weight e: sex per la sintonizzazione NN continua.Gli attacchi e le statistiche sono orribili, ma è inteso solo allo scopo di vedere se il JSL funziona o meno. Ho anche aggiunto una colonna: Validation alla tabella dati stratificando su: age, giusto per verificare che tutto funzionasse correttamente.
Sono sicuro che qualcun altro potrebbe creare uno script più elegante per testare la colonna di input Y () per modellare il tipo Continuous, Nominal o Ordinal e quindi inserire il valore Number Col Box () appropriato per estrarre i dati in modo appropriato utilizzando solo un codice JSL singolo.
Sarà necessario modificare gli input Y () e X () nella sezione dt << Nerual () e nella parte in cui si ottiene il nome della finestra del report, poiché prende il nome dalla variabile che si sta modellando.
Le tabelle di ottimizzazione NN potrebbero essere trattate come uno spazio che riempie DOE in linea di principio in cui le impostazioni inferiore e superiore sono quelle su cui si desidera impostarle, ad eccezione di alcune di esse, come N_Layers può essere solo 1 o 2 perché JMP consente solo 1 o 2 strati. Penalty_Method sono solo le opzioni valide nella piattaforma NN e Transform Covariate e Robust Fit assumono solo valori 0 o 1 (off o on). Includo anche la tabella di sintonizzazione NN.
Se avete domande fatemi sapere.
Ecco il mio codice per il tipo di modellazione Nominale / Ordinale:
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 strana che non capisco è che ricevo questo avviso sulla finestra di log che creo quando lo eseguo per la piattaforma NN, ma non l'ho mai ricevuto dalle mie altre piattaforme. Non riesco a capire da dove proviene l'avviso, ma funziona comunque correttamente. Forse qualcuno può aggiustare quella parte del mio codice?
"," Inaspettato. Forse manca un ")".
Tentativo di analizzare l'operando per l'operatore "<<".
Riga 23 Colonna 10:)) ►,
Come ultima nota: fai attenzione alle impostazioni in quanto può richiedere molto tempo per eseguire la modellazione se hai un numero enorme di boost, tour o funzioni di trasferimento. Fai solo attenzione a non esagerare.
Spero che sia di aiuto!,
DS
Ri: costruzione di più modelli di rete neuraleSì! Questo è esattamente quello che voglio: una tabella con tutti i parametri di input NN (ad esempio, numero di nodi TanH, numero di livelli, ecc.) Che si sincronizza con la piattaforma NN. Non l'ho ancora provato e immagino che ci vorrà un po 'di tempo, ma sto usando un piccolo set di dati di "pratica" di 20 campioni x 90 predittori, quindi potrebbe essere fattibile. In realtà, ho scoperto solo che il tipo di attivazione e il numero di nodi (così come il numero di tour) effettivamente abbassano il mio RMSE, con il potenziamento che non aiuta molto. Ma anche in questo caso, questo sarà molto più veloce rispetto a tutti i ~ 500 modelli che avevo programmato di eseguire (non così tanti come avevo intenzione di eseguire ieri per fortuna, dato che voglio rimanere sotto i 4 nodi / tipo di attivazione). Lo proverò domani e farò sapere a tutti come va.
Ri: costruzione di più modelli di rete neuraleBeh, ho fallito, ma penso che sia probabilmente a causa di un piccolo errore di scripting. Ho usato la tua tabella di ottimizzazione NN con i miei dati (allegati) e ho effettuato tutti gli aggiornamenti necessari (ho utilizzato tre campioni di addestramento + convalida + test). Se esegui l'ultimo script ("confronto reti neurali"), verrà creata la nuova tabella, ma non verranno eseguite analisi. Ho appena incluso alcuni termini X, ma in realtà saranno tutte le 86 colonne nel gruppo "dati standardizzati". Quando uso il debugger, dice che qualcosa non va con il file
" Per (io = 1 , i <= imax, i ++, "area. Spero / immagino che uno sceneggiatore più competente possa probabilmente trovare il problema in pochi secondi!
Ri: costruzione di più modelli di rete neuraleCiao @abmayfield ,
Grazie per aver condiviso la tabella dei dati, ha aiutato a eseguire il debug delle modifiche apportate nello script.
Qualche cosa che ho notato:
- Era necessario aggiungere ulteriori colonne per le statistiche del set di dati "Test" che si desidera registrare.
- Hai accidentalmente rimosso la definizione di imax, che è il numero di righe della tabella dei parametri
- Hai anche cambiato accidentalmente la chiamata alla piattaforma NN dove nello script c'è scritto dt << Neural (), qui è dove invia il comando per eseguire la modellazione della rete neurale sulla tabella dati "dt". Lo avevi cambiato in qualcos'altro.
- La definizione della finestra "w" deve avere il nome completo della finestra NN, e se stai eseguendo una sola X, a quanto pare JMP lo inserisce come parte del nome della finestra, quindi deve essere in entrambi il comando GetName e l'istruzione IF sotto di esso. Ma questo è vero solo quando si modella con una singola X. Se ne usi più di uno, non è necessario avere "by ......" nel nome della finestra o nell'istruzione IF.
- L'ultima parte è assicurarsi che le statistiche per i dati di addestramento, convalida e test siano chiamate correttamente nel comando Number Col Box ().
Il codice seguente funziona sulla tabella dati (anche allegata con script modificato). Funziona con la tabella Tuning NN che ho fornito in precedenza.
Se intendi davvero utilizzare tutte le 86 colonne, devi inserirle manualmente nella parte X (col1, col2, ...) dello script. Dovresti quindi modificare anche la parte GetName perché non includerà tutti gli 86 nomi, sarà solo il nome della finestra con la colonna di risposta.
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];
);
Spero che sia di aiuto!,
DS
Ri: costruzione di più modelli di rete neuraleAha! Grazie mille per averlo rifatto per me. Chiaramente non ho alcuna conoscenza di scripting, quindi ho semplicemente cambiato "Neural" con il nome della mia tabella dati ..... che ovviamente non avrebbe funzionato. Dopo aver cambiato il nome della mia tabella dati in "Neurale", aggiunto le colonne Test e apportato le altre modifiche consigliate, ha funzionato.
Ora quello che potrei fare è usare DOE per creare un disegno fattoriale condizionato (poiché, come hai notato, non puoi potenziare con più livelli nascosti) ed eseguire alcune centinaia di modelli sul mio computer di lavoro (in modo da non tassare eccessivamente il mio 8 -GB RAM laptop).
Sento che il tuo script deve diventare una GUI o un componente aggiuntivo (eventuali acquirenti?). JMP Pro 16, che sto testando in beta, ha uno strumento di "screening dei modelli" davvero eccezionale, ma penso che esegua i test su tutti i tipi di modellazione (ad esempio, PLS rispetto a Gen-Reg), non ALL'INTERNO delle potenziali migliaia di modelli che potrebbero essere costruito all'interno di ogni tipo di modellazione (altrimenti potrebbe non smettere mai di funzionare). Ho sentito parlare del "simulatore", ma penso che stia facendo qualcosa di diverso (non generando tonnellate di modelli simulati), anche se potrei sbagliarmi. Ancora una volta, grazie mille per il tuo aiuto. Questo mi farà sicuramente risparmiare GIORNI di tempo!
Ri: costruzione di più modelli di rete neuraleCiao @abmayfield ,
Sono contento che abbia risolto il tuo problema.
Con la modellazione basata su albero (XGBoost, alberi potenziati e foresta bootstrap), puoi facilmente utilizzare la GUI della tabella di ottimizzazione all'interno di JMP per eseguire molti modelli. Ma uno svantaggio è che mastica molta RAM. La cosa bella di eseguirlo in questo modo è che puoi eseguire decine di migliaia di diverse impostazioni dei parametri e non consuma molta RAM, solo il consumo della CPU. Ho eseguito fino a 40.000 impostazioni diverse con la foresta di bootstrap (che è lenta) e possono essere necessari alcuni giorni sul mio laptop di lavoro (32 GB di RAM e 2 GHz di CPU).
Sono anche uno dei primi ad adottare JMP 16 e lo screening del modello è carino, ma come fai notare, non sta mettendo a punto nessuno dei modelli, il che può essere un po 'fuorviante. Utilizza solo le impostazioni predefinite, che non sono sempre le migliori impostazioni per creare un modello predittivo. Potrebbe almeno aiutarti a determinare quali piattaforme meritano lo sforzo di ottimizzare ulteriormente e quali non vale la pena esaminare.
Potresti anche prendere in considerazione la piattaforma SVM per modellare i tuoi dati nominali poiché questo dovrebbe essere anche un buon metodo per quel tipo di dati.
Per quanto riguarda il simulatore, questo è qualcosa di diverso ed è inteso come un modo per testare le stime con diverse condizioni iniziali (randomizzazione). Questo fornisce una distribuzione dei valori per la stima e ti dà un intervallo di confidenza per la stima originale e puoi quindi decidere se quel modello con le stime fornite è buono o meno.
Per quanto riguarda il DOE, potresti fare un fattoriale o persino eseguire un progetto di riempimento dello spazio con i fattori impostati in modo appropriato, e penso che la piattaforma consenta anche vincoli condizionali. Inoltre, potresti considerare di eseguire uno screening dei predittori o un bootstrap sui predittori per vedere se hai effettivamente bisogno di tutti e 89 o se puoi davvero usare solo un sottoinsieme più piccolo.
Come ultima nota, dal momento che hai una tabella di dati breve e ampia, potresti prendere in considerazione invece di utilizzare una colonna di convalida, eseguire un approccio Leave one Out per la convalida. Se lo fai, dovrai modificare lo script per quello.
In bocca al lupo!,
DS
Ri: costruzione di più modelli di rete neuraleSuggerimenti più eccellenti, soprattutto per quanto riguarda il tipo di convalida. Vedo che Neural supporta holdback, Kfold o esclusione di righe (per cui immagino che sceglierei casualmente alcune righe da escludere). Se volessi cambiare lo script per cambiare il tipo di validazione, dovrei semplicemente cambiare la riga "Validation (: Validation with test),"? E i campioni trattenuti sarebbero equivalenti agli occhi di JMP come campioni di convalida? In caso contrario, dovrei rimuovere le colonne di convalida (o rinominarle) e anche le colonne di test dovrebbero essere rimosse.
Ri: costruzione di più modelli di rete neuraleCiao @abmayfield ,
Kfold è anche un altro ottimo modo per convalidare il breve set di dati. Sì, l'esclusione di riga che imposteresti come stato di riga, operazione che potresti eseguire selezionando il set di dati "test" e impostando lo stato di riga su "escluso". Se utilizzi Kfold o Holdback, JMP li utilizza per la convalida dei dati, non come test dei dati. Si spera che tu abbia anche un set di dati separato che puoi utilizzare come dati di test e non averlo nella stessa tabella di dati dei dati di addestramento e convalida.
Vorrei solo usare Kfold per la convalida e poi commentare le parti che non ti servono per eseguire lo script. Di seguito è riportata la versione modificata con un'impostazione di convalida 5-Kfold per la piattaforma NN.Dovrebbe funzionare, ha funzionato per me.
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];
);
In bocca al lupo!,
DS
Ri: costruzione di più modelli di rete neuraleWow, non posso credere di aver eseguito 300 modelli di rete neurale prima di pranzo grazie al tuo aiuto per lo scripting. Spero che questo venga raccolto e "kudo" come immagino quando sempre più persone inizieranno a vedere il valore della piattaforma NN, graviteranno verso qualcosa del genere, specialmente se è un set di dati nuovo di zecca e tu non lo fai davvero sapere dove "tuffarsi" rispetto alla sconcertante quantità di parametri di input del modello NN che possono essere leggermente modificati (a volte con conseguenti enormi differenze anche quando si aumenta, ad esempio, il tasso di apprendimento da 0,05 a 0,1). Successivamente giocherò con i diversi approcci di convalida (colonna di convalida vs holdback vs KFold). Sicuramente devo stare attento data la mia (attualmente) piccola dimensione del campione (sperando di utilizzare questi dati preliminari per ottenere fondi per aggiungere più "righe" cioè coralli).
Ri: costruzione di più modelli di rete neuraleSono contento di sentire che sta funzionando per te. Buona fortuna con la modellazione! Potresti voler controllare anche altre piattaforme di modelli e quindi confrontare i modelli su un set di dati di test per vedere qual è il miglior predittore.
DSRi: costruzione di più modelli di rete neuraleHo una domanda sullo scripting (probabilmente semplice). Diciamo che voglio cambiare l'ingresso dt in un altro. Non dovrei solo essere in grado di copiare e incollare lo script e sostituire il dt da "Neural" con qualcos'altro?
str = Eval Insert(
"report = (dt << Neural (
Y( :health designation ),
X(
Se elimino il file "Neural" originale e lo sostituisco con un'altra tabella con le stesse identiche informazioni e un nome diverso, lo script non funzionerà! È necessario disporre degli stessi identici dati in due tabelle di dati, una delle quali è denominata "Neurale?" Forse mi sono perso quella parte!
Ri: costruzione di più modelli di rete neuraleCiao @abmayfield ,
Se torni indietro e rivedi lo script, la seconda riga definisce quale tabella di dati deve essere utilizzata durante l'analisi. Il codice JSL dt = Current Data Table () definisce una variabile locale "dt" che viene quindi utilizzata nel resto dello script invece di dover chiamare la tabella dati per nome. Allo stesso modo, dt_parms è la variabile locale assegnata alla tabella di ottimizzazione NN, "ottimizzazione NN". Queste due tabelle sono davvero le uniche cose che fornisci allo script. Il resto è tutto interno.
Se copi / incolli il codice JSL in una nuova tabella dati, dovrebbe funzionare automaticamente perché lo stai eseguendo localmente in quella tabella dati.
Non dovresti modificare la chiamata dt << Nerual (), tranne per definire i tuoi Y () e X (), e forse il metodo Validation (). Il codice JSL dt << Nerual () è un comando che indica a JMP di eseguire la modellazione NN sulla tabella dati "dt". Quindi, la definizione di cosa è dt all'inizio del codice.
Sarà inoltre necessario modificare la chiamata w = Window () per riflettere quale sarà il titolo della finestra del report NN, così come il Regex () sottostante. Infine, a seconda che tu abbia o meno effettivamente il set di dati "test" come parte di una colonna di convalida, allora vorrai commentare (con il comando // all'inizio della riga) o rimuovere il commento out all'inizio del codice quando crea le colonne dei risultati del test e la definizione Test_stats e dove il codice scrive i risultati nella nuova tabella dei dati di output.
Oltre a questo, non dovresti dover modificare molto.
Per quanto riguarda la tua ultima domanda, dipende da come stai implementando il codice. Se lo stai eseguendo dall'interno della tabella dati, cioè che è salvato nella porzione di script della tabella dati e lo stai eseguendo tramite il pulsante verde caldo, allora dovresti solo cambiare Y () e X ( ) che stai utilizzando come predittori e risposta per abbinare i nomi delle colonne dalla nuova tabella di dati. Ovviamente sarà necessario avere la tabella "NN tuning" aperta. D'altra parte, se lo stai eseguendo come uno script separato, potresti voler cambiare la definizione di dt da dt = Current Data Table () a dt = Data Table (""), dove dovresti inserire il nome della nuova tabella dati tra virgolette.
La "rete neurale" a cui ti riferisci non è una tabella dati ma il comando JMP per eseguire un modello Rete neurale su una tabella dati specificata. Il comando "<<" significa eseguire l'azione che si trova a destra di << sull'oggetto a sinistra. Vicino all'inizio del codice puoi vederlo con il nuovo comando di colonna. Dove dice dt_results << New Column (), il codice indica a JMP di creare una nuova colonna per l'oggetto dt_results, che è il sottoinsieme di dati generato dalla tabella dati dt_parms.
Spero che questo ti aiuti!,
DS
Re: costruire più modelli di reti neuraliOk fantastico. Questo risponde ad alcune domande aggiuntive che avevo. Ora l'unica cosa con cui sto lottando è, quando copio, incollo ed eseguo lo script in una nuova tabella di dati, ottengo un errore di riquadro di struttura, a cui alludi nei commenti dello script. "carattere previsto arg 1 nell'accesso o nella valutazione della casella di contorno." Che cosa significa?? Ho aumentato e diminuito i numeri, ma ricevo lo stesso messaggio di errore ogni volta e lo script non verrà eseguito. Non so nemmeno cosa sia una scatola di contorno. È strano che la struttura ad albero sia identica. Ho appena cambiato il nome del file. Il nome del file è più lungo. Forse questo significa che ho bisogno di una casella di contorno più grande?