Aufbau mehrerer neuronaler NetzwerkmodelleIch verwende die neuronale Plattform, um Vorhersagen zu treffen, und da ich neu in der neuronalen Vernetzung bin, bin ich mit allen Eingabeparametern nur wenig vertraut: Anzahl der verborgenen Schichten, Anzahl der Knoten / verborgene Schicht, Boosting-Modelle, Lernrate und Touren. Ich möchte versuchen, RMSE und die Fehlklassifizierungsrate des Validierungsmodells zu minimieren. Ich habe jeden Parameter iterativ einzeln geändert, die Modellleistungsparameter gespeichert und in eine neue JMP-Tabelle eingefügt. Dies wird jedoch Tage dauern, da es so viele Kombinationen von Ebenen, Knoten, Touren und usw. Wäre es möglich, ein Skript zu schreiben, in das JMP Pro beispielsweise 1.000 Modelle erstellt und die Daten in einer Tabelle speichert, damit ich nicht jeden Modelleingabeparameter manuell ändern muss?
# Versteckte Ebenen: 1 oder 2
# Sigma-Knoten: 0, 1, 2, 3 oder 4
#Lineare Knoten: 0, 1, 2, 3 oder 4
# Radialknoten: 0, 1, 2, 3 oder 4
# Boosting-Modelle: Keine Ahnung, 1-5 vielleicht?
# Lernrate: 0-0,5 in Schritten von 0,1
#tours: 1, 5, 10, 20, 100
Das wäre also 2 x 5 x 5 x 5 x 5 x 5 x 5 = ~ 30.000.
Ich denke, ich könnte ein paar davon auf den Kopf stellen, wenn ich mit dem Datensatz besser vertraut bin. Natürlich macht es keinen Sinn, viele Knoten und eine hohe Anzahl von Boosting-Modellen zu haben (und auch keine bestimmten anderen Kombinationen), aber wir sprechen immer noch über potenziell Hunderte von Modellen, die es wert sind, getestet zu werden. Sicherlich könnte diese Art des Modell-Screenings / -Vergleichs per Skript erstellt werden, oder?
AnalytikSkriptingBetreff: Erstellen mehrerer neuronaler NetzwerkmodelleSie können ein Experiment mit weniger Ebenen entwerfen, um es an ein Modell zweiter Ordnung anzupassen, und dann das Modell verwenden, um die Einstellungen zu optimieren. Sie können auch jedes Modell erstellen und dann alle Ergebnisse auf einmal extrahieren, indem Sie mit der rechten Maustaste auf eine der Ergebnistabellen klicken und In kombinierte Tabelle erstellen auswählen.
Betreff: Erstellen mehrerer neuronaler NetzwerkmodelleMark, danke für deine Vorschläge. Der zweite, den ich versucht habe und der fehlgeschlagen ist. Ich kenne die Option "In kombinierte Tabelle umwandeln" von anderen Plattformen, aber vielleicht wurde sie aus irgendeinem Grund von der neuronalen Plattform weggelassen. Seltsamerweise funktioniert der Trick "Option", bei dem Sie die Optionstaste gedrückt halten, eine Auswahl treffen und der für alle Teile des Berichts gilt, weder auf der neuronalen Plattform noch könnte dies die Dinge beschleunigen.
Das wäre cool, wenn ich meine neuronalen Netzwerkparameter (# Knoten, #Touren usw.) als X in einem DOE haben könnte, mit dem Ziel, RSME zu minimieren, aber es scheint aufgrund der Art und Weise, wie Sie das eingeben müssen, nicht möglich zu sein Parameter in den jeweiligen Feldern beim Start des neuronalen Modells. Sie müssten einige wirklich fortgeschrittene Skripte erstellen, und selbst dann bin ich mir nicht sicher, ob DOE und Neural richtig kommunizieren können. Aber wenn jemand da draußen weiß, wie ich die neuronale Plattform dazu bringen könnte, die in diesem Screenshot wiedergegebenen Modelle auszuführen (eine Unterauswahl der Gesamtsumme), würde ich es sehr schätzen. Mit anderen Worten, die Werte in der ersten Screenshot-Tabelle müssten zu den entsprechenden Eingabefeldern im zweiten Screenshot (dh dem Start des neuronalen Modells) gehen.
Betreff: Erstellen mehrerer neuronaler NetzwerkmodelleÜbrigens ist der Trick "Option", mit dem alle relevanten Funktionen dieselben Informationen anzeigen wie die Funktion, die Sie aktiv auswählen, der Trick "Befehl" auf einem Mac (daher hat dies zuvor nicht funktioniert).
Betreff: Erstellen mehrerer neuronaler NetzwerkmodelleHallo @abmayfield ,
Das war etwas, das ich schon seit einiger Zeit schreiben wollte und das wirklich Spaß gemacht hat, und dein Beitrag hat das Feuer gegeben, um es in Gang zu bringen, danke! Ich wollte schon seit einiger Zeit eine Möglichkeit haben, die NN-Plattform zu optimieren, da sie sehr empfindlich auf die Anfangsbedingungen reagiert und es ziemlich langsam ist, dies manuell zu tun.
Daher habe ich einige Skripte, die ich für andere Modellplattformen erstellt habe, angepasst, um deren Optimierungsprozesse zu automatisieren, z. B. die Boosted Tree-, Bootstrap Forest- und XGBoost-Plattformen. Die Skripte sollen in Ihrer Datentabelle gespeichert und mit der grünen Schaltfläche ausgeführt werden.
Hoffentlich wissen Sie etwas über Skripte und wissen, wo Sie diese Skripte an Ihre spezifischen Situationen / Datenstrukturen / Spaltennamen usw. anpassen können. Ich habe einige Kommentare eingegeben, um zu erklären, was ich in jeder größeren Gruppe mache. Ich füge zwei Skripte hinzu - eines für fortlaufende Ys und eines für nominelle / ordinale Ys. Ich musste einen Test einschließen, um festzustellen, ob der Ausgang Y nominal oder ordinal ist, da sich der Wert von Number Col Box () abhängig davon ändert. Ich habe die Datentabelle Big Class Families.jmp in den Beispieldaten als Testdatensatz verwendet. Ich füge auch zwei Ausgabedatentabellen hinzu, die ich entweder mit der numerischen NN-Abstimmung oder der nominalen / ordinalen NN-Abstimmung generiere. Ich habe nominal auf: Geschlecht mit: Alter ,: Gewicht:,: Größe, und dann habe ich: Alter von Ordinal auf Kontinuierliches und modelliertes Alter mit: Gewicht und: Geschlecht für die kontinuierliche NN-Abstimmung geändert.Die Passungen und Statistiken sind schrecklich, aber sie dienen nur dazu, festzustellen, ob die JSL funktioniert oder nicht. Ich habe der Datentabelle auch eine Spalte: Validierung hinzugefügt, indem ich nach Alter geschichtet habe, um zu überprüfen, ob alles korrekt funktioniert hat.
Ich bin sicher, jemand anderes könnte es eleganter gestalten, um die Eingabespalte Y () auf den Modellierungstyp Continuous, Nominal oder Ordinal zu testen und dann den entsprechenden Wert für Number Col Box () einzufügen, um die Daten mit nur a entsprechend zu extrahieren einzelner JSL-Code.
Sie müssen die Eingaben Y () und X () im Abschnitt dt << Nerual () sowie den Teil bearbeiten, in dem Sie den Namen des Berichtsfensters erhalten, der nach der zu modellierenden Variablen benannt ist.
Die NN-Tuning-Tabellen könnten im Prinzip wie ein raumfüllendes DOE behandelt werden, bei dem die unteren und oberen Einstellungen so sind, wie Sie es möchten, mit Ausnahme einiger von ihnen, wie N_Layers können nur 1 oder 2 sein, da JMP nur 1 oder 2 zulässt Lagen. Penalty_Method sind nur die Optionen, die auf der NN-Plattform gültig sind, und Transform Covariate und Robust Fit nehmen nur Werte von 0 oder 1 an (aus oder ein). Ich schließe auch den NN-Tuning-Tisch ein.
Wenn Sie Fragen haben, lassen Sie es mich wissen.
Hier ist mein Code für den Nominal / Ordinal-Modellierungstyp:
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>
Eine seltsame Sache, die ich nicht verstehe, ist, dass ich diese Warnung über das Protokollfenster erhalte, das ich erstelle, wenn ich es für die NN-Plattform ausführe, aber ich habe es nie von meinen anderen Plattformen erhalten. Ich kann nicht verfolgen, woher diese Warnung kommt, aber sie läuft immer noch korrekt. Vielleicht kann jemand diesen Teil meines Codes reparieren?
Unerwartetes ",". Vielleicht fehlt ein ")".
Versuch, den Operanden für den Operator "<<" zu analysieren.
Zeile 23 Spalte 10
) ►,
Als letzte Anmerkung: Seien Sie vorsichtig mit den Einstellungen, da das Ausführen der Modellierung SEHR lange dauern kann, wenn Sie über eine große Anzahl von Boosts, Touren oder Übertragungsfunktionen verfügen. Seien Sie nur vorsichtig, um nicht über Bord zu gehen.
Hoffe das hilft!,
DS
Betreff: Erstellen mehrerer neuronaler NetzwerkmodelleJa! Dies ist genau das, was ich möchte: eine Tabelle mit allen NN-Eingabeparametern (z. B. Anzahl der TanH-Knoten, Anzahl der Schichten usw.), die mit der NN-Plattform synchronisiert wird. Ich habe es noch nicht ausprobiert, und ich kann mir vorstellen, dass es eine Weile dauern wird, aber ich verwende einen kleinen "Übungs" -Datensatz mit 20 Stichproben x 90 Prädiktoren, sodass dies möglicherweise machbar ist. In Wirklichkeit habe ich wirklich nur festgestellt, dass die Art der Aktivierung und die Anzahl der Knoten (sowie die Anzahl der Touren) meinen RMSE tatsächlich senken, wobei das Boosten nicht sehr hilfreich ist. Aber selbst dann ist dies viel schneller als bei allen ~ 500 Modellen, die ich ausführen wollte (nicht annähernd so viele, wie ich gestern zum Glück geplant hatte, da ich unter 4 Knoten / Aktivierungstyp bleiben möchte). Ich werde es morgen ausprobieren und alle wissen lassen, wie es geht.
Betreff: Erstellen mehrerer neuronaler NetzwerkmodelleNun, ich habe versagt, aber ich denke, es liegt wahrscheinlich an einem winzigen Skriptfehler. Ich habe Ihre NN-Tuning-Tabelle mit meinen Daten (im Anhang) verwendet und alle erforderlichen Aktualisierungen vorgenommen (ich habe drei Trainings-, Validierungs- und Testmuster verwendet). Wenn Sie das letzte Skript ausführen ("Vergleich neuronaler Netze"), wird die neue Tabelle erstellt, es werden jedoch keine Analysen ausgeführt. Ich habe nur ein paar X-Begriffe eingefügt, aber es werden tatsächlich alle 86 Spalten in der Gruppe "Standardisierte Daten" sein. Wenn ich den Debugger benutze, heißt es, dass mit dem etwas schief geht
"" Zum (i = 1 , i <= imax, i ++, "Bereich. Ich hoffe / vermute, dass ein kompetenterer Drehbuchautor das Problem wahrscheinlich in Sekunden finden kann!
Betreff: Erstellen mehrerer neuronaler NetzwerkmodelleHallo @abmayfield ,
Vielen Dank, dass Sie die Datentabelle freigegeben haben. Es hat Ihnen geholfen, die im Skript vorgenommenen Änderungen zu debuggen.
Ein paar Dinge, die mir aufgefallen sind:
- Sie mussten zusätzliche Spalten für die Datensatzstatistik "Test" hinzufügen, die Sie aufzeichnen möchten.
- Sie haben versehentlich die Definition für imax entfernt, dh die Anzahl der Zeilen der Parametertabelle
- Sie haben den Aufruf auch versehentlich auf die NN-Plattform geändert, auf der im Skript dt << Neural () steht. Hier wird der Befehl zum Ausführen der neuronalen Netzmodellierung für die Datentabelle "dt" gesendet. Sie hatten es in etwas anderes geändert.
- Die Definition des Fensters "w" muss den vollständigen Namen des NN-Fensters haben. Wenn Sie nur ein einzelnes X ausführen, fügt JMP dies anscheinend als Teil des Fensternamens ein, sodass es in beiden sein muss den Befehl GetName und die IF-Anweisung darunter. Dies gilt jedoch nur für die Modellierung mit einem einzelnen X. Wenn Sie mehr als eine verwenden, muss das "by ......" nicht im Fensternamen oder in der IF-Anweisung enthalten sein.
- Der letzte Teil besteht darin, sicherzustellen, dass die Statistiken für die Trainings-, Validierungs- und Testdaten im Befehl Number Col Box () korrekt aufgerufen werden.
Der folgende Code funktioniert für Ihre Datentabelle (auch mit geändertem Skript beigefügt). Es funktioniert mit der NN-Tuning-Tabelle, die ich zuvor angegeben habe.
Wenn Sie wirklich alle 86 Spalten verwenden möchten, müssen Sie sie manuell in den X-Teil (Spalte1, Spalte2, ...) des Skripts einfügen. Sie sollten dann auch den GetName-Teil bearbeiten, da er nicht alle 86 Namen enthält, sondern nur den Fensternamen mit der Antwortspalte.
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];
);
Hoffe das hilft!,
DS
Betreff: Erstellen mehrerer neuronaler NetzwerkmodelleAha! Vielen Dank, dass Sie es für mich wiederholt haben. Ich habe offensichtlich keine Kenntnisse in Skripten, also habe ich "Neural" in den Namen meiner Datentabelle geändert ... was offensichtlich nicht funktionieren würde. Nachdem ich den Namen meiner Datentabelle in "Neural" geändert, die Testspalten hinzugefügt und die anderen von Ihnen empfohlenen Änderungen vorgenommen hatte, funktionierte dies.
Was ich jetzt tun könnte, ist DOE zu verwenden, um ein bedingt faktorielles Design zu erstellen (da Sie, wie Sie bemerkt haben, nicht mit mehreren versteckten Ebenen Boosten können) und ein paar hundert Modelle auf meinem Arbeitscomputer auszuführen (um meine 8 nicht übermäßig zu besteuern -GB RAM Laptop).
Ich habe das Gefühl, dass Ihr Skript eine GUI oder ein Add-In werden muss (irgendwelche Abnehmer?). JMP Pro 16, das ich in der Beta-Phase teste, verfügt über ein wirklich großartiges Tool zum "Modell-Screening", aber ich denke, es testet über verschiedene Modellierungstypen hinweg (z. B. PLS vs. Gen-Reg), nicht INNERHALB der potenziell Tausenden von Modellen, die es sein könnten innerhalb jedes Modellierungstyps erstellt (oder es hört möglicherweise nie auf zu laufen). Ich habe vom "Simulator" gehört, aber ich denke, dass dies etwas anderes bewirkt (keine Tonnen von simulierten Modellen erzeugt), obwohl ich mich irren könnte. Nochmals vielen Dank für Ihre Hilfe. Das wird mir sicher TAGE Zeit sparen!
Betreff: Erstellen mehrerer neuronaler NetzwerkmodelleHallo @abmayfield ,
Ich bin froh, dass es dein Problem behoben hat.
Mit der baumbasierten Modellierung (XGBoost, verstärkte Bäume und Bootstrap-Gesamtstruktur) können Sie die GUI der Tuning-Tabelle in JMP problemlos zum Ausführen vieler Modelle verwenden. Ein Nachteil ist jedoch, dass viel RAM gekaut wird. Das Schöne an dieser Ausführung ist, dass Sie Zehntausende verschiedener Parametereinstellungen ausführen können und nicht viel RAM verbrauchen, sondern nur den CPU-Verbrauch. Ich habe mit Bootstrap Forest (was langsam ist) bis zu 40.000 verschiedene Einstellungen vorgenommen und es kann auf meinem Arbeitslaptop (32 GB RAM und 2 GHz CPU) einige Tage dauern.
Ich bin auch ein Early Adopter für JMP 16, und das Modell-Screening ist nett, aber wie Sie betonen, wird keines der Modelle optimiert, was etwas irreführend sein kann. Es werden nur die Standardeinstellungen verwendet, die nicht immer die besten Einstellungen sind, um ein Vorhersagemodell zu erstellen. Es könnte Ihnen zumindest helfen, festzustellen, welche Plattformen die Zeit wert sind, um weiter optimiert zu werden, und welche es nicht wert sind, untersucht zu werden.
Möglicherweise möchten Sie auch die SVM-Plattform in Betracht ziehen, um Ihre Nenndaten zu modellieren, da dies auch eine gute Methode für diese Art von Daten sein soll.
Der Simulator ist etwas anderes und dient dazu, die Schätzungen mit unterschiedlichen Anfangsbedingungen zu testen (Randomisierung). Dies gibt eine Verteilung der Werte für die Schätzung und ein Konfidenzintervall für die ursprüngliche Schätzung an. Anschließend können Sie entscheiden, ob dieses Modell mit den angegebenen Schätzungen gut ist oder nicht.
Was das DOE betrifft, könnten Sie ein faktorielles oder sogar raumfüllendes Design mit den entsprechend festgelegten Faktoren ausführen, und ich denke, dass die Plattform auch bedingte Einschränkungen zulässt. Sie können auch ein Prädiktor-Screening oder ein Bootstrapping für die Prädiktoren durchführen, um festzustellen, ob Sie tatsächlich alle 89 benötigen oder ob Sie wirklich nur eine kleinere Teilmenge verwenden können.
Als letzte Anmerkung: Da Sie eine kurze und breite Datentabelle haben, sollten Sie anstelle einer Validierungsspalte einen Auslassungsansatz für die Validierung in Betracht ziehen. Wenn Sie das tun, müssen Sie das Skript dafür bearbeiten.
Viel Glück!,
DS
Betreff: Erstellen mehrerer neuronaler NetzwerkmodelleWeitere ausgezeichnete Vorschläge, insbesondere in Bezug auf die Art der Validierung. Ich sehe, dass Neural Holdback, Kfold oder Zeilenausschluss unterstützt (wobei ich schätze, ich würde nur zufällig ein paar Zeilen auswählen, die weggelassen werden sollen). Wenn ich das Skript ändern möchte, um die Art der Validierung zu ändern, würde ich nur die Zeile "Validierung (: Validierung mit Test)" ändern? Und wären die zurückgehaltenen Proben in den Augen von JMP als Validierungsproben gleichwertig? Wenn nicht, müsste ich die Validierungsspalten entfernen (oder umbenennen), und die Testspalten müssten ebenfalls entfernt werden.
Betreff: Erstellen mehrerer neuronaler NetzwerkmodelleHallo @abmayfield ,
Kfold ist auch eine weitere großartige Möglichkeit, den kurzen Datensatz zu validieren. Ja, der Zeilenausschluss, den Sie als Zeilenstatus festlegen würden. Dies können Sie tun, indem Sie den Datensatz "Test" auswählen und den Zeilenstatus auf "Ausgeschlossen" setzen. Wenn Sie Kfold oder Holdback verwenden, verwendet JMP diese zur Validierung der Daten und nicht zum Testen der Daten. Hoffentlich haben Sie auch einen separaten Datensatz, den Sie als Testdaten verwenden können und der nicht in derselben Datentabelle wie die Trainings- und Validierungsdaten enthalten ist.
Ich würde nur Kfold zur Validierung verwenden und dann die Teile auskommentieren, die Sie nicht benötigen, um das Skript auszuführen. Unten finden Sie die bearbeitete Version mit einer 5-K-fachen Validierungseinstellung für die NN-Plattform.Sollte funktionieren, hat es für mich getan.
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];
);
Viel Glück!,
DS
Betreff: Erstellen mehrerer neuronaler NetzwerkmodelleWow, ich kann nicht glauben, dass ich dank Ihrer Skripthilfe vor dem Mittagessen 300 neuronale Netzwerkmodelle ausgeführt habe. Ich hoffe, dass dies aufgegriffen und "gelobt" wird, wie ich mir vorstelle, wenn immer mehr Menschen den Wert der NN-Plattform erkennen, werden sie sich für so etwas interessieren, besonders wenn es sich um einen brandneuen Datensatz handelt und Sie dies nicht wirklich tun wissen, wo man in Bezug auf die verwirrende Menge an NN-Modelleingabeparametern "eintauchen" kann, die leicht angepasst werden können (was manchmal zu großen Unterschieden führt, selbst wenn nur die Lernrate von 0,05 auf 0,1 erhöht wird). Ich werde als nächstes mit den verschiedenen Validierungsansätzen herumspielen (Validierungsspalte vs. Holdback vs. KFold). Ich muss auf jeden Fall vorsichtig sein angesichts meiner (derzeit) kleinen Stichprobengröße (in der Hoffnung, diese vorläufigen Daten zu verwenden, um Geld für das Hinzufügen weiterer "Zeilen", dh Korallen, zu erhalten).
Betreff: Erstellen mehrerer neuronaler NetzwerkmodelleSchön zu hören, dass es für Sie funktioniert. Viel Glück beim Modellieren! Möglicherweise möchten Sie auch andere Modellplattformen überprüfen und dann Modelle in einem Testdatensatz vergleichen, um festzustellen, welcher der beste Prädiktor ist.
DSBetreff: Erstellen mehrerer neuronaler NetzwerkmodelleIch habe eine (wahrscheinlich einfache) Skriptfrage. Angenommen, ich möchte den Eingang dt in einen anderen ändern. Sollte ich nicht einfach in der Lage sein, das Skript zu kopieren und einzufügen und das dt von "Neural" durch etwas anderes zu ersetzen?
str = Eval Insert(
"report = (dt << Neural (
Y( :health designation ),
X(
Wenn ich die ursprüngliche "Neuronale" Datei lösche und durch eine andere Tabelle mit genau denselben Informationen und einem anderen Namen ersetze, funktioniert das Skript nicht! Ist es notwendig, genau dieselben Daten in zwei Datentabellen zu haben, von denen eine den Namen "Neural" trägt? Vielleicht habe ich diesen Teil verpasst!
Betreff: Erstellen mehrerer neuronaler NetzwerkmodelleHallo @abmayfield ,
Wenn Sie zurückgehen und das Skript überprüfen, definiert die zweite Zeile, welche Datentabelle während der Analyse verwendet werden soll. Der JSL-Code dt = Current Data Table () definiert eine lokale Variable "dt", die dann im Rest des Skripts verwendet wird, anstatt die Datentabelle beim Namen aufrufen zu müssen. In ähnlicher Weise ist dt_parms die lokale Variable, die der NN-Tuning-Tabelle "NN-Tuning" zugewiesen ist. Diese beiden Tabellen sind wirklich die einzigen Dinge, die Sie dem Skript zuführen. Der Rest ist alles intern.
Wenn Sie den JSL-Code kopieren / in eine neue Datentabelle einfügen, sollte er automatisch funktionieren, da Sie ihn lokal in dieser Datentabelle ausführen.
Sie sollten den Aufruf dt << Nerual () nicht ändern, außer um Ihre Y () und X () und möglicherweise die Validation () -Methode zu definieren. Der JSL-Code dt << Nerual () ist ein Befehl, der JMP anweist, eine NN-Modellierung für die Datentabelle "dt" durchzuführen. Daher die Definition von dt am Anfang des Codes.
Sie müssen auch den Aufruf w = Window () ändern, um den Titel des NN-Berichtsfensters sowie den darunter liegenden Regex () wiederzugeben. Abhängig davon, ob Sie den "Test" -Datensatz tatsächlich als Teil einer Validierungsspalte haben oder nicht, möchten Sie entweder einen Kommentar abgeben (mit dem Befehl // am Anfang der Zeile) oder den Kommentar entfernen out am Anfang des Codes, wenn die Testergebnisspalten sowie die Test_stats-Definition erstellt werden und der Code die Ergebnisse in die neue Ausgabedatentabelle schreibt.
Davon abgesehen sollten Sie nicht viel bearbeiten müssen.
In Bezug auf Ihre letzte Frage hängt es davon ab, wie Sie den Code implementieren. Wenn Sie es aus der Datentabelle heraus ausführen, dh dass es im Skriptabschnitt der Datentabelle gespeichert ist und Sie es über die grüne Schaltfläche ausführen, müssen Sie nur Y () und X () ändern ) verwenden Sie als Prädiktoren und Antwort, um die Spaltennamen aus der neuen Datentabelle abzugleichen. Sie müssen natürlich die Tabelle "NN-Tuning" geöffnet haben. Wenn Sie dies jedoch als separates Skript ausführen, möchten Sie möglicherweise die Definition von dt von dt = Aktuelle Datentabelle () in dt = Datentabelle ("") ändern, in die Sie das einfügen möchten Name der neuen Datentabelle zwischen den Anführungszeichen.
Das "Neural", auf das Sie sich beziehen, ist keine Datentabelle, sondern der JMP-Befehl zum Ausführen eines Neural Net-Modells für eine angegebene Datentabelle. Der Befehl "<<" bedeutet, dass die Aktion rechts vom << auf dem Objekt links ausgeführt wird. Am Anfang des Codes können Sie dies mit dem neuen Spaltenbefehl sehen. Wenn dt_results << New Column () angezeigt wird, weist der Code JMP an, eine neue Spalte für das Objekt dt_results zu erstellen. Hierbei handelt es sich um die aus der Datentabelle dt_parms generierten Teilmengen.
Hoffe das hilft!,
DS
Betreff: Aufbau mehrerer neuronaler NetzmodelleOkay, großartig. Dies beantwortet ein paar zusätzliche Fragen, die ich hatte. Das einzige, womit ich zu kämpfen habe, ist, dass ich beim Kopieren, Einfügen und Ausführen des Skripts in einer neuen Datentabelle einen Gliederungsfeldfehler erhalte, auf den Sie in den Skriptkommentaren anspielen. "erwartetes Zeichen arg 1 beim Zugriff oder bei der Auswertung der Gliederungsbox." Was bedeutet das?? Ich habe die Zahlen erhöht und verringert, aber ich erhalte jedes Mal die gleiche Fehlermeldung und das Skript wird nicht ausgeführt. Ich weiß nicht einmal, was eine Gliederungsbox ist. Es ist seltsam, dass die Baumstruktur identisch ist. Ich habe gerade den Dateinamen geändert. Der Dateiname ist länger. Vielleicht bedeutet das, dass ich ein größeres Umrissfeld benötige?