Strafen zur Anzahl der Teilungen in der Partitionsplattform hinzufügen, um die Anzahl der Blätter zu reduzieren?Ich verbringe in letzter Zeit viel Zeit mit der Partition-Plattform und suche derzeit nach einer Möglichkeit, die Analysen zu automatisieren.
Mein Problem ist folgendes: Im Allgemeinen habe ich den Datensatz 50/50 Training/Validierung aufgeteilt und auf „Los“ geklickt, was die Validierung RSquare maximiert. Aber, Dies führt häufig dazu, dass Modelle eine größere Anzahl von Teilungen aufweisen, als wirklich glaubwürdig sind , z. B. hier, wo 5 Teilungen erstellt werden, um den Validierungs-RSquare-Wert von 0,288 zu erreichen, wenn nur zwei Teilungen verwendet würden, würde man eine fast gleich gute Anpassung von 0,27 erhalten.

Daher muss ich die Aufteilungen im Allgemeinen immer manuell bereinigen, um ein akzeptabel gutes Validierungs-RSquare mit einer akzeptabel geringen Anzahl an Modelltermen zu erhalten.
Gibt es eine Möglichkeit, JMP aufzufordern, eine Strafe anzuwenden und eine Art „reguliertes“ Validierungs-RSquare zu erstellen, das die Modellauswahlkriterien basierend auf der Anzahl der Teilungen bestraft? Beispielsweise könnte das „regulierte“ Validierungs-RSquare [Validierungs-RSquare] – 0,05*[N Teilungen] sein. Oder vielleicht gibt es eine bessere Möglichkeit zur Regularisierung (z. B. weitere Terme hinzufügen, wenn sie mindestens 5 % der Restvarianz modellieren können, statt 5 % der absoluten Varianz).
JSL-Lösungen sind willkommen, da es sich hier vor allem um automatisierte Analysen handelt.
Prädiktive Modellierung und maschinelles LernenBetreff: Strafen zur Anzahl der Teilungen in der Partitionsplattform hinzufügen, um die Anzahl der Blätter zu reduzieren?Hallo @markschwab ,
Sie verwenden den Code wie vorgesehen. Ich hatte nur einige Vermutungen angestellt, die nicht allgemein genug waren, um unter allen Umständen zu funktionieren. Ich dachte, Sie hätten eine Validierungsspalte und habe daher ein Skript für die Ausführung mit einer erstellt. Das aktualisierte Skript unten umgeht dieses Problem, indem es Ihnen die Eingabe des Validierungsteils ermöglicht, genau wie im Partitionsplattformfenster. Verwenden Sie jedoch nicht gleichzeitig eine Validierungsspalte und einen Validierungsteil – das Skript wurde noch nicht codiert, um dies zu berücksichtigen, und ist wiederum nicht vollständig generisch genug für alle möglichen Benutzereingaben.
Der Fehler, den Sie erhalten haben, liegt wiederum daran, dass ich davon ausgegangen bin, dass es mehr als einen X-Faktor im Prozess gibt, und daher den Verweis auf das Berichtsfenster entsprechend geschrieben habe. Das ist jetzt behoben, sodass es keine Rolle spielt, ob es nur 1 X oder mehrere X gibt.
Auch hier ist dieses Skript nicht vollständig generisch genug, um die nicht numerische/nicht kontinuierliche Antwortspalte Y zu berücksichtigen. Wenn die Antwort kategorisch ist, ist dieses Skript nicht darauf ausgelegt, dies zu berücksichtigen. Es kann bei Bedarf leicht geändert werden.
Hoffe das hilft,
DS
UPDATE: Ok, ich konnte mir also nicht helfen, mehr zu programmieren und habe einige bestrafte RSquare-Spalten und eine Trainingsvalidierungs-RSquare-Spalte eingefügt. Sie können die Formel und den Koeffizienten der Strafberechnung ändern, indem Sie den Code bearbeiten – ich habe ihn auf Ihr Konzept von Rsquare-0,05*Splits eingestellt. Darüber hinaus habe ich auch Code eingefügt, um die Ergebnisse grafisch anzuzeigen, wenn die Berechnungen abgeschlossen sind.
UPDATE 2: Ich bin zurückgegangen und habe den Code etwas unterhaltsamer gestaltet. Jetzt können Sie die Tabellenergebnisse neben den Diagrammergebnissen sehen und indem Sie den Punkt im Diagramm auswählen, der Ihnen am besten gefällt, können Sie die Partition für diesen bestimmten Punkt erneut ausführen Anzahl der Teilungen, wenn Sie auf „OK“ klicken. Wie zuvor habe ich es nicht supergenerisch für Benutzereingaben jeglicher Art gemacht, sondern versucht, es für numerische/kontinuierliche Antworten funktionieren zu lassen. Was Sie jetzt haben, sollte ausreichen, um Sie in Schwung zu bringen.
PS Verwenden Sie beim Erlernen des Codes den Skriptindex im Hilfemenü von JMP. Es ist sehr hilfreich, einige der Aufrufe zu verstehen und sie bei der Skripterstellung zu verwenden.
Names Default To Here( 1 );
lbWidth = 168;
dt = Open( "$SAMPLE_DATA/Boston Housing.jmp" );
// Expression to store the current settings in global variables
recallRolesS1 = Expr(
::dtchosenRecall = dtchosen
);
// Expression to clear all current settings. KW: Clear
clearRoles = Expr(
Try(
colListY << RemoveAll;
ColListX << RemoveAll;
ColListW << RemoveAll;
ColListF << RemoveAll;
colListV << RemoveAll;
)
);
// Expression to store the current settings in global variables
recallRoles = Expr(
::ycolRecall = colListY << GetItems;
::xcolRecall = colListX << GetItems;
::WcolRecall = colListW << GetItems;
::FcolRecall = colListF << GetItems;
::vcolRecall = colListV << GetItems;
::max_spRecall = max_sp_input << get;
::partVPRecall = partVP_input << Get;
);
//Function to choose the data table to model. KW: choose_data
choose_data_table = Function( {},
list = {};
For( i = 1, i <= N Table(), i++,
list[i] = Data Table( i ) << get name
);
win = New Window( "Select a data table",
<<MODAL></MODAL>Betreff: Strafen zur Anzahl der Teilungen in der Partitionsplattform hinzufügen, um die Anzahl der Blätter zu reduzieren?Danke @SDF1 für die ausführliche Antwort! Es wird einige Zeit dauern, bis ich das Drehbuch verdaut habe.
Könnten Sie mir zunächst eine kurze Einführung mit einem Anwendungsbeispiel geben? Folgendes habe ich versucht und erhalte eine Fehlermeldung:
1) Kommentieren Sie die Zeile „dt = Open( „$SAMPLE_DATA/Boston Housing.jmp“ );“ aus. und führen Sie das Skript aus
2) Klicken Sie auf „Datentabelle auswählen“ -> „Boston Housing“ -> OK
3) Klicken Sie unter „Aktion“ auf „OK“.
4) Im Fenster „JSL hilft bei der Partitionierung“ habe ich „nox“ in Y und „age“ in X umgewandelt und auf „OK“ geklickt.
5) Ich sehe die JMP-Warnung „ Indexproblem{20} beim Zugriff oder bei der Auswertung von 'w[Outline Box("Partition for " || ycols[1])]' , w[/*###*/Outline Box( "Partition for " || ycols[ 1] )] ". Die Tabelle „Partition_Results“ ist null, mit Ausnahme der Spalte „Splits“, die zwischen 1 und 20 liegt.
Betreff: Strafen zur Anzahl der Teilungen in der Partitionsplattform hinzufügen, um die Anzahl der Blätter zu reduzieren?Hallo @markschwab ,
Was Ihre Bedenken betrifft: Ist die Anzahl der Teilungen wirklich glaubwürdig oder handelt es sich um eine relativ niedrige Anzahl von Teilungen? Ich glaube, die Anzahl der glaubwürdigen Aufteilungen entspricht den Zeilen in der Datentabelle minus 1, aber nicht 100 %.
Wie auch immer, ich füge einen Codeausschnitt hinzu, den Sie für Ihre automatische Partitionierung verwenden können. Ich habe dies mit der Datei Boston Housing.jmp gemacht.
Wenn Sie mit JSL vertraut sind, sollten Sie es an Ihre Bedürfnisse anpassen können. Der Code ist ziemlich einfach und geht davon aus, dass Sie über eine numerische, kontinuierliche Antwortspalte verfügen. Es führt die Partitionierung für die maximale Anzahl der Partitionen durch, die Sie im ersten Fenster definieren, und speichert dann die Partitionierungsstatistiken. Sie können ganz einfach Ihre eigene Spaltenformel erstellen, um beispielsweise eine „bestrafte“ Validierung für RSquare zu erhalten, oder wie auch immer Sie die Partition bestrafen möchten. Sie können dann auswählen, welche Partition für Ihre Kriterien am besten geeignet ist, und sie mit der von Ihnen festgelegten festen Anzahl von Teilungen erneut ausführen. Ich habe einige Ideen, wie ich das Programm aufpeppen könnte, aber das ist für später.
Als Randbemerkung könnten Sie erwägen, eine Validierungsspalte zu erstellen (wenn Sie nicht über Pro verfügen, können Sie dies tun, indem Sie im Skriptindex nach ihr suchen) und nach Ihrer Antwortspalte zu stratifizieren. Dadurch erhalten die Trainings-/Validierungssätze mehr gleiche Vertretung bei Nicht-50/50-Aufteilungen. Auf diese Weise stehen Ihnen mehr Daten zum Trainieren Ihrer Partition zur Verfügung.
Hoffe das hilft!,
DS
Names Default To Here( 1 );
lbWidth = 168;
//dt = Open( "$SAMPLE_DATA/Boston Housing.jmp" );
// Expression to store the current settings in global variables
recallRolesS1 = Expr(
::dtchosenRecall = dtchosen
);
// Expression to clear all current settings. KW: Clear
clearRoles = Expr(
Try(
colListY << RemoveAll;
ColListX << RemoveAll;
ColListW << RemoveAll;
ColListF << RemoveAll;
colListV << RemoveAll;
)
);
// Expression to store the current settings in global variables
recallRoles = Expr(
::ycolRecall = colListY << GetItems;
::xcolRecall = colListX << GetItems;
::WcolRecall = colListW << GetItems;
::FcolRecall = colListF << GetItems;
::vcolRecall = colListV << GetItems;
);
//Function to choose the data table to model. KW: choose_data
choose_data_table = Function( {},
list = {};
For( i = 1, i <= N Table(), i++,
list[i] = Data Table( i ) << get name
);
win = New Window( "Select a data table",
<<MODAL></MODAL>