Tabella di ottimizzazione per la stima dei modelli di partizione: risultatiUn'opzione per il partizionamento dei modelli (albero, bootstrap, boosted) consiste nell'utilizzare una tabella dati di ottimizzazione. I risultati iniziano con una tabella che include i punti di progettazione, nonché l'R quadrato di convalida e l'RMSE di convalida per ciascun punto di progettazione. Devo fare in modo che la tabella mostri anche l'R-quadrato di addestramento, l'RMSE di addestramento, il R-quadrato di test e l'RMSE di test. Qualcuno può dare una mano qui, magari con uno script?
Queste statistiche, e altro ancora, sono mostrate sotto la tabella per il modello scelto, ma ho bisogno di queste statistiche per tutti i punti di progettazione. Il metodo per la mia follia è questo: voglio essere in grado di produrre un grafico che mostri, ad esempio, sia la convalida R2 che l'addestramento R2 rispetto al tasso di apprendimento per mostrare la quantità di overfitting che si verifica con l'aumento del tasso di apprendimento.
Ri: Tabella di ottimizzazione per la stima dei modelli di partizione: risultatiSto imparando molto sui dettagli della sceneggiatura di JMP, Cameron. Ancora una volta, funziona perfettamente. Grazie ancora a te. Apprezzo molto il tuo aiuto.
Ri: Tabella di ottimizzazione per la stima dei modelli di partizione: risultatiSembra che NumberBox non riconosca "<< Get".Controlla l'indice di scripting per NumberBox e vedrai tutti i messaggi che quel tipo di oggetto riconoscerà.Uno di questi è << Ottieni testo; tuttavia ciò restituirà una stringa.Puoi convertirlo in un numero usando num().
num(report["Specifications"][NumberBox(1)] << Get Text);
Ri: Tabella di ottimizzazione per la stima dei modelli di partizione: risultatiCiao Cameron:
Ho modificato il tuo script (grazie ancora!) ma sono bloccato su un ultimo problema. Insieme ai risultati RSq, RMSE, ecc. degli alberi potenziati, vorrei ora recuperare anche il numero finale di livelli. Ho pensato che questa sarebbe stata una semplice modifica della tua sceneggiatura originale. Si prega di vedere la riga 13 dal basso:
NL = report["Specifications"][NumberBox(1)] << Get;
Questo non funziona, a quanto pare. Sai se c'è qualcosa di diverso nella parte "Specifiche" del rapporto rispetto alle "Statistiche generali"?
dt = Data Table("C.jmp");
dt_pars = Data Table("table 3400.jmp");
//Get copy of pars table to store results
dt_results = dt_pars << Subset( All rows, Selected columns only( 0 ) );
dt_results << New Column("Seed");
dt_results << New Column("Final N Layers");
dt_results << New Column("Rsq Training");
dt_results << New Column("Rsq Validation");
dt_results << New Column("Rsq Test");
dt_results << New Column("RMSE Training");
dt_results << New Column("RMSE Validation");
dt_results << New Column("RMSE Test");
dt_results << New Column("N Training");
dt_results << New Column("N Validation");
dt_results << New Column("N Test");
for(i = 1, i<= N Row(dt_pars), i++,
SED = dt_pars: Seeds[i];
SPT = dt_pars:Splits Per Tree[i];
LR = dt_pars:Learning Rate[i];
RSR = dt_pars:Row Sampling Rate[i];
CSR = dt_pars:Column Sampling Rate[i];
MSS = dt_pars:Minimum Size Split[i];
NL = dt_pars:Number of Layers[i];
str = Eval Insert("\[report = (dt << Boosted Tree(
Y( :PR ),
X(
:Pe,
:To,
:Td,
),
Validation( :Name( "Train/Valid/Test" ) ),
Set Random Seed( ^SED^ ),
Method( "Boosted Tree" ),
Splits per Tree( ^SPT^ ),
Number of Layers( ^NL^ ),
Learning Rate( ^LR^ ),
Row Sampling Rate( ^RSR^ ),
Column Sampling Rate( ^CSR^ ),
Minimum Size Split( ^MSS^ ),
Go,
invisible
)) << Report;]\");
//Fit the boosted tree
Eval(Parse(str));
//Get the Rsq values and insert them into the results table
R2 = report["Overall Statistics"][NumberColBox(1)] << Get;
RMSE = report["Overall Statistics"][NumberColBox(2)] << Get;
N = report["Overall Statistics"][NumberColBox(3)] << Get;
NL = report["Specifications"][NumberBox(1)] << Get;
report << Close Window;
dt_results:Final N Layers[i] = NL[1];
dt_results:Rsq Training[i] = R2[1];
dt_results:Rsq Validation[i] = R2[2];
dt_results:Rsq Test[i] = R2[3];
dt_results:RMSE Training[i] = RMSE[1];
dt_results:RMSE Validation[i] = RMSE[2];
dt_results:RMSE Test[i] = RMSE[3];
dt_results:N Training[i] = N[1];
dt_results:N Validation[i] = N[2];
dt_results:N Test[i] = N[3];
);
Ri: Tabella di ottimizzazione per la stima dei modelli di partizione: risultatiSono contento di aver potuto aiutare!Ri: Tabella di ottimizzazione per la stima dei modelli di partizione: risultatiFunziona tutto alla grande adesso, Cameron. Non posso dirti quanto apprezzo la tua saggezza!
Ri: Tabella di ottimizzazione per la stima dei modelli di partizione: risultatiLa colonna RMSE sarà in numcolbox(2), quindi potresti prenderla nello script nello stesso modo in cui prendi R2.
Per estrarre valori del genere dai report, devi solo capire dove si trovano nella struttura di visualizzazione. Puoi vedere come farlo qui: https://www.jmp.com/support/help/14/view-the-display-tree.shtml
Nel mio script, ho una variabile "report" che contiene un riferimento alla finestra del report dall'output dell'albero potenziato. All'interno del rapporto, la casella di riepilogo intitolata "Statistiche generali" contiene la tabella con gli R2 e gli RMSE. Arrivo all'elemento di visualizzazione numcolbox con i valori R2 utilizzando 'report["Overall Statistics"][numcolbox(1)]'Ri: Tabella di ottimizzazione per la stima dei modelli di partizione: risultatiHa funzionato a meraviglia, Cameron! A rischio di mettere alla prova la tua pazienza, come potrei recuperare gli RMSE insieme agli R2? Oppure, più in generale per la mia formazione, come posso determinare i nomi delle variabili per R2, RMSE, ecc. in modo da poterli richiamare nello script?
Ri: Tabella di ottimizzazione per la stima dei modelli di partizione: risultatiHo cambiato idea.Non è troppo difficile scrivere una sceneggiatura.Ecco un esempio con alberi potenziati e dati fisici dell'auto dalla libreria dati di esempio.Ho creato una tabella di ottimizzazione per provarlo, che allego.Ho anche inserito una colonna di convalida nella tabella Dati fisici dell'auto.
Ecco la sceneggiatura:
dt = Data Table("Car Physical Data");
dt_pars = Data Table("TuningTable");
//Get copy of pars table to store results
dt_results = dt_pars << Subset( All rows, Selected columns only( 0 ) );
dt_results << New Column("Rsq Training");
dt_results << New Column("Rsq Validation");
for(i = 1, i<= N Row(dt_pars), i++,
SPT = dt_pars:SplitsPerTree[i];
LR = dt_pars:Learning Rate[i];
RSR = dt_pars:Row Sampling Rate[i];
CSR = dt_pars:Column Sampling Rate[i];
str = Eval Insert("\[report = (dt << Boosted Tree(
Y( :Weight ),
X(
:Country,
:Type,
:Turning Circle,
:Displacement,
:Horsepower,
:Gas Tank Size
),
Validation( :Validation ),
Method( "Boosted Tree" ),
Splits per Tree( ^SPT^ ),
Number of Layers( 50 ),
Learning Rate( ^LR^ ),
Row Sampling Rate( ^RSR^ ),
Column Sampling Rate( ^CSR^ ),
Go,
invisible
)) << Report;]\");
//Fit the boosted tree
Eval(Parse(str));
//Get the Rsq values and insert them into the results table
R2 = report["Overall Statistics"][NumberColBox(1)] << Get;
report << Close Window;
dt_results:Rsq Training[i] = R2[1];
dt_results:Rsq Validation[i] = R2[2];
);Ho creato uno stack delle colonne R2 per la tabella dei risultati per creare il seguente grafico:
Dovrebbe essere abbastanza facile adattarlo alle altre piattaforme che hai menzionato.
Ri: Tabella di ottimizzazione per la stima dei modelli di partizione: risultatiPenserei che dovresti scrivere uno script per questo, che dovrebbe effettivamente riprodurre i risultati della funzionalità integrata + acquisire le altre metriche desiderate per il set di addestramento.Sicuramente fattibile, ma non sono sicuro che ne valga la pena.