Automatisieren Sie das neuronale NetzwerkHallo alle,
Ich arbeite an einem Projekt, das ein neuronales Netzwerkmodell verwendet, um die Bodenfeuchtigkeit an verschiedenen Orten (etwa 1000) vorherzusagen, die durch ihre eindeutigen Koordinaten definiert sind.Dieselbe Struktur für das neuronale Netzwerk in JMP kann auf alle Standorte angewendet werden. Also denke ich darüber nach, die Arbeit zu automatisieren. Es kann ein JMP-Skript sein, das den Standortkoordinator (X, Y) finden, die erforderlichen Dateneingaben extrahieren und das neuronale Netzwerk ausführen kann. Am Ende kann das Skript Berichte der Modelle speichern. Haben Sie Hinweise oder Ratschläge, die Sie mit mir teilen können?
Vielen Dank im Voraus.
Jede Anregung oder Diskussion wird geschätzt.
Betreff: Automatisieren Sie das neuronale NetzwerkHallo @Marco1 ,
Ich bin mir nicht sicher, ob ich folge, warum Sie eine bestimmte Anzahl von Perioden prognostizieren möchten, ohne eine Ausgabespalte zu haben. Wenn Sie wissen, dass Sie einen guten Satz von Prädiktoren für Ihr Modell haben, egal ob es NN oder baumbasiert oder kNN ist, dann denke ich nicht, dass es wirklich darauf ankommt, es geht nur darum, ob das Modell gute Vorhersagen macht oder nicht die nächsten Veranstaltungen. Sie müssen die Modelle mit einer Y-Spalte füttern, sonst haben sie kein Ergebnis, das sie versuchen und für das Training und die Validierung des Modells vorhersagen können. Die Plattformen ermöglichen es Ihnen, die Vorhersageformel in der Datentabelle zu speichern oder sie zum Vergleich mit anderen von Ihnen generierten Vorhersagen im Depot zu veröffentlichen, sodass Sie sie mit neuen Daten testen und sehen können, welches das bessere Modell ist – das hängt davon ab, welche Metrik Sie verwenden betrachten und ob Sie eine Klassifizierung oder Regression durchführen.
Ich muss mir die Pareto-Grenze ansehen, wenn ich etwas mehr Zeit habe, danke für das Add-In.
Obwohl es für eine One-Stop-GUI großartig wäre, alle verschiedenen Modellierungsplattformen in JMP auszuführen, ist das im Moment ein bisschen viel für mich. Vielleicht kann ich in zukünftigen Versionen zusätzliche Plattformen hinzufügen. Im Moment kann es NN, Boosted Tree, Bootstrap Forest und XGBoost ausführen. Ich plane, der Liste auch kNN, Naive Bayes und SVM hinzuzufügen. Es braucht Zeit, um Fehler und so weiter zu beheben, insbesondere wenn mehrere verschiedene Plattformen aufgerufen werden.
Danke!,
DS
Betreff: Automatisieren Sie das neuronale NetzwerkHallo Diedrich,
Gute Erklärung, eine Frage: Über die Vorhersage von Zeitreihen mit neuronalen Netzwerken von JMP, wie könnte eine Vorhersage der nächsten 2, 3, 4, 5 oder mehr Perioden in der Zukunft erreicht werden, mit 1, 2, 3 oder mehr Eingabespalten ? ... also ohne Ausgabespalten.
In Bezug auf die Optimierung mehrerer Ziele (Pareto-Grenze) habe ich eine sehr gute GUI angehängt, die von der JMP-Community heruntergeladen werden kann. Vielleicht hilft sie bei der Aktualisierung der GUI, an der Sie arbeiten.
Es wäre großartig, wenn die GUI die Parameter jeder Plattform, die JMP hat, optimieren könnte, einschließlich Time Series (ARIMA, Winter ...), wodurch vermieden wird, dass der Benutzer die Arbeit erledigen muss, die eine Optimierung leisten könnte.
Vielen Dank für Ihre Hilfe!
Grüße,
Marco
Betreff: Automatisieren Sie das neuronale NetzwerkHallo @giaMSU ,
Wenn Sie wirklich verschiedene NNs mit unterschiedlichen Validierungsschemata vergleichen möchten, würde ich den Zufallsstartwert auf eine Zahl setzen, sagen wir 12345. Auf diese Weise beginnt es immer am selben Punkt. Wohin es von dort aus geht, hängt von den im Modell verwendeten Parametern ab – und dem Validierungssatz, aber alle werden zumindest am selben Ort beginnen.Meiner Erfahrung nach ist es sehr wichtig, ein gutes Validierungsschema zu haben. Wenn Sie durch die Auswahl bestimmter Beispiele für das Training oder die Validierung einen stark unausgewogenen Datensatz erstellen, der ein Ergebnis einem anderen vorzieht, würde dies entweder zu einer Überanpassung an das Training führen und den Validierungssatz nicht gut vorhersagen oder umgekehrt. Sie könnten sogar erwägen, K-fache Validierungsspalten zu erstellen, was eine Art verschachteltes k-faches Validierungsschema ist, dann könnten Sie sich die Anpassungsvorhersagen und sogar Anpassungsstatistiken für jede der verschachtelten Spalten ansehen. Nur ein Gedanke.
Viel Glück!,
DS
Betreff: Automatisieren Sie das neuronale NetzwerkHallo @Marco1 ,
Ich bin mir nicht sicher, welche Plattform in JMP für die Pareto-Grenz-DOE-Generierung verwendet werden würde. In meiner GUI, die ich gerade aktualisiere, rufe ich die Space Filling DOE-Plattform auf, die den Hyperparameterraum optimal mit Punkten füllt, basierend auf den niedrigen und hohen Eingabewerten für das Space Filling DOE. Die resultierende Datentabelle, die generiert wird, speichert alle Anpassungsstatistiken, sodass man jede Anpassung bewerten und sogar zurückgehen und sie später manuell in den Plattformen ausführen kann.
Nach meinem besten Wissen unterstützt JMP nicht mehr als zwei Ebenen. Ich erinnere mich nicht an die Details, aber es wurde während einer der Sitzungen auf dem Discover Summit Americas in der vergangenen Woche erwähnt. Ich denke, das liegt daran, dass bei der Bewertung der Leistung (insbesondere der Vorhersageleistung) mehr als zwei Schichten nicht viel zur zusätzlichen Rechenzeit beim Erstellen des Modells beigetragen haben. Bitte beachten Sie auch, dass beim Boosten mit NN nur eine Ebene erlaubt ist. Oft ist die Anzahl der Knoten aussagekräftiger als die Anzahl der Schichten.
Soweit ich weiß, sollten Sie Zeitreihen mit der NN-Plattform modellieren können. Da sehe ich keine Einschränkung. Die einzige Herausforderung ist natürlich die Interpretierbarkeit des NN-Modells. Es ist viel schwieriger, die Transformationen von X -> Y in NNs zu interpretieren.
Ich füge eine grundlegende NN-Tuning-Tabelle (NN-Tuning) und ein raumfüllendes DOE bei, um den Hyperparameterraum zu erkunden. Beachten Sie, dass ich nur zwei der vier Penalty-Methoden in meinem DOE habe. Außerdem habe ich zugelassen, dass jede Variable (außer robuste Anpassung) variiert, aber da das Boosten nur für ein einschichtiges Modell zulässig ist, eliminiert der Code automatisch die zweischichtigen Optionen und kehrt zu einer Boosting-Option zurück. Als letzte Anmerkung müssen alle 13 Spalten in der Tuning-Tabelle vorhanden sein, die Sie auswählen, wenn Sie die GUI ausführen. Wenn sie nicht vorhanden sind, wird ein Fehler ausgegeben.
Die DOE-Plattformen entfernen standardmäßig jeden Faktor, der eine Konstante ist. Wenn eine Spalte nach dem Generieren des DOE fehlt, müssen Sie sie aus Ihrer Faktortabelle zurückkopieren (und den Wert bis zum Ende der Tabelle ausfüllen), daher das Beispiel, in dem Robust Fit konstant auf 0 gehalten wird. Ich habe einen zufälligen Startwert von 1234 mit 120 Läufen verwendet, um das raumfüllende DOE zu erzeugen.
Hoffe das hilft,
DS
Betreff: Automatisieren Sie das neuronale NetzwerkHallo Diedrich,
Ich freue mich, Sie zu begrüßen, es wäre hervorragend, wenn die GUI eine Multi-Objekt-Optimierung (Pareto-Grenze) in allen Hyperparametern durchführen könnte, die der Benutzer anpassen und mehr als 2 Ebenen erstellen muss (Deep Learning).
Eine Frage: Ist es möglich, Zeitreihen mit den neuronalen Netzwerken von JMP vorherzusagen?
Das von mir gesendete Beispiel, das heißt, die Anpassungstabelle wurde von JMPs benutzerdefiniertem DOE erstellt. Ich lerne gerade, NN und DOE zu verwenden. Welche Spalten eliminiert DOE? Welche Spalten soll ich platzieren und in welcher Tabelle? Das heißt, die Datentabelle oder Anpassungstabelle?
Könnten Sie bitte ein Beispiel schicken?
Danke für deine Antwort und Hilfe!!!
Grüße,
Marco
Betreff: Automatisieren Sie das neuronale NetzwerkHallo @Marco1 ,
Danke schön. Ich bin gerade dabei, die JSL noch weiter zu aktualisieren, damit sie die Tuning-Tabelle für den Benutzer generiert. Das Problem bei der manuellen Ausführung ist, ja, Sie müssen die Besonderheiten des Codes ziemlich gut kennen. Das Problem, das Sie haben, ist, dass der Code erwartet, dass sich bestimmte Spalten in der Tuning-Datentabelle befinden, auch wenn sie konstant sind, da jede Zeile die Parameter enthält, die der Modellierungsplattform zugeführt werden.
Meine Vermutung ist, dass JMP beim Erstellen der Abstimmungstabelle automatisch alle konstanten Terme gelöscht hat. Die resultierende Tuning-Tabelle enthält nicht die richtigen Spalten und löst daher einen Fehler aus. Ich bin nicht der beste Programmierer, daher dauert es einige Zeit, alle möglichen Szenarien durchzugehen.
In der Zwischenzeit, bevor meine nächste Version herauskommt, schlage ich vor, dass Sie die Spalten zurückkopieren, die JMP gelöscht hat, und dann die Werte bis zum Ende der Tabelle füllen. Das sollte Sie in Schwung bringen. Wenn Sie weitere Probleme haben, lassen Sie es mich bitte wissen.
Hoffe das hilft!,
DS
Betreff: Automatisieren Sie das neuronale NetzwerkHallo DiedrichSchmidt,
Ich gratuliere Ihnen zur GUI Gen_AT_v3.0, anscheinend weiß ich nicht, wie man sie benutzt, ich bekomme eine Fehlermeldung:
Gibt es eine Anleitung oder Beispiele?
Angehängte Zeitreihentabelle und Parametertabelle.
Danke für deine Unterstützung.
Grüße,
Marco





