création de plusieurs modèles de réseaux neuronauxJ'utilise la plate-forme neuronale pour faire des prédictions et, étant nouveau dans le réseautage neuronal, je ne connais que légèrement tous les paramètres d'entrée: nombre de couches cachées, nombre de nœuds / couche cachée, modèles de stimulation, taux d'apprentissage et visites. Ce que je veux faire, c'est essayer de minimiser le RMSE et le taux d'erreur de classification du modèle de validation. Ce que j'ai fait, c'est changer de manière itérative chaque paramètre un par un, enregistrer les paramètres de performance du modèle et les coller dans une nouvelle table JMP, mais cela va prendre des jours car il y a tellement de combinaisons de couches, de nœuds, de visites, etc. Serait-il possible d'écrire un script dans lequel JMP Pro construit, par exemple, 1 000 modèles et dépose les données dans une table pour ne pas avoir à modifier manuellement chaque paramètre d'entrée de modèle?
#Couches cachées: 1 ou 2
# Nœuds sigmoïdaux: 0, 1, 2, 3 ou 4
# Noeuds linéaires: 0, 1, 2, 3 ou 4
#Nœuds radiaux: 0, 1, 2, 3 ou 4
Modèles #boosting: aucune idée, 1-5 peut-être?
# taux d'apprentissage: 0-0,5 par incréments de 0,1
#tours: 1, 5, 10, 20, 100
Ce serait donc 2 x 5 x 5 x 5 x 5 x 5 x 5 = ~ 30000.
Je suppose que je pourrais en réduire certains une fois que je serai plus familier avec l'ensemble de données. Bien sûr, avoir de nombreux nœuds et un nombre élevé de modèles de boost n'a pas de sens (pas plus que certaines autres combinaisons), mais nous parlons toujours de potentiellement des centaines de modèles à tester. Ce type de sélection / comparaison de modèles pourrait sûrement être scénarisé, non?
AnalytiqueScriptingRe: création de plusieurs modèles de réseaux neuronauxVous pouvez concevoir une expérience avec moins de niveaux pour s'adapter à un modèle de second ordre, puis utiliser le modèle pour optimiser les paramètres. En outre, vous pouvez créer chaque modèle, puis extraire tous les résultats à la fois en cliquant avec le bouton droit de la souris sur l'un des tableaux de résultats et en sélectionnant Créer dans un tableau combiné.
Re: création de plusieurs modèles de réseaux neuronauxMark, merci pour vos suggestions. Le deuxième que j'ai essayé et échoué. Je connais l'option «créer en table combinée» d'autres plates-formes, mais peut-être qu'elle a été laissée en dehors de la plate-forme neuronale pour une raison quelconque. Étrangement, l'astuce "option", par laquelle vous maintenez la touche option enfoncée, faites une sélection, et elle s'applique à toutes les parties du rapport, ne fonctionne ni dans la plate-forme neurale, soit elle pourrait accélérer les choses.
Ce serait cool si je pouvais avoir mes paramètres de réseau neuronal (# nœuds, #tours, etc.) comme X dans un DOE, dans le but de minimiser RSME, mais cela semble impossible à cause de la façon dont vous devez entrer le paramètres dans les cases particulières du lancement du modèle neuronal. Vous auriez à faire des scripts très avancés, et même dans ce cas, je ne suis pas sûr que DOE et Neural puissent communiquer correctement. Mais si quelqu'un sait comment je pourrais faire en sorte que la plate-forme neuronale exécute essentiellement les modèles reflétés dans cette capture d'écran (étant une sous-sélection du grand total), je l'apprécierais beaucoup. En d'autres termes, les valeurs de la première table de capture d'écran devraient aller dans les zones de saisie appropriées dans la deuxième capture d'écran (c'est-à-dire, le lancement du modèle neuronal).
Re: création de plusieurs modèles de réseaux neuronauxBTW, l'astuce «option» pour obtenir toutes les fonctionnalités pertinentes pour afficher les mêmes informations que la fonctionnalité que vous sélectionnez activement est en fait l'astuce «commande» sur un Mac (d'où la raison pour laquelle cela ne fonctionnait pas auparavant).
Re: créer plusieurs modèles de réseaux neuronauxsalut @abmayfield ,
C'était quelque chose que je voulais scénariser depuis un moment et qui était vraiment amusant, et votre message a donné le feu pour le faire démarrer, merci! Je voulais avoir un moyen d'ajuster la plate-forme NN depuis un certain temps car elle est très sensible aux conditions initiales et il est plutôt lent de le faire manuellement.
J'ai donc adapté certains scripts que j'ai créés pour d'autres plates-formes de modèles afin d'automatiser leurs processus de réglage, par exemple, l'arbre boosté, la forêt d'amorçage et les plates-formes XGBoost. Les scripts sont destinés à être enregistrés dans votre table de données et exécutés avec le bouton vert.
J'espère que vous en savez un peu sur les scripts et que vous saurez où adapter ces scripts à vos situations / structure de données / noms de colonnes spécifiques, etc. J'ai entré quelques commentaires pour essayer d'expliquer ce que je fais dans chaque groupe plus large. Je joins deux scripts - un pour les Y continus et un pour les Y nominaux / ordinaux. J'ai dû inclure un test pour voir si la sortie Y est nominale ou ordinale car la valeur de Number Col Box () change en fonction de cela. J'ai utilisé la table de données Big Class Families.jmp dans les exemples de données comme ensemble de données de test. J'inclus également deux tableaux de données de sortie que je génère en utilisant soit le réglage numérique NN, soit le réglage nominal / ordinal NN. J'ai fait le nominal sur: sexe en utilisant: âge,: poids :,: taille, puis j'ai changé: âge de l'ordinaire à l'âge continu et modélisé avec: poids et: sexe pour le réglage NN continu.Les ajustements et les statistiques sont horribles, mais ils sont uniquement destinés à voir si le JSL fonctionne ou non. J'ai également ajouté une colonne: Validation au tableau de données en stratifiant sur: age, juste pour vérifier que tout fonctionnait correctement.
Je suis sûr que quelqu'un d'autre pourrait le script plus élégamment pour tester la colonne d'entrée Y () pour qu'elle soit de type continu, nominal ou ordinal, puis insérer la valeur Number Col Box () appropriée pour extraire les données de manière appropriée en utilisant uniquement un code JSL unique.
Vous devrez éditer les entrées Y () et X () de la section dt << Nerual () ainsi que la partie où vous obtenez le nom de la fenêtre de rapport, car il est nommé d'après la variable que vous modélisez.
Les tables de réglage NN pourraient être traitées comme un DOE remplissant l'espace en principe où les paramètres inférieur et supérieur sont ceux que vous souhaitez définir, à l'exception de certains d'entre eux, comme N_Layers ne peut être que 1 ou 2 car JMP autorise uniquement 1 ou 2 couches. Penalty_Method ne concerne que les options valides dans la plate-forme NN, et Transform Covariate et Robust Fit ne prennent que des valeurs de 0 ou 1 (désactivé ou activé). J'inclus également la table de réglage NN.
Si vous avez des questions dites le moi.
Voici mon code pour le type de modélisation Nominal / Ordinal:
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>
Une chose étrange que je ne comprends pas est que je reçois cet avertissement concernant la fenêtre de journal que je crée lorsque je l'exécute pour la plate-forme NN, mais je ne l'ai jamais obtenu de mes autres plates-formes. Je ne peux pas savoir d'où vient cet avertissement, mais il fonctionne toujours correctement. Peut-être que quelqu'un peut réparer cette partie de mon code?
Inattendu ",". Il manque peut-être un ")".
Tentative d'analyse de l'opérande pour l'opérateur "<<".
Ligne 23 Colonne 10:)) ►,
En guise de dernière remarque: faites attention aux réglages car cela peut prendre TRÈS longtemps pour exécuter la modélisation si vous avez un grand nombre de boosts ou de tours ou de fonctions de transfert. Faites juste attention à ne pas aller trop loin.
J'espère que cela t'aides!,
DS
Re: création de plusieurs modèles de réseaux neuronauxOui! C'est exactement ce que je veux: une table avec tous les paramètres d'entrée NN (par exemple, nombre de nœuds TanH, nombre de couches, etc.) qui se synchronise avec la plate-forme NN. Je ne l'ai pas encore essayé, et j'imagine que cela prendra un certain temps, mais j'utilise un petit jeu de données de "pratique" de prédicteur de 20 échantillons x 90, donc cela pourrait être faisable. En réalité, je n'ai vraiment trouvé que le type d'activation et le nombre de nœuds (ainsi que le nombre de tours) abaissant en fait mon RMSE, le boosting n'aidant pas beaucoup. Mais même dans ce cas, ce sera beaucoup plus rapide que de faire tous les ~ 500 modèles que je prévoyais d'exécuter (pas autant que je l'avais prévu hier, heureusement, car je veux rester sous 4 nœuds / type d'activation). Je vais l'essayer demain et dire à tout le monde comment ça se passe.
Re: création de plusieurs modèles de réseaux neuronauxEh bien, j'ai échoué, mais je pense que c'est probablement à cause d'une petite erreur de script. J'ai utilisé votre table de réglage NN avec mes données (jointes) et effectué toutes les mises à jour nécessaires (j'ai utilisé trois formations + validation + échantillons de test). Si vous exécutez le dernier script ("comparaison de réseau neuronal"), il construira la nouvelle table, mais aucune analyse n'est exécutée. Je viens d'inclure quelques termes X, mais ce sera en fait les 86 colonnes du groupe «données standardisées». Lorsque j'utilise le débogueur, cela indique que quelque chose ne va pas avec le
" Pour (i = 1 , i <= imax, i ++, "zone. J'espère / j'imagine qu'un scénariste plus compétent pourra probablement trouver le problème en quelques secondes!
Re: création de plusieurs modèles de réseaux neuronauxsalut @abmayfield ,
Merci d'avoir partagé la table de données, cela a aidé à déboguer les modifications que vous avez apportées au script.
Une chose que j'ai remarquée:
- Vous deviez ajouter des colonnes supplémentaires pour les statistiques de l'ensemble de données "Test" que vous souhaitez enregistrer.
- Vous avez accidentellement supprimé la définition de imax, qui correspond au nombre de lignes de la table de paramètres
- Vous avez également accidentellement changé l'appel à la plate-forme NN où dans le script il est dit dt << Neural (), c'est là qu'il envoie la commande pour effectuer la modélisation du réseau neuronal sur la table de données "dt". Vous l'aviez changé en autre chose.
- La définition de la fenêtre "w" doit avoir le nom complet de la fenêtre NN, et si vous n'exécutez qu'un seul X, alors apparemment JMP le met dans le nom de la fenêtre, il doit donc être dans les deux la commande GetName et l'instruction IF en dessous. Mais ce n'est vrai que lors de la modélisation avec un seul X. Si vous en utilisez plus d'un, vous n'avez pas besoin d'avoir le "by ......" dans le nom de la fenêtre ou l'instruction IF.
- La dernière partie est de s'assurer que les statistiques des données d'entraînement, de validation et de test sont correctement appelées dans la commande Number Col Box ().
Le code ci-dessous fonctionne sur votre table de données (également attachée avec un script modifié). Cela fonctionne avec la table de réglage NN que j'ai donnée plus tôt.
Si vous comptez vraiment utiliser les 86 colonnes, vous devez les insérer manuellement dans la partie X (col1, col2, ...) du script. Vous devez alors également modifier la partie GetName car elle n'inclura pas les 86 noms, ce sera juste le nom de la fenêtre avec la colonne de réponse.
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];
);
J'espère que cela t'aides!,
DS
Re: création de plusieurs modèles de réseaux neuronauxAh! Merci beaucoup de l'avoir refait pour moi. Je n'ai clairement aucune connaissance de script, donc j'ai juste changé "Neural" pour le nom de ma table de données ..... qui ne fonctionnerait évidemment pas. Une fois que j'ai changé le nom de ma table de données en "Neural", ajouté les colonnes de test et effectué les autres modifications que vous avez recommandées, cela a fonctionné.
Maintenant, ce que je pourrais faire, c'est utiliser DOE pour faire une conception factorielle conditionnelle (puisque, comme vous l'avez noté, vous ne pouvez pas augmenter avec plusieurs couches cachées) et exécuter quelques centaines de modèles sur mon ordinateur de travail (afin de ne pas trop taxer mon 8 -Go RAM portable).
J'ai l'impression que votre script doit devenir une interface graphique ou un complément (des preneurs?). JMP Pro 16, que je teste en version bêta, a un très bon outil de "sélection de modèles", mais je pense qu'il teste sur tous les types de modélisation (par exemple, PLS vs Gen-Reg), et non DANS les milliers de modèles qui pourraient être construit dans chaque type de modélisation (sinon il peut ne jamais s'arrêter de fonctionner). J'ai entendu parler du "simulateur", mais je pense qu'il fait quelque chose de différent (ne pas générer des tonnes de modèles simulés), même si je peux me tromper. Encore une fois, merci beaucoup pour votre aide. Cela me fera sûrement gagner des jours!
Re: création de plusieurs modèles de réseaux neuronauxsalut @abmayfield ,
Heureux que cela ait résolu votre problème.
Avec la modélisation basée sur l'arborescence (XGBoost, arborescences boostées et forêt bootstrap), vous pouvez facilement utiliser l'interface graphique de la table de réglage dans JMP pour exécuter de nombreux modèles. Mais, un inconvénient est qu'il grignote beaucoup de RAM. L'avantage de l'exécuter de cette façon est que vous pouvez exécuter des dizaines de milliers de paramètres différents et que cela ne consomme pas beaucoup de RAM, juste la consommation du processeur. J'ai exécuté jusqu'à 40k paramètres différents avec la forêt d'amorçage (ce qui est lent) et cela peut prendre quelques jours sur mon ordinateur portable de travail (32 Go de RAM et 2 GHz CPU).
Je suis également l'un des premiers à adopter le JMP 16, et le dépistage du modèle est bien, mais comme vous le faites remarquer, il ne règle aucun des modèles, ce qui peut être un peu trompeur. Il utilise uniquement les paramètres par défaut, qui ne sont pas toujours les meilleurs pour créer un modèle prédictif. Cela pourrait au moins vous aider à déterminer quelles plates-formes valent la peine de se régler davantage et lesquelles ne valent pas la peine d'être examinées.
Vous pouvez également envisager la plate-forme SVM pour modéliser vos données nominales, car cela est censé être également une bonne méthode pour ce type de données.
Quant au simulateur, c'est quelque chose de différent et il est conçu comme un moyen de tester les estimations avec différentes conditions initiales (randomisation). Cela donne une distribution des valeurs pour l'estimation et vous donne un intervalle de confiance pour l'estimation d'origine et vous pouvez ensuite décider si ce modèle avec les estimations données est bon ou non.
En ce qui concerne le DOE, vous pouvez faire une conception factorielle ou même fonctionner comme une conception de remplissage d'espace avec les facteurs définis de manière appropriée, et je pense que cette plate-forme permet également des contraintes conditionnelles. En outre, vous pouvez envisager de faire un filtrage des prédicteurs ou un bootstrap sur les prédicteurs pour voir si vous avez réellement besoin de tous les 89 ou si vous ne pouvez vraiment utiliser qu'un sous-ensemble plus petit.
En guise de dernière note, puisque vous avez une table de données courte et large, vous voudrez peut-être envisager, au lieu d'utiliser une colonne de validation, une approche Leave one Out pour la validation. Si vous faites cela, vous devrez éditer le script pour cela.
Bonne chance!,
DS
Re: création de plusieurs modèles de réseaux neuronauxPlus d'excellentes suggestions, notamment en ce qui concerne le type de validation. Je vois que Neural prend en charge la retenue, Kfold ou l'exclusion de lignes (je suppose que je choisirais au hasard quelques lignes à omettre). Est-ce que je voulais changer le script pour changer le type de validation, est-ce que je changerais simplement la ligne «Validation (: Validation avec test)»? Et les échantillons retenus seraient-ils équivalents aux yeux du JMP en tant qu'échantillons de validation? Sinon, je devrais supprimer les colonnes de validation (ou les renommer), et les colonnes de test devraient également disparaître.
Re: création de plusieurs modèles de réseaux neuronauxsalut @abmayfield ,
Kfold est également un autre excellent moyen de valider l'ensemble de données court. Oui, l'exclusion de ligne que vous définiriez comme état de ligne, ce que vous pourriez faire en sélectionnant l'ensemble de données «test» et en définissant l'état de ligne sur «exclu». Si vous utilisez Kfold ou Holdback, JMP les utilise pour la validation des données, et non pour tester les données. J'espère que vous disposez également d'un ensemble de données distinct que vous pouvez utiliser comme données de test et ne pas l'avoir dans le même tableau de données que les données d'entraînement et de validation.
J'utiliserais simplement Kfold pour la validation, puis commenterais les parties dont vous n'avez pas besoin pour exécuter le script. Vous trouverez ci-dessous la version modifiée avec un paramètre de validation de 5 Ko pour la plate-forme NN.Ça devrait marcher, ça a marché pour moi.
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];
);
Bonne chance!,
DS
Re: création de plusieurs modèles de réseaux neuronauxWow, je ne peux pas croire que j'ai exécuté 300 modèles de réseaux neuronaux avant le déjeuner grâce à votre aide à la création de scripts. J'espère que cela sera repris et «félicité», comme je l'imagine, lorsque de plus en plus de gens commenceront à voir la valeur de la plate-forme NN, ils se tourneront vers quelque chose comme ça, surtout s'il s'agit d'un tout nouvel ensemble de données et que vous ne le savoir où «plonger» en ce qui concerne la quantité déconcertante de paramètres d'entrée du modèle NN qui peuvent être légèrement modifiés (ce qui entraîne parfois d'énormes différences même en augmentant simplement, par exemple, le taux d'apprentissage de 0,05 à 0,1). Je vais ensuite jouer avec les différentes approches de validation (colonne de validation vs retenue vs KFold). Il faut absolument être prudent étant donné la petite taille de mon échantillon (actuellement) (en espérant utiliser ces données préliminaires pour obtenir des fonds pour ajouter plus de «lignes», c'est-à-dire des coraux).
Re: création de plusieurs modèles de réseaux neuronauxHeureux d'entendre que cela fonctionne pour vous. Bonne chance avec la modélisation! Vous pouvez également vérifier d'autres plates-formes de modèles, puis comparer les modèles sur un ensemble de données de test pour voir quel est le meilleur prédicteur.
DSRe: création de plusieurs modèles de réseaux neuronauxJ'ai une question de script (probablement simple). Disons que je veux changer l'entrée dt en une autre. Ne devrais-je pas simplement être capable de copier et coller le script, et de remplacer le dt de "Neural" par autre chose?
str = Eval Insert(
"report = (dt << Neural (
Y( :health designation ),
X(
Si je supprime le fichier "Neural" d'origine et le remplace par une autre table avec exactement les mêmes informations et un nom différent, le script ne fonctionnera pas! Est-il nécessaire d'avoir exactement les mêmes données dans deux tableaux de données, dont l'un est nommé «Neural»? Peut-être que j'ai raté cette partie!
Re: création de plusieurs modèles de réseaux neuronauxsalut @abmayfield ,
Si vous revenez en arrière et révisez le script, la deuxième ligne définit ce que la table de données doit être utilisée pendant l'analyse. Le code JSL dt = Current Data Table () définit une variable locale "dt" qui est ensuite utilisée dans le reste du script au lieu d'avoir à appeler la table de données par son nom. De même, dt_parms est la variable locale affectée à la table de réglage NN, "réglage NN". Ces deux tables sont vraiment les seules choses que vous alimentez au script. Le reste est tout interne.
Si vous copiez / collez le code JSL dans une nouvelle table de données, il devrait fonctionner automatiquement car vous l'exécutez localement dans cette table de données.
Vous ne devez pas modifier l'appel dt << Nerual (), sauf pour définir vos Y () et X (), et peut-être la méthode Validation (). Le code JSL dt << Nerual () est une commande qui demande à JMP d'effectuer une modélisation NN sur la table de données "dt". D'où la définition de ce qu'est dt au début du code.
Vous devrez également modifier l'appel w = Window () pour refléter le titre de la fenêtre de rapport NN, ainsi que le Regex () en dessous. Enfin, selon que vous aurez ou non le jeu de données "test" dans une colonne de validation, vous voudrez soit commenter (avec la commande // au début de la ligne), soit supprimer le commentaire au début du code lorsqu'il crée les colonnes de résultats de test ainsi que la définition Test_stats et où le code écrit les résultats dans la nouvelle table de données de sortie.
À part cela, vous ne devriez pas avoir à modifier grand-chose du tout.
En ce qui concerne votre dernière question, cela dépend en quelque sorte de la façon dont vous implémentez le code. Si vous l'exécutez à partir de la table de données, c'est-à-dire qu'il est enregistré dans la partie script de la table de données et que vous l'exécutez via le bouton vert, il vous suffira de changer les Y () et X ( ) que vous utilisez comme prédicteurs et réponse pour faire correspondre les noms de colonne de la nouvelle table de données. Il vous faudra bien entendu ouvrir la table "NN tuning". D'un autre côté, si vous exécutez ceci en tant que script séparé, vous souhaiterez peut-être changer la définition de dt de dt = Current Data Table () à dt = Data Table (""), où vous insérez le nom de la nouvelle table de données entre les guillemets.
Le "Neural" auquel vous faites référence n'est pas une table de données mais la commande JMP pour exécuter un modèle Neural Net sur une table de données spécifiée. La commande "<<" signifie effectuer l'action qui se trouve à droite du << sur l'objet à gauche. Près du début du code, vous pouvez le voir avec la nouvelle commande de colonne. Là où il est dit dt_results << New Column (), le code indique à JMP de créer une nouvelle colonne pour l'objet dt_results, qui est le sous-ensemble de données généré à partir de la table de données dt_parms.
J'espère que cela t'aides!,
DS
Re: construire plusieurs modèles de réseaux de neuronesD'accord, super. Cela répond à quelques questions supplémentaires que j'avais. Maintenant, la seule chose avec laquelle je me bats, c'est que lorsque je copie, colle et exécute le script dans une nouvelle table de données, j'obtiens une erreur de zone de contour, à laquelle vous faites allusion dans les commentaires du script. "caractère attendu arg 1 dans l'accès ou l'évaluation de la zone de contour." Qu'est-ce que ça veut dire?? J'ai augmenté et diminué les nombres, mais j'obtiens le même message d'erreur à chaque fois et le script ne s'exécutera pas. Je ne sais même pas ce qu'est une boîte de contour. C'est bizarre que l'arborescence soit identique. Je viens de changer le nom du fichier. Le nom du fichier est plus long. Cela signifie peut-être que j'ai besoin d'un cadre plus grand ?