Tuning-Tabelle zur Schätzung von Partitionsmodellen: ErgebnisseEine Option zur Partitionierung von Modellen (Baum, 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. In dieser Tabelle müssen auch das Trainings-R-Quadrat, der Trainings-RMSE, der Test-R-Quadrat und der Test-RMSE angezeigt werden. Kann hier jemand weiterhelfen, vielleicht mit einem Skript?
Diese und weitere Statistiken werden unterhalb der Tabelle für das ausgewählte Modell angezeigt, ich benötige diese Statistiken jedoch für alle Entwurfspunkte. Die Methode zu meinem Wahnsinn ist folgende: Ich möchte in der Lage sein, ein Diagramm zu erstellen, das beispielsweise sowohl den Validierungs-R2 als auch den Trainings-R2 gegen die Lernrate zeigt, um das Ausmaß der Überanpassung zu zeigen, die mit zunehmender Lernrate auftritt.
Betreff: Tuning-Tabelle zur Schätzung von Partitionsmodellen: ErgebnisseIch lerne viel über die Besonderheiten von JMPs Drehbuch, Cameron. Das funktioniert mal wieder ganz gut. Nochmals vielen Dank. Ich schätze Ihre Hilfe sehr.
Betreff: Tuning-Tabelle zur Schätzung von Partitionsmodellen: ErgebnisseAnscheinend erkennt NumberBox „<< Get“ nicht.Überprüfen Sie den Skriptindex für NumberBox und Sie werden alle Nachrichten sehen, die dieser Objekttyp erkennt.Eine davon ist << Get Text; Allerdings wird dadurch eine Zeichenfolge zurückgegeben.Sie können es mit num() in eine Zahl umwandeln.
num(report["Specifications"][NumberBox(1)] << Get Text);
Betreff: Tuning-Tabelle zur Schätzung von Partitionsmodellen: ErgebnisseHallo Cameron:
Ich habe Ihr Skript geändert (nochmals vielen Dank!), bin aber bei einem letzten Problem hängen geblieben. Zusammen mit den RSq-, RMSE- usw.-Ergebnissen der geboosteten Bäume möchte ich nun auch die endgültige Anzahl der Schichten abrufen. Ich dachte, dies wäre eine einfache Modifikation Ihres Originalskripts. Bitte sehen Sie sich Zeile 13 von unten an:
NL = report["Specifications"][NumberBox(1)] << Get;
Das funktioniert offenbar nicht. Wissen Sie, ob sich der Teil „Spezifikationen“ des Berichts von dem Teil „Gesamtstatistik“ 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 zur Schätzung von Partitionsmodellen: ErgebnisseFroh, dass ich helfen konnte!Betreff: Tuning-Tabelle zur Schätzung von Partitionsmodellen: ErgebnisseJetzt funktioniert alles großartig, Cameron. Ich kann Ihnen gar nicht sagen, wie sehr ich Ihre Weisheit schätze!
Betreff: Tuning-Tabelle zur Schätzung von Partitionsmodellen: ErgebnisseDie RMSE-Spalte befindet sich in numcolbox(2), sodass Sie sie im Skript auf die gleiche Weise abrufen können wie R2.
Um solche Werte aus Berichten zu entnehmen, müssen Sie lediglich herausfinden, wo sie sich in der Anzeigestruktur befinden. Wie das geht, können Sie hier sehen: 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 Ausgabe des verstärkten Baums enthält. Im Bericht enthält das Übersichtsfeld mit dem Titel „Gesamtstatistik“ die Tabelle mit den R2s und RMSEs. Mit „report[„Overall Statistics“][numcolbox(1)]“ komme ich zum Anzeigeelement „numcolbox“ mit den R2-Werten.Betreff: Tuning-Tabelle zur Schätzung von Partitionsmodellen: ErgebnisseHat wunderbar funktioniert, Cameron! Auch 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 bestimme ich die Variablennamen für R2, RMSE usw., damit ich sie im Skript aufrufen kann?
Betreff: Tuning-Tabelle zur Schätzung 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 Car Physical Data aus der Beispieldatenbibliothek.Zum Ausprobieren habe ich dazu eine Tuning-Tabelle erstellt, die ich beifüge.Ich habe auch eine Validierungsspalte in die Tabelle „Autophysikalische Daten“ 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 sich ziemlich einfach an die anderen von Ihnen genannten Plattformen anpassen lassen.
Betreff: Tuning-Tabelle zur Schätzung von Partitionsmodellen: ErgebnisseIch denke, 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 erfassen müsste.Sicherlich machbar, aber ich bin mir nicht sicher, ob sich der Aufwand lohnt.