Betreff: Automatisieren Sie das neuronale NetzwerkHallo DS,
Danke, dass du mir geholfen hast. Ehrlich gesagt habe ich aufgegeben und es manuell erledigt.
Ich habe Skripte viele Male ausprobiert, indem ich entweder Leute gefragt oder mit dem JMP Scripting Index selbst gelernt habe. Zum Beispiel habe ich die Option Get RSquare Validation in fit() oder add verwendet rSquare = (report(obj)["Validation"]["mvalue"][NumberColBox(1)]< zeigen (rQuadrat);
Beides hat nicht funktioniert.
Über Ihren Vorschlag, den K-fachen Validierungsdatensatz zufällig auszuwählen. Es ist eine großartige Idee. Ich möchte jedoch die Konsistenz der NN-Struktur beibehalten, damit ich die Leistungen zwischen NNs vergleichen kann. Die meisten Artikel, die ich gelesen habe und die künstliches NN verwenden, erwähnen nicht, wie sie ihren Validierungsdatensatz während der Iterationen auswählen.
Ich werde es versuchen, um eine Verbesserung in R2 zu sehen. Das Ergebnis werde ich euch bald mitteilen.
Am besten
Betreff: Automatisieren Sie das neuronale NetzwerkKlar, freut mich, dass es hilft!Betreff: Automatisieren Sie das neuronale NetzwerkVielen Dank.
Betreff: Automatisieren Sie das neuronale NetzwerkDanke, .@G_M!Betreff: Automatisieren Sie das neuronale NetzwerkGute Arbeit, @SDF1 .
Betreff: Automatisieren Sie das neuronale NetzwerkHallo @giaMSU Und @G_M ,
Früher in diesem Thread habe ich einen Abschnitt des Skripts gepostet, den ich die ganze Zeit verwende, wenn ich Tausende von Trainingssätzen ausführe, um nur R^2, RASE usw. zu speichern.
Als @G_M Wie bereits erwähnt, sollten Sie in die Baumstruktur des Berichts gehen, um herauszufinden, wo Sie die Werte speichern können. Ganz unten im Skript, kurz vor dem Ende der FOR-Schleife, zieht es die Werte aus der Baumstruktur des Berichts.
Ich habe mein vorheriges Skript geändert, das die NN-Anpassung automatisiert, und den Teil aus meinem vorherigen Beitrag eingefügt, der die Anpassungswerte (R2 und RMSE) extrahiert. Wenn Sie andere Werte wünschen, können Sie diese ebenfalls hinzufügen. Das Skript erstellt eine neue Datentabelle, die die Ergebnisse der NN-Anpassung für jede Standort-ID enthält. Ich habe auch den Teil geändert, in dem jede Datentabelle basierend auf der Standort-ID generiert wird, sodass die Datentabelle ihre eigene eindeutige Kennung basierend auf der Standort-ID hat, obwohl ich am Ende sowieso nur jede Datentabelle schließe. Im Prinzip können Sie sie alle offen halten, indem Sie den Befehl close am Ende der FOR-Schleife auskommentieren, aber dann haben Sie eine riesige Menge an Datentabellen offen.
Bevor Sie den Code implementieren, empfehle ich Ihnen dringend, die Kommentare durchzulesen und zu verstehen, was das Skript tut. Sobald Sie sich mit Scripting vertraut gemacht haben, wird es Ihr JMP-Leben für immer verändern!
Nebenbei bemerkt, müssen Sie wirklich immer den gleichen Zufallsstartwert haben? Ich empfehle, es für die Passform leer zu lassen, damit die Passform wirklich zufällig ist, was sie robuster machen kann. Außerdem haben Sie genügend Beobachtungen in Ihren Daten, um eine Validierungsspalte mit einem Trainings-, Validierungs- (und Test-) Satz zu erstellen, damit Sie tatsächlich herausfinden können, welches der Modelle tatsächlich das beste für die Vorhersage ist. Sie können diese Validierungsspalte basierend auf Ihrer :Y-Spalte ("SoilMoisture(kg.m-2) or (mm)") stratifizieren. Sie können dies auch automatisieren und es in dem Abschnitt haben, in dem es jede der Datentabellen nach der Zusammenfassung auf :ID erstellt.
Wenn ich das folgende Skript in Ihrer Datentabelle ausführe, erhalte ich die folgende Ausgabe:

Names Default To Here( 1 ); //keeps variables local, not global
dt = Data Table( "Subset of 765-450" ); //defines your starting data table
Summarize( locs = BY( dt:ID ) ); //creates a list of the different location IDs
<BR />//This FOR loop creates all the different data tables based on location ID and also names them based on location ID
For( j = 1, j <= N Items( locs ), j++,
file = dt << Select Where( locs[j] == Char( :ID ) ) << Subset( file, Output Table Name( "Model Subject File Location ID " || locs[j] ) )
);
<BR />//this portion of the code generates the list of data tables that will be used to train the models for each location.
dt_list = {};
one_name = {};
For( m = 1, m <= N Table(), m++,
dt_temp = Data Table( m );
one_name = dt_temp << GetName;
If( Starts With( one_name, "Model" ),
Insert Into( dt_list, one_name )
);
);
<BR />//this portion of the code creates the fit result data table that will record the statistics for each fit, to be reviewed later. Also adds the label column property to the Loc_ID column.
dt_fit_results = New Table( "Fit Results", Add Rows( N Items( dt_list ) ), New Column( "Loc_ID", "Continuous" ) );
dt_fit_results << New Column( "R² Training" );
dt_fit_results << New Column( "R² Validation" );
dt_fit_results << New Column( "RMSE Training" );
dt_fit_results << New Column( "RMSE Validation" );<BR />dt_fit_results:Loc_ID << Label;
<BR />//this FOR loop makes sure that each row of the fit result table also includes the location ID
For( l = 1, l <= N Items( dt_list ), l++,
dt_fit_results:Loc_ID[l] = dt_list[l]:ID[l]
);
//this FOR loop is the fitting routine for each location data table.
For( i = 1, i <= N Items( dt_list ), i++,
NN = Data Table( dt_list[i] ) << Neural(
Y( :Name( "SoilMoisture(kg.m-2) or (mm)" ) ),
X(
:Name( "Tmax(K)" ),
:Name( "Tmin(K)" ),
:Name( "Precip(mm)" ),
:LAI_hv,
:LAI_lv,
:Name( "Winspeed(m/s)" ),
:Name( "Evatransporation(kgm-2s-1)" ),
:LandCover,
:USDASoilClass,
:Forecast_Albedo
),
Informative Missing( 0 ),
Transform Covariates( 1 ),
Validation Method( "KFold", 7 ),
Set Random Seed( ), //I took away the random seed, so your fits will be different from mine.
Fit(
NTanH( 1 ),
NLinear( 1 ),
NGaussian( 1 ),
NTanH2( 3 ),
NLinear2( 0 ),
NGaussian2( 3 ),
Transform Covariates( 1 ),
Robust Fit( 1 ),
Penalty Method( "Absolute" ),
Number of Tours( 1 ) //I only did one tour just for proof of concept, so you'll want to change this
)
);
NNReport = NN << Report;<BR />//These next lines of code are what pull the actual values from the fit report and saves them to the fit results data table.
Train = NNreport["Training"][Number Col Box( 1 )] << Get;
Valid = NNreport["Validation"][Number Col Box( 1 )] << Get;
dt_fit_results:Name( "R² Training" )[i] = Train[1];
dt_fit_results:Name( "RMSE Training" )[i] = Train[2];
dt_fit_results:Name( "R² Validation" )[i] = Valid[1];
dt_fit_results:Name( "RMSE Validation" )[i] = valid[2];
Close( dt_list[i], no save );
);Viel Glück!,
DS
Betreff: Automatisieren Sie das neuronale NetzwerkHALLO DS
Danke für Ihren Beitrag.
Ich habe noch ein kleines Problem mit dem Problem. Ich habe tausend PDF-Dateien der NN-Berichte gespeichert. Dann wurde es zu einem Problem, da ich viele PDF-Dateien manuell lesen muss, um den R2 jedes NN zu erhalten.
Ich möchte ein Skript ausführen, um sie automatisch zu extrahieren. Kannst du mir helfen?
Aufrichtig
GN
Betreff: Automatisieren Sie das neuronale NetzwerkHallo @giaMSU ,
Vielen Dank für die Veröffentlichung der kleineren Datentabelle, die Sie haben, und des Skripts, mit dem Sie gearbeitet haben. Ich habe es ein wenig modifiziert, und ich habe es zum Laufen gebracht. Probieren Sie Folgendes aus. Mir war nicht klar, dass Sie Teilmengen von Datentabellen erstellen und nur diese zum Anpassen verwenden.
Hier ist die Ausgabe, die ich beim Ausführen einer modifizierten Version Ihres Skripts erhalten habe:

Hier ist das modifizierte Skript:
Names Default To Here( 1 );
dt = Data Table( "Subset of 765-450" );
Summarize( locs = BY( dt:ID ) );
For( j = 1, j <= N Items( locs ), j++,
file = dt << Select Where( locs[j] == Char( :ID ) ) << Subset( file, Output Table Name( "Model Subject File" ) )
);
dt_list = {};
one_name = {};
For( m = 1, m <= N Table(), m++,
dt_temp = Data Table( m );
one_name = dt_temp << GetName;
If( Starts With( one_name, "Model" ),
Insert Into( dt_list, one_name )
);
);
For( i = 1, i <= N Items( dt_list ), i++,
NN = Data Table( dt_list[i] ) << Neural(
Y( :Name( "SoilMoisture(kg.m-2) or (mm)" ) ),
X(
:Name( "Tmax(K)" ),
:Name( "Tmin(K)" ),
:Name( "Precip(mm)" ),
:LAI_hv,
:LAI_lv,
:Name( "Winspeed(m/s)" ),
:Name( "Evatransporation(kgm-2s-1)" ),
:LandCover,
:USDASoilClass,
:Forecast_Albedo
),
Informative Missing( 0 ),
Transform Covariates( 1 ),
Validation Method( "KFold", 7 ),
Set Random Seed( 1234 ),
Fit(
NTanH( 1 ),
NLinear( 1 ),
NGaussian( 1 ),
NTanH2( 3 ),
NLinear2( 0 ),
NGaussian2( 3 ),
Transform Covariates( 1 ),
Robust Fit( 1 ),
Penalty Method( "Absolute" ),
Number of Tours( 10 )
)
);
NNReport = NN << Report;
NNReport << Save PDF("E:/Ready_for_ANN/result") // I actually didn't do this part.
);Wenn Sie viele verschiedene Standort-IDs haben, möchten Sie möglicherweise jedes Ergebnis mit dem eindeutigen ID-Zeichencode speichern, um sie zu unterscheiden. Ändern Sie möglicherweise die Zeile "save" in etwas wie:
NNReport << Save PDF("E:/Ready_for_ANN/result_LocID_"|| Char(dt_list[i]:ID[1]));Hoffe das hilft!,
DS
Betreff: Automatisieren Sie das neuronale NetzwerkHallo @giaMSU ,
Mir gefällt die Idee, die NN-Anpassung zu automatisieren, und ich habe etwas Ähnliches für andere Plattformen gemacht. Ich denke, ich werde versuchen, etwas Ähnliches für das NN zu tun, um verschiedene Anpassungsparameter in der NN-Plattform zu testen, um eine optimale Anpassung zu finden.
Ich habe etwas sehr Ähnliches gemacht, aber mit einer anderen Modellierungsplattform (Random Forest und Boosted Trees). Ich füge meinen Code unten mit Beschreibungen dessen ein, was die Hauptzeilen tun.
Im Allgemeinen füttern Sie die neuen Informationen jedoch nicht jedes Mal, wenn Sie einen neuen Standort auswählen, an die NN-Anpassung. Die Passform muss tatsächlich stimmen innen eine FOR-Schleife. Ich habe meinen als Skriptcode in meiner Datentabelle und tue dies, da ich eine sehr große Tuning-Tabelle ausführen muss, um die beste Anpassung zu erhalten, und wenn ich es auf diese Weise mache, spart es viel Speicherplatz für meinen Computer und Sie kann auf diese Weise mehr als 24.000 Zeilen in einer Datentabelle ausführen und über Nacht laufen lassen.
Übrigens kam mir das ursprüngliche Konzept und die Idee der Schleife für die Passform über einen Beitrag von gzmorgan0, aber ich kann mich nicht an den ursprünglichen Beitrag erinnern. Ich benutze es die ganze Zeit.
Names Default To Here( 1 );//keeps all variables local<BR />
dt = Data Table( "My data table" ); //this is where you specify your data table with the :Y and :X columns
dt_pars = Data Table( "tuning table" ); //for me, this is my tuning table that has modified tuning parameters. For you, it might be the "Model Subject File" data table.
dt_results = dt_pars << Subset( All rows, Selected columns only( 0 ) ); //this just duplicate the above dt because I want to add columns for recording fit parameters.
<BR />//the below portion creates new columns for recording the fit parameters.<BR />dt_results << New Column("Overall In Bag RMSE");
dt_results << New Column("Overall Out of Bag RMSE");
dt_results << New Column( "R² Training" );
dt_results << New Column( "R² Validation" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
<BR />//The FOR loop here is to actually run the fit with each of the different tuning parameters.
For( i = 1, i <= N Row( dt_pars ), i++,<BR /> //these next few lines pulls the NEW fit parameters to put into the model fit. This would be each new row of data (location) for your case
NumTrees = dt_pars:Number Trees[i];
NumTerms = dt_pars:Number Terms[i];
PortBoot = dt_pars:Portion Bootstrap[i];
MinSplpTr = dt_pars:Minimum Splits per Tree[i];
MaxSplpTr = dt_pars:Maximum Splits per Tree[i];
MinSplSz = dt_pars:Minimum Size Split[i];<BR /><BR /> //this next section is a string that will be evaluated below and represents what you would do via a normal GUI in JMP.
str = Eval Insert(
"report = (dt << Bootstrap Forest( //this is the fit method
Y( :Y_Response ), //whatever your response variable is
X(
:X_1, //these are all your x variables that you put in (which you want to be changing each time)
:X_2,
:X_3,
),
Minimum Size Split( ^MinSplSz^ ), //here is where something is changing and the new values are inserted via the ^ ^ and fed to the fit method. Here is where you'd want to do something similar, but above with the :X's
Validation Portion( 0.2 ), //this too can even be a variable and changed each time.
Set Random Seed( ),
Method( \!"Bootstrap Forest\!" ), //this again defines the method
Minimum Splits per Tree( ^MinSplpTr^ ),
Maximum Splits per Tree( ^MaxSplpTr^ ),
Portion Bootstrap( ^PortBoot^ ),
Number Terms( ^NumTerms^ ),
Number Trees( ^NumTrees^ ),
Early Stopping( 0 ),
Go,
invisible
)) << Report;"
); //this closes the Eval Insert() command<BR />
Eval( Parse( str ) ); //this actually runs the fit for each iteration<BR /><BR /> //The below lines, I pull out the relevant fit statistic I want to evaluate from the report and save it to the data table called dt_results. I can then analyze my multiple thousand data points later and not chew up too much RAM.
Overall=report["Overall Statistics"][Number Col Box( 1 )] << Get;
R2 = report["Overall Statistics"][Number Col Box( 2 )] << Get;
RMSE = report["Overall Statistics"][Number Col Box( 3 )] << Get;
report << Close Window;
dt_results:Name("Overall In Bag RMSE")[i]=Overall[1];
dt_results:Name("Overall Out of Bag RMSE")[i]=Overall[2];
dt_results:Name("R² Training")[i] = R2[1];
dt_results:Name("R² Validation")[i] = R2[2];
dt_results:Name("RMSE Training")[i] = RMSE[1];
dt_results:Name("RMSE Validation")[i] = RMSE[2];
);Ich kann mir vorstellen, dass Sie in der Lage sein sollten, die Gliederung von oben zu nehmen und sie an Ihre spezifischen Bedürfnisse anzupassen.
Nebenbei bemerkt, vergessen Sie nicht, nicht nur eine Anpassungsvalidierung durchzuführen, um keine Überanpassung zu vermeiden, sondern auch ihre Vorhersagefähigkeit an einem völlig unbenutzten Testdatensatz zu testen, den Sie von den Anpassungsdaten getrennt haben. Wenn Sie es sich leisten können, würde ich außerdem empfehlen, die Anzahl der Touren auf >=25 zu erhöhen. Die NN-Plattform benötigt manchmal viel mehr Versuche, wie in DOE, um eine optimale Anpassung für einen bestimmten Satz von Parametern zu finden.
Viel Glück! Ich hoffe auf die endgültige Lösung. Da könnte ich auch mal schnuppern.
Danke, dass du diesen Thread gestartet hast.
DS
Betreff: Automatisieren Sie das neuronale NetzwerkLernen Sie das Skript.Betreff: Automatisieren Sie das neuronale Netzwerk@giaMSU , also greife ich wahrscheinlich auf die Berichtsebene zu und hole den Wert aus dem entsprechenden Anzeigefeld in der Baumstruktur der Berichtsebene. Nach der Erfassung kann die R^2_i-Statistik aus dem Bericht entweder den Wert in eine Liste einfügen und dann eine Datentabelle aus der Liste erstellen oder eine Datentabelle erstellen und die Werte in einer einzigen Datentabelle verketten. Suchen Sie im Scripting-Index nach Show Tree Structure.
Betreff: Automatisieren Sie das neuronale NetzwerkHallo G_M
Als Ihre Hilfe habe ich fast tausend neuronale Netzwerkanalysen durchgeführt. Außerdem habe ich tausend PDF-Dateien der NN-Berichte gespeichert. Dann wurde es zu einem Problem, da ich viele PDF-Dateien manuell lesen muss, um den R2 jedes NN zu erhalten.
Ich habe versucht hinzuzufügen Holen Sie sich den RSquare-Test zum Skript, damit es R2-Werte anzeigen kann. Dann kann ich sie zusammen mit einer Datei speichern
obj << Save (Get Gen RSquare Test)
Das Skript wird noch ausgeführt, aber es speichert den R2-Wert nirgendwo. Ich kann den Wert nicht erkennen.
Könnten Sie mir bitte bei diesem Problem helfen?
Vielen Dank.
GN
Betreff: Automatisieren Sie das neuronale NetzwerkEs hört sich so an, als würde der Bericht überschrieben. Versuchen Sie, die ID wie folgt mit dem Bericht zu verketten:
Save PDF("C:\test\model_"|| Char(i) ||".pdf");Betreff: Automatisieren Sie das neuronale NetzwerkDas Skript läuft jetzt gut.
Es gibt ein kleines Problem im Skript. Da Sie die Datei „Model Subset File“ genannt haben, ersetzt das Skript die PDF-Datei in jedem Schritt. Wenn es fertig ist, gibt es nur eine Datei im Ordner. Können Sie mir helfen, die Standort-ID in den Dateinamen einzufügen, damit das Skript jeden Bericht mit einem eindeutigen Namen aufzeichnen kann?
Danke
Betreff: Automatisieren Sie das neuronale NetzwerkIch glaube, dass das Problem darin besteht, dass Sie die Char-Funktion um die :ID in der Select Where-Funktion hinzufügen müssen.
Select Where(loc[j] == Char(:ID))
Betreff: Automatisieren Sie das neuronale NetzwerkHallo G_M,
Ich habe dein Skript ausprobiert. Es läuft gut, aber nicht ganz so, wie ich es mir wünsche. Es scheint, als würde das Skript Daten von allen Standorten extrahieren, um eine Teilmenge zu erstellen, und dann die Neuralfunktion ausführen. Ich habe es mit einer Teilmenge von 02 Standorten getestet. Das Neural lief zweimal. Ihre Berichte sind jedoch die gleichen. Ich denke also, dass die For-Schleife einige Probleme hat. Könnten Sie mir bitte helfen ? Ich habe mein Skript und meine Daten in dieser Diskussion angehängt, falls Sie sie verwenden müssen.
DankeBetreff: Automatisieren Sie das neuronale NetzwerkIch danke Ihnen für Ihre Hilfe. Ich habe ein Skript mit 2 Standortdatensätzen geschrieben.
Zuerst habe ich ein neurales Skript verwendet, das von einem NN-Lauf auf JMP 14 Pro gespeichert wurde. Ich habe zwei versteckte Schichten mit sechs bzw. drei Knoten verwendet.
Neural(
Y( :Name( "SoilMoisture(kg.m-2) or (mm)" ) ),
X(
:Name( "Tmax(K)" ),
:Name( "Tmin(K)" ),
:Name( "Precip(mm)" ),
:LAI_hv,
:LAI_lv,
:Name( "Winspeed(m/s)" ),
:Name( "Evatransporation(kgm-2s-1)" ),
:LandCover,
:USDASoilClass,
:Forecast_Albedo
),
Informative Missing( 0 ),
Transform Covariates( 1 ),
Validation Method( "KFold", 7 ),
Set Random Seed( 1234 ),
Fit(
NTanH( 1 ),
NLinear( 1 ),
NGaussian( 1 ),
NTanH2( 3 ),
NGaussian2( 3 ),
Transform Covariates( 1 ),
Robust Fit( 1 ),
Penalty Method( "Absolute" ),
Number of Tours( 10 )
)
);
Dieser Teil funktioniert gut. Dann füge ich eine For-Schleife als G_M-Vorschlag hinzu.
dt = Open( "E:/Ready_for_ANN/Subset of 765-450.jmp" );
Summarize(locs=BY(dt:ID))
For (
j=1, j<=NItems(locs),j++,
file = dt << Select Where(locs[j])== :ID << Subset(
file,
Output Table Name ("Model Subject File"))
);
NN = file << Neural(
Y( :Name( "SoilMoisture(kg.m-2) or (mm)" ) ),
X(
:Name( "Tmax(K)" ),
:Name( "Tmin(K)" ),
:Name( "Precip(mm)"),
:LAI_hv,
:LAI_lv,
:Name( "Winspeed(m/s)" ),
:Name( "Evatransporation(kgm-2s-1)" ),
:LandCover,
:USDASoilClass,
:Forecast_Albedo
),
Informative Missing( 0 ),
Transform Covariates( 1 ),
Validation Method( "KFold", 7 ),
Set Random Seed( 1234 ),
Fit(
NTanH( 1 ),
NLinear( 1 ),
NGaussian( 1 ),
NTanH2( 3 ),
NLinear2( 0 ),
NGaussian2( 3 ),
Transform Covariates( 1 ),
Robust Fit( 1 ),
Penalty Method( "Absolute" ),
Number of Tours( 10 )
)
);
NNReport = NN << Report;
NNReport << Save PDF("E:/Ready_for_ANN/result")Dann funktioniert es nicht.
Wie ich aus dem Skript lerne, hat die For-Schleife eine Teilmenge erstellt, die alle IDs von j = 1 bis j ++ enthält. Dann wird diese Teilmenge vom Neural-Skript verwendet. Aber der neurale Teil ist nicht in der For-Schleife enthalten. Dann ist es nicht das, was ich tun möchte.
Ich möchte eine Teilmenge von 1 Standortdaten erstellen und die Neuralfunktion für diese Teilmenge in jedem Schritt ausführen.Bitte korrigieren, wenn ich falsch liege.
Ich habe hier meine Teilmenge von Daten (02 Standorte) angehängt.
Bitte helfen Sie mir, das Problem zu lösen.
Vielen Dank im Voraus.
Betreff: Automatisieren Sie das neuronale Netzwerk@G_M Ich mag deinen Ansatz.
Für @giaMSU , alles, was Sie tun müssen, ist, einen Fall Ihres neuronalen Netzes auszuführen und das Skript im Skriptfenster (oder in der Zwischenablage) zu speichern. (Oberstes Menü mit rotem Dreieck, letzte Option in der Liste, "Skript speichern")
Nehmen Sie das Skript, das G_M geschrieben hat, und ersetzen Sie diesen Teil:
Neural(
Y( :Name( "Y" ) ),
X( :Name( "X1" ), :Name( "X2" ) ),
Validation( :Validation ),
Informative Missing( 0 ),
Set Random Seed( 1121 ),
Fit( NTanH( 3 ) )
);
mit Ihrem neuralen Skript, und Sie könnten gut gehen, oder mindestens 90% des Weges.
Betreff: Automatisieren Sie das neuronale Netzwerk@giaMSU , was Sie vorhaben, ist möglich.Schritt 1. Verwenden Sie die Zusammenfassungsfunktion, um eine Liste aller J = 1000+ Standorte zu erstellen.Schritt 2. Indizieren Sie die J-Stellen in der Liste.Schritt 3. Verwenden Sie die Funktionen Select Where und Subset, um einen Datensatz für den j-ten Standort zu erstellen.Schritt 4. Führen Sie das j-te neuronale Netzmodell für den j-ten Standort aus.Schritt 5. Speichern Sie den NN-Plattformbericht in Ihrem gewünschten Format. Schritt 6. Wiederholen Sie dies, bis Sie den letzten Ort erreicht haben.Ich habe es nicht getestet, aber das Folgende sollte funktionieren oder Ihnen ganz nahe kommen.
//assumes data table is "dt" and location is in a variable called "Location"
Summarize( locs = BY(dt:Location) );
For(
j=1, j<=NItems(locs), j++,
file = dt << Select Where(locs[j] == :Location) << Subset(
file,
Output Table Name("Model Subset File")
);
NN = file << Neural(
Y( :Name( "Y" ) ),
X( :Name( "X1" ), :Name( "X2" ) ),
Validation( :Validation ),
Informative Missing( 0 ),
Set Random Seed( 1121 ),
Fit( NTanH( 3 ) )
);
NNReport = NN << Report;
NNReport << Save PDF("Path")
);Betreff: Automatisieren Sie das neuronale NetzwerkHallo @giaMSU ,
Das klingt sehr machbar, aber Ihre Frage ist ziemlich offen.Was sind die Hindernisse, die Sie sehen, bei denen Sie die Hilfe der Community benötigen?
Ich würde mit dem Skript für das neuronale Netz beginnen und sehen, wo Sie im Skript für jeden Standort Ersetzungen vornehmen müssen.Definieren Sie eine Funktion oder einen Ausdruck, der die standortspezifischen Informationen extrahiert, die neuronale Netzanalyse durchführt und den Bericht/die Skripte speichert.Iterieren Sie jedes Mal durch die Stellen, an denen diese Funktion/dieser Ausdruck ausgeführt wird.