Tuning-Tabelle zum Schätzen von Partitionsmodellen: ErgebnisseEine Option zum Partitionieren von Modellen (Tree, Bootstrap, Boosted) ist die Verwendung einer Tuning-Design-Tabelle. Die Ergebnisse beginnen mit einer Tabelle, die die Designpunkte sowie das Validierungs-R-Quadrat und den Validierungs-RMSE für jeden Designpunkt enthält. Ich muss diese Tabelle auch das Trainings-R-Quadrat, Trainings-RMSE, Test-R-Quadrat und Test-RMSE anzeigen lassen. Wer kann hier helfen - vielleicht mit einem Skript?
Diese Statistiken und mehr werden unter der Tabelle für das ausgewählte Modell angezeigt, aber ich benötige diese Statistiken für alle Designpunkte. Die Methode zu meinem Wahnsinn ist folgende: Ich möchte in der Lage sein, ein Diagramm zu erstellen, das beispielsweise sowohl die Validierung R2 als auch das Training R2 gegen die Lernrate zeigt, um das Ausmaß der Überanpassung zu zeigen, das mit zunehmender Lernrate auftritt.
Betreff: Tuning-Tabelle zum Schätzen von Partitionsmodellen: ErgebnisseIch lerne viel über die Vor- und Nachteile von JMPs Drehbuch Cameron. Noch einmal, das funktioniert ganz gut. Nochmals vielen Dank an Sie. Ich schätze Ihre Hilfe sehr.
Betreff: Tuning-Tabelle zum Schätzen von Partitionsmodellen: ErgebnisseSieht so aus, als würde NumberBox "<< Get" nicht erkennen.Überprüfen Sie den Skriptindex für NumberBox und Sie sehen alle Nachrichten, die dieser Objekttyp erkennt.Einer davon ist << Get Text; Das gibt jedoch eine Zeichenfolge zurück.Sie können es mit num() in eine Zahl umwandeln.
num(report["Specifications"][NumberBox(1)] << Get Text);
Betreff: Tuning-Tabelle zum Schätzen von Partitionsmodellen: ErgebnisseHallo Kameron:
Ich habe Ihr Skript geändert (nochmals vielen Dank!), aber ich stecke bei einem letzten Problem fest. Zusammen mit den Ergebnissen von RSq, RMSE usw. aus geboosteten Bäumen möchte ich nun auch die endgültige Anzahl von Schichten abrufen. Ich dachte, dies wäre eine einfache Modifikation Ihres ursprünglichen Skripts. Siehe Zeile 13 von unten:
NL = report["Specifications"][NumberBox(1)] << Get;
Das funktioniert anscheinend nicht. Wissen Sie, ob sich der Abschnitt „Spezifikationen“ des Berichts von den „Gesamtstatistiken“ unterscheidet?
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];
);
Betreff: Tuning-Tabelle zum Schätzen von Partitionsmodellen: ErgebnisseFroh, dass ich helfen konnte!Betreff: Tuning-Tabelle zum Schätzen von Partitionsmodellen: ErgebnisseAlles funktioniert jetzt großartig, Cameron. Ich kann dir gar nicht sagen, wie sehr ich deine Weisheit schätze!
Betreff: Tuning-Tabelle zum Schätzen von Partitionsmodellen: ErgebnisseDie RMSE-Spalte befindet sich in numcolbox(2), sodass Sie diese im Skript genauso abrufen können wie R2.
Um solche Werte aus Berichten herauszuholen, müssen Sie nur herausfinden, wo sie sich in der Anzeigestruktur befinden. Wie das geht, siehst du hier: https://www.jmp.com/support/help/14/view-the-display-tree.shtml
In meinem Skript habe ich eine Variable „report“, die einen Verweis auf das Berichtsfenster aus der verstärkten Baumausgabe enthält. Innerhalb des Berichts enthält das Gliederungsfeld mit dem Titel „Gesamtstatistik“ die Tabelle mit den R2s und RMSEs. Zum numcolbox-Anzeigeelement mit den R2-Werten komme ich mit 'report["Overall Statistics"][numcolbox(1)]'Betreff: Tuning-Tabelle zum Schätzen von Partitionsmodellen: ErgebnisseHat wunderbar funktioniert, Cameron! Auf die Gefahr hin, Ihre Geduld auf die Probe zu stellen, wie würde ich die RMSEs zusammen mit den R2s abrufen? Oder allgemeiner für meine Ausbildung, wie ermittle ich die Variablennamen für R2, RMSE usw., damit ich sie im Skript aufrufen kann?
Betreff: Tuning-Tabelle zum Schätzen von Partitionsmodellen: ErgebnisseIch ändere meine Meinung.Es ist nicht allzu schwierig, ein Skript zu erstellen.Hier ist ein Beispiel mit verstärkten Bäumen und den physikalischen Daten des Autos aus der Beispieldatenbibliothek.Ich habe dazu zum Ausprobieren eine Stimmtabelle erstellt, die ich anhänge.Ich habe auch eine Validierungsspalte in die Tabelle Car Physical Data eingefügt.
Hier ist das Skript:
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];
);Ich habe einen Stapel der R2-Spalten für die Ergebnistabelle erstellt, um das folgende Diagramm zu erstellen:
Dies sollte ziemlich einfach an die anderen von Ihnen erwähnten Plattformen anzupassen sein.
Betreff: Tuning-Tabelle zum Schätzen von Partitionsmodellen: ErgebnisseIch würde denken, Sie müssten dafür ein Skript schreiben, das effektiv die Ergebnisse der integrierten Funktionalität reproduzieren und Ihre anderen gewünschten Metriken für den Trainingssatz abrufen müsste.Sicherlich machbar, aber ich bin mir nicht sicher, ob es die Mühe wert ist.