Es werden nicht dieselben Ergebnisse erzielt, wenn ein neuronales Netzwerk über das Menü oder über ein Skript ausgeführt wird.Ich versuche, ein Skript auszuführen, das die Überprüfung der acht verschiedenen Strafmodi im Neural Network automatisiert und die Ergebnisse in die aktuelle Tabelle ausgibt. Ich habe Fehler behoben, warum ich bei den verschiedenen Anpassungen im Skript keine unterschiedlichen Ergebnisse erhalte. Dies veranlasste mich, mir die Ergebnisse für jeden einzelnen Strafmodus anzusehen, als das Modell über das Neural Menu im Vergleich zum Skript eingerichtet wurde. Das Skript wurde erstellt, indem das Analyseskript in der Datentabelle gespeichert und dann ausgeführt wurde. Die Ergebnisse sollten also identisch sein.
Set up of model from Analyze>Predictive Modeling>NeuralSet up of model from Analyze>Predictive Modeling>NeuralEinrichten des Modells über Analysieren > Prädiktive Modellierung > Neural
Initial run of modelInitial run of modelErster Lauf des Modells
Redo Analysis #1Redo Analysis #1 Redo-Analyse Nr. 1
Redo Analysis #2Redo Analysis #2 Redo-Analyse Nr. 2
Wenn ich das Modell neu starte und alle gleichen Einstellungen wähle, erhalte ich das gleiche Ergebnis wie das anfängliche Ergebnis oben. Wenn ich ein Skript ausführe, erhalte ich die gleichen Ergebnisse wie bei der Redo-Analyse.
Betreff: Es werden nicht die gleichen Ergebnisse erzielt, wenn ein neuronales Netzwerk über das Menü oder über ein Skript ausgeführt wird.Eine Validierungsspalte und das Festlegen des Zufallsstartwerts lösen das Problem nicht.Ich habe eine zufällige KFold(5)-Validierungsspalte (ValidationCol) erstellt und sie im folgenden Code verwendet. Ich habe es auch mithilfe einer Holdback-Validierungsspalte überprüft und das Verhalten ist das gleiche.
Wenn Sie Fit() zunächst von oben nach unten auskommentieren, sehen Sie, dass der zweite (Absolute), der dritte (WeightDecay) und der vierte (NoPenalty) Strafmodus das gleiche Ergebnis liefern wie der erste (Squared). Zweitens: Wenn Sie den Zufallsstartwert zwischen den Anpassungen auf 999 zurücksetzen, sind die Ergebnisse für alle robusten Modelle gleich und für alle nicht robusten Modelle gleich. Die Funktion „Zufälligen Startwert festlegen“ muss zur Laufzeit etwas mit den Modellparametern tun (zurücksetzen?).
Ich befürchte, dass die einzige Möglichkeit, Reproduzierbarkeit zu erreichen, die Verwendung eines Startwerts ist, aber dadurch scheint der Strafmodus „behoben“ zu werden.
Neural(
Y( :Target ),
X( :Name( "8-12_Mean" ), :Name( "12-16_Mean" ), :Name( "16-20_Mean" ) ),
Validation( :ValidationCol ),
Informative Missing( 0 ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "Absolute" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "Weight Decay" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "NoPenalty" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 0 ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 0 ), Penalty Method( "Absolute" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 0 ), Penalty Method( "Weight Decay" ) ),
Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 0 ), Penalty Method( "NoPenalty" ) )
);
Robust SquaredRobust SquaredRobust im Quadrat
Robust AbsoluteRobust AbsoluteRobustes Absolut
Robust Weight DecayRobust Weight DecayRobuster Gewichtsverlust
Robust No PenaltyRobust No PenaltyRobust, keine Strafe
All Robust, reset seed for each fitAll Robust, reset seed for each fitAlles robust, Seed für jede Passform zurücksetzen
All, non-robust, reset seed for each fitAll, non-robust, reset seed for each fitAlle, nicht robust, Reset-Seed für jede Passform
Betreff: Es werden nicht die gleichen Ergebnisse erzielt, wenn ein neuronales Netzwerk über das Menü oder über ein Skript ausgeführt wird.Es besteht eine begründete Wahrscheinlichkeit, dass ich Ihr Vorgehen und Ihr Drehbuch völlig falsch verstehe; Allerdings kann ich auf meiner Seite unterschiedliche und reproduzierbare Ergebnisse erzielen.
Neural(
Y( :Target ),
X( :Name( "8-12_Mean" ), :Name( "12-16_Mean" ), :Name( "16-20_Mean" ) ),
//Validation Method( "KFold", 5 ),
Validation( :Validation ),
Informative Missing( 0 ),
//Set Random Seed( 999 ),
Fit( NTanH( 3 ), Robust Fit( 1 ) ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "Absolute" ) ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "Weight Decay" ) ),
Fit( NTanH( 3 ), Robust Fit( 1 ), Penalty Method( "NoPenalty" ) )
);
Zuerst müssen Sie eine Validierungsspalte erstellen. Spalte „Analysieren/Vorhersagemodellierung/Validierung durchführen“ (jmp pro v13,14) Schichtung auf „:Target“ vornehmen
Wenn ich dieses Skript so ausführe, wie es ist, erhalte ich unterschiedliche Schätzungen für Fehler zwischen Anpassungen und zwischen Durchläufen des Skripts, obwohl die Werte zwischen den Durchläufen ziemlich nahe beieinander liegen.
Kommentieren Sie die zufällige Startwertzeile aus: Ich erhalte unterschiedliche Schätzungen zwischen den Anpassungen und zwischen den Ausführungen des Skripts sind die Ergebnisse gleich.
Betreff: Es werden nicht die gleichen Ergebnisse erzielt, wenn ein neuronales Netzwerk über das Menü oder über ein Skript ausgeführt wird.Tatsächlich gibt es zwei verschiedene Facetten desselben Problems. Einer davon ist, dass ich keine unterschiedlichen Ergebnisse erhalte, wenn ich den Seed zwischen Fits im Skript zurücksetze, aber unterschiedliche Strafmethoden verwende. Aus diesem Grund kann ich nicht darauf vertrauen, dass die Unterschiede, die ich sehe, wenn ich den Seed nicht zurücksetze, real sind; Es könnte sich einfach um die gleiche Strafmethode handeln, die jedoch an einer anderen Stelle beginnt. Das habe ich in der hochgeladenen Datei dargestellt.
Das zweite (ursprüngliche) Problem besteht darin, dass zwei verschiedene Instanzen, die dasselbe Modell, aber mit unterschiedlichen Strafmethoden ausführen, das gleiche Ergebnis liefern, sodass ich nicht sicher sein kann, welche Methode tatsächlich irgendwo verwendet wird.
Betreff: Es werden nicht die gleichen Ergebnisse erzielt, wenn ein neuronales Netzwerk über das Menü oder über ein Skript ausgeführt wird.Ich habe ein kleines Modell mit Skript hochgeladen, um zu veranschaulichen, was ich meine. Wenn Sie das Skript ausführen, werden Sie feststellen, dass die erste NN-Anpassung eindeutig ist; alle anderen liefern die gleichen Ergebnisse.
Betreff: Es werden nicht die gleichen Ergebnisse erzielt, wenn ein neuronales Netzwerk über das Menü oder über ein Skript ausgeführt wird.Mein Problem begann, als ich versuchte, zwei Instanzen von JMP auszuführen, von denen jede ein Skript mit 4 NN-Läufen ausführte. In Instanz 1 wurden gesäte Modelle mit den Strafen „Squared“, „Robust Squared“, „Absolute“ und „Robust Absolute“ ausgeführt. Instanz 2 führte genau das gleiche Skript aus (in einer anders benannten Datei), außer dass die 4 Modelle Weight Decay, Robust Weight Decay, No Penaly und Robust No Penalty NNs ausführten. Die Ausführung dauert etwa 20 Stunden und das Skript speichert die Formeln zur Datentabelle am Ende. Was ich herausfand, war, dass beide Instanzen genau die gleichen Ergebnisse lieferten. Es gab jeweils 4 unterschiedliche Ergebnisse, die jedoch völlig gleich waren. Ich habe verschiedene Kombinationen ausprobiert, um herauszufinden, was los war. Ich habe jede Variable zwischen den beiden Skripten eindeutig gemacht. Ich habe ein Textfeld verwendet, um die Datentabelle in jedem Fall auf eine Variable festzulegen. Egal was ich tat, ich konnte zwischen den beiden Instanzen keine unterschiedlichen Ergebnisse erzielen.
Wenn ich jedes Modell über das Menü ausführe, erhalte ich acht verschiedene Ergebnisse. Wenn ich ein Skript ausführe, tue ich das nicht.
Betreff: Es werden nicht die gleichen Ergebnisse erzielt, wenn ein neuronales Netzwerk über das Menü oder über ein Skript ausgeführt wird.Mein Problem ist, dass ich keine unterschiedlichen Ergebnisse erhalte, wenn ich ein Skript mit einem festen Startwert und unterschiedlichen Strafmethoden ausführe.
Betreff: Es werden nicht die gleichen Ergebnisse erzielt, wenn ein neuronales Netzwerk über das Menü oder über ein Skript ausgeführt wird.In Ihren Skripten gibt es diese Zeile:
Validation Method( "Holdback", 0.3333 )
Und das ist Ihr Problem. Jedes Mal, wenn Sie dies ausführen, erhalten Sie ein anderes zufälliges Holback-Set.
Da Sie JMP Pro verwenden, richten Sie eine Validierungsspalte ein und verwenden Sie diese.
1. Sie können steuern, welche Zeilen im Holdback enthalten sind, beispielsweise wenn Sie eine geschichtete Teilmenge erstellen.
2. Verwenden Sie für jede Version des Modells dieselben Zeilen für den Holdback.
Betreff: Es werden nicht die gleichen Ergebnisse erzielt, wenn ein neuronales Netzwerk über das Menü oder über ein Skript ausgeführt wird.Außerdem liefern die folgenden Skripte alle das gleiche Ergebnis: Es ist, als würden neuronale Netzwerkmodelle, die über ein Skript ausgeführt werden, nur eine der Strafmethoden verwenden
Neural(
Y( :Target ),
X( :Name( "0-4_Mean" ), :Name( "4-8_Mean" ), :Name( "8-12_Mean" ) ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Set Random Seed( 999 ),
Fit(
NTanH( 3 ),
Robust Fit( 1 ),
Penalty Method("Squared"),
Number of Tours( 3 )
)
)Neural(
Y( :Target ),
X( :Name( "0-4_Mean" ), :Name( "4-8_Mean" ), :Name( "8-12_Mean" ) ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Set Random Seed( 999 ),
Fit(
NTanH( 3 ),
Robust Fit( 1 ),
Penalty Method("Absolute"),
Number of Tours( 3 )
)
)Neural(
Y( :Target ),
X( :Name( "0-4_Mean" ), :Name( "4-8_Mean" ), :Name( "8-12_Mean" ) ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Set Random Seed( 999 ),
Fit(
NTanH( 3 ),
Robust Fit( 1 ),
Penalty Method("Weight Decay"),
Number of Tours( 3 )
)
)
Neural(
Y( :Target ),
X( :Name( "0-4_Mean" ), :Name( "4-8_Mean" ), :Name( "8-12_Mean" ) ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Set Random Seed( 999 ),
Fit(
NTanH( 3 ),
Robust Fit( 1 ),
Penalty Method("NoPenalty"),
Number of Tours( 3 )
)
)