Ne pas obtenir les mêmes résultats dans le réseau neuronal exécuté à partir du menu et exécuté à partir du script.J'essaie d'exécuter un script qui automatise le contrôle des huit modes de pénalité différents dans Neural Network et l'affichage des résultats dans le tableau actuel. J'ai cherché à déterminer pourquoi je n'obtiens pas de résultats différents des différents ajustements du script. Cela m'a amené à examiner les résultats pour chaque mode de pénalité individuel lorsque le modèle était configuré à partir du menu neuronal par rapport au script. Le script a été créé en enregistrant le script d'analyse dans la table de données, puis en l'exécutant. Les résultats devraient donc être identiques.
Set up of model from Analyze>Predictive Modeling>NeuralSet up of model from Analyze>Predictive Modeling>NeuralConfiguration du modèle depuis Analyse>Modélisation prédictive>Neural
Initial run of modelInitial run of modelExécution initiale du modèle
Redo Analysis #1Redo Analysis #1 Refaire l'analyse #1
Redo Analysis #2Redo Analysis #2 Refaire l'analyse #2
Si je relance le modèle et sélectionne tous les mêmes paramètres, j'obtiens le même résultat que le résultat initial ci-dessus. Si j'exécute à partir d'un script, j'obtiens les mêmes résultats que depuis Redo Analysis.
Re : Je n'obtiens pas les mêmes résultats dans le réseau neuronal exécuté à partir du menu ou exécuté à partir d'un script.Avoir une colonne de validation et définir la graine aléatoire ne résout pas le problème.J'ai créé une colonne de validation Random KFold(5) (ValidationCol) et je l'ai utilisée dans le code ci-dessous. J'ai également vérifié à l'aide d'une colonne de validation Holdback et le comportement est le même.
Tout d'abord, si vous commentez Fit() de haut en bas, vous voyez que les deuxième (Absolute), troisième (WeightDecay) et Quatrième (NoPenalty) modes de pénalité donnent le même résultat que le premier (Carré). Deuxièmement, si vous réinitialisez la valeur de départ aléatoire à 999 entre les ajustements, les résultats sont les mêmes pour tous les modèles robustes et les mêmes pour tous les modèles non robustes. La fonction Set Random Seed doit faire quelque chose (réinitialiser ?) sur les paramètres du modèle au moment de l'exécution.
Ce qui me préoccupe, c'est que le seul moyen d'obtenir la reproductibilité est d'utiliser une graine, mais cela semble « corriger » le mode de pénalité.
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 SquaredRobuste au carré
Robust AbsoluteRobust AbsoluteAbsolu robuste
Robust Weight DecayRobust Weight DecayDégradation du poids robuste
Robust No PenaltyRobust No PenaltyRobuste sans pénalité
All Robust, reset seed for each fitAll Robust, reset seed for each fitTout robuste, réinitialisez la graine pour chaque ajustement
All, non-robust, reset seed for each fitAll, non-robust, reset seed for each fitTous, non robustes, réinitialisez la graine pour chaque ajustement
Re : Je n'obtiens pas les mêmes résultats dans le réseau neuronal exécuté à partir du menu ou exécuté à partir d'un script.Il y a une chance raisonnable que je comprenne complètement ce que vous faites et votre script ; cependant, de mon côté, je suis capable d'obtenir des résultats différents et reproductibles.
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" ) )
);
Tout d'abord, vous devrez créer une colonne de validation. Colonne Analyse/Modélisation prédictive/Make Validation (jmp pro v13,14) Rendre la stratification sur :Target
Lorsque j'exécute ce script, tel quel, j'obtiens différentes estimations d'erreur entre les ajustements et entre les exécutions du script, bien que les intervalles entre les exécutions soient assez proches.
Décommentez la ligne de départ aléatoire : j'obtiens des estimations différentes entre les ajustements et entre les exécutions du script, les résultats sont les mêmes.
Re : Je n'obtiens pas les mêmes résultats dans le réseau neuronal exécuté à partir du menu ou exécuté à partir d'un script.Il existe en réalité deux facettes différentes du même problème. La première est que je n'obtiens pas de résultats différents si je réinitialise la graine entre les ajustements dans le script mais que j'utilise différentes méthodes de pénalité. Pour cette raison, je ne peux pas croire que les différences que je constate lorsque je ne réinitialise pas la graine sont réelles ; il pourrait simplement s'agir de la même méthode de pénalité utilisée, mais en partant d'un endroit différent. C'est ce que j'ai illustré dans le fichier téléchargé.
Le deuxième problème (d'origine) est que deux instances différentes exécutant le même modèle mais avec des méthodes de pénalité différentes donnent le même résultat, je ne peux donc pas être sûr de la méthode réellement utilisée n'importe où.
Re : Je n'obtiens pas les mêmes résultats dans le réseau neuronal exécuté à partir du menu ou exécuté à partir d'un script.J'ai téléchargé un petit modèle avec script pour illustrer ce que je veux dire. Lorsque vous exécutez le script, vous verrez que le premier ajustement NN est unique ; tous les autres donnent les mêmes résultats.
Re : Je n'obtiens pas les mêmes résultats dans le réseau neuronal exécuté à partir du menu ou exécuté à partir d'un script.Mon problème a commencé lorsque j'essayais d'exécuter 2 instances de JMP, chacune exécutant un script avec 4 exécutions NN. L'instance 1 exécutait des modèles prédéfinis utilisant des pénalités Squared, Robust Squared, Absolute et Robust Absolute. L'instance 2 exécutait exactement le même script (dans un fichier nommé différemment), sauf que les 4 modèles exécutaient Weight Decay, Robust Weight Decay, No Penaly et Robust No Penalty NN. Les exécutions prennent environ 20 heures et le script enregistre les formules. au tableau de données à la fin. Ce que j'ai découvert, c'est que les deux instances renvoyaient exactement les mêmes résultats. Il y a eu 4 résultats différents dans chaque cas, mais ils étaient exactement les mêmes. J'ai essayé différentes combinaisons pour essayer de découvrir ce qui se passait. J'ai rendu chaque variable unique entre les deux scripts. J'ai utilisé une zone de texte pour définir la table de données sur une variable dans chaque instance. Peu importe ce que je faisais, je ne pouvais pas générer de résultats différents entre les deux instances.
Si j'exécute chaque modèle à partir du menu, j'obtiens huit résultats différents. Si j'exécute un script, je ne le fais pas.
Re : Je n'obtiens pas les mêmes résultats dans le réseau neuronal exécuté à partir du menu ou exécuté à partir d'un script.Mon problème est que je n'obtiens pas de résultats différents lors de l'exécution d'un script utilisant une graine fixe et différentes méthodes de pénalité.
Re : Je n'obtiens pas les mêmes résultats dans le réseau neuronal exécuté à partir du menu ou exécuté à partir d'un script.Dans vos scripts vous avez cette ligne :
Validation Method( "Holdback", 0.3333 )
Et c'est votre problème. Chaque fois que vous exécutez ceci, vous obtenez un ensemble de holbacks aléatoires différent.
Puisque vous utilisez JMP Pro, configurez une colonne de validation et utilisez-la.
1. Contrôlez quelles lignes sont dans la retenue, comme lorsque vous créez un sous-ensemble stratifié.
2. utilisez les mêmes lignes pour la retenue pour chaque version du modèle.
Re : Je n'obtiens pas les mêmes résultats dans le réseau neuronal exécuté à partir du menu ou exécuté à partir d'un script.De plus, les scripts suivants donnent tous le même résultat : C'est comme si les modèles de réseaux de neurones exécutés à partir d'un script n'utilisaient qu'une seule des méthodes de pénalité.
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 )
)
)