Automatiser le réseau de neuronesSalut tout le monde,
Je travaille sur un projet utilisant un modèle de réseau de neurones pour prédire l'humidité du sol à différents endroits (environ 1000) définis par leurs coordonnées uniques.La même structure pour le réseau de neurones dans JMP peut être appliquée à tous les sites. Donc, je pense à automatiser le travail. Il peut s'agir d'un script JMP capable de trouver le coordinateur d'emplacement (X, Y), d'extraire les entrées de données nécessaires et d'exécuter le réseau de neurones. À la fin, le script peut enregistrer des rapports des modèles. Avez-vous des indications ou des conseils que vous pouvez partager avec moi?
Merci d'avance.
Toute suggestion ou discussion est appréciée.
Re : Automatiser le réseau de neuronesSalut @ Marco1 ,
Je ne suis pas sûr de comprendre pourquoi vous voudriez prévoir un certain nombre de périodes sans avoir de colonne de sortie. Si vous savez que vous disposez d'un bon ensemble de prédicteurs pour votre modèle, qu'il soit NN ou basé sur un arbre, ou kNN, alors je ne pense pas que cela importe vraiment, il s'agit de savoir si le modèle fait un bon travail de prédiction les prochains événements. Vous devez alimenter une colonne Y aux modèles, sinon ils n'ont aucun résultat à essayer et à prédire pour la formation et la validation du modèle. Les plates-formes vous permettent d'enregistrer la formule de prédiction dans la table de données ou de la publier dans le dépôt pour la comparer avec d'autres prédictions que vous générez, afin que vous puissiez les tester sur de nouvelles données et voir lequel est le meilleur modèle - cela dépend de la métrique que vous examinez et si vous faites de la classification ou de la régression.
Je devrai me pencher sur la frontière de Pareto quand j'aurai un peu de temps, merci pour le complément.
Bien qu'il serait formidable qu'une interface graphique unique exécute toutes les différentes plates-formes de modélisation au sein de JMP, c'est un peu trop pour moi à entreprendre en ce moment. Peut-être que dans les futures versions, je pourrai ajouter des plates-formes supplémentaires. À l'heure actuelle, il peut exécuter NN, arbre boosté, forêt d'amorçage et XGBoost. Je prévois également d'ajouter kNN, naïf Bayes et SVM à la liste. Il faut du temps pour résoudre les bogues et ainsi de suite, en particulier lors de l'appel de plusieurs plates-formes différentes.
Merci!,
DS
Re : Automatiser le réseau de neuronesBonjour Diedrich,
Bonne explication, une question : à propos de la prédiction des séries chronologiques avec les réseaux de neurones JMP, comment une prédiction des prochaines 2, 3, 4, 5 périodes ou plus dans le futur peut-elle être obtenue, avec 1, 2, 3 colonnes d'entrée ou plus ? ... c'est-à-dire sans colonnes de sortie.
En ce qui concerne l'optimisation multiobjectif (pareto border), j'ai joint une très bonne interface graphique qui peut être téléchargée à partir de la communauté JMP, cela aidera peut-être à mettre à jour l'interface graphique sur laquelle vous travaillez.
Ce serait formidable si l'interface graphique pouvait optimiser les paramètres de n'importe quelle plate-forme dont dispose JMP, y compris les séries temporelles (ARIMA, Winter ...) en évitant à l'utilisateur d'avoir à faire le travail que certaines optimisations pourraient faire.
Merci pour votre aide!
Salutations,
Marco
Re : Automatiser le réseau de neuronesSalut @giaMSU ,
Si vous voulez vraiment comparer différents NN avec différents schémas de validation, je définirais la graine aléatoire sur un certain nombre, disons 12345. De cette façon, il repartira toujours du même point. Là où cela va dépendre des paramètres utilisés dans le modèle - et de l'ensemble de validation, mais tout commencera au moins au même endroit.D'après mon expérience, il est très important d'avoir un bon schéma de validation. Si, en sélectionnant des exemples spécifiques pour la formation ou la validation, vous risquez de créer un ensemble de données très déséquilibré qui préfère un résultat à un autre, ce qui finirait par sur-adapter la formation et ne pas bien prédire l'ensemble de validation, ou vice versa. Vous pouvez même envisager de créer des colonnes de validation K-fold, qui est une sorte de schéma de validation k-fold imbriqué, puis vous pouvez consulter les prédictions d'ajustement et même les statistiques d'ajustement pour chacune des colonnes imbriquées. Juste une pensée.
Bonne chance!,
DS
Re : Automatiser le réseau de neuronesSalut @ Marco1 ,
Je ne suis pas sûr de la plate-forme dans JMP que l'on utiliserait pour effectuer la génération DOE de la frontière de Pareto. Dans mon interface graphique que je mets à jour maintenant, j'appelle la plate-forme Space Filling DOE, qui remplit de manière optimale l'espace hyperparamètre avec des points basés sur les valeurs d'entrée basses et hautes pour le Space Filling DOE. La table de données résultante qui est générée enregistre toutes les statistiques d'ajustement afin que l'on puisse évaluer chaque ajustement et même revenir en arrière et les exécuter manuellement dans les plates-formes ultérieurement.
À ma connaissance, JMP ne prend pas en charge plus de deux couches. Je ne me souviens pas des détails, mais cela a été mentionné lors d'une des sessions du Discover Summit Americas de la semaine dernière. Je pense que c'est parce que lors de l'évaluation des performances (en particulier des performances prédictives), plus de deux couches n'ont pas ajouté grand-chose pour le temps de calcul supplémentaire dans la construction du modèle. Veuillez également noter que lors du boosting avec NN, une seule couche est autorisée. Souvent, le nombre de nœuds est plus significatif que le nombre de couches.
Autant que je sache, vous devriez pouvoir modéliser des séries chronologiques avec la plate-forme NN. Je n'y vois aucune limite. Le seul défi, bien sûr, est l'interprétabilité du modèle NN. Il est beaucoup plus difficile d'interpréter les transformations X -> Y dans les NN.
Je joins une table de réglage NN de base (NN Tuning) et un DOE de remplissage d'espace pour explorer l'espace des hyperparamètres. Notez que je n'ai que deux des quatre méthodes de pénalité dans mon DOE. De plus, j'ai autorisé chaque variable (à l'exception de l'ajustement robuste) à varier, mais comme l'amplification n'est autorisée que pour un modèle à une seule couche, le code élimine automatiquement les choix à deux couches et revient à une option d'amplification. Enfin, les 13 colonnes doivent être présentes dans la table de réglage que vous sélectionnez lors de l'exécution de l'interface graphique. S'ils ne sont pas présents, il lancera une erreur.
Les plates-formes DOE supprimeront tout facteur qui est une constante par défaut. Si une colonne est manquante après avoir généré le DOE, vous devez la recopier à partir de votre table de facteurs (et remplir la valeur jusqu'à la fin de la table), d'où l'exemple où Robust Fit est maintenu constant à 0. J'ai utilisé une graine aléatoire de 1234, avec 120 exécutions pour générer le Space Filling DOE.
J'espère que cela t'aides,
DS
Re : Automatiser le réseau de neuronesBonjour Diedrich,
Je suis heureux de vous saluer, ce serait excellent si l'interface graphique pouvait effectuer une optimisation multi-objets (bordure de Pareto) dans tous les hyperparamètres que l'utilisateur doit ajuster et créer plus de 2 couches (apprentissage profond)
Une question : est-il possible de faire des prédictions de séries temporelles avec les réseaux de neurones JMP ?
L'exemple que j'ai envoyé, c'est-à-dire que la table d'ajustement a été créée par le DOE personnalisé de JMP, j'apprends juste à utiliser le NN et le DOE, quelles colonnes le DOE élimine-t-il ? Quelles colonnes dois-je placer et dans quel tableau ? C'est-à-dire la table de données ou la table d'ajustement ?
S'il vous plaît pourriez-vous envoyer un exemple?
Merci pour votre réponse et votre aide !!!
Salutations,
Marco
Re : Automatiser le réseau de neuronesSalut @ Marco1 ,
Merci. Je suis en train de mettre à jour encore plus le JSL afin qu'il génère la table de réglage pour l'utilisateur. Le problème avec le fait de le faire manuellement est, oui, vous devez assez bien connaître les tenants et les aboutissants du code. Le problème que vous rencontrez est que le code s'attend à ce que certaines colonnes se trouvent dans la table de données de réglage, même si elles sont constantes, car chaque ligne contient les paramètres qui sont transmis à la plate-forme de modélisation.
Je suppose que lorsque vous avez créé la table de réglage, JMP a automatiquement supprimé tous les termes constants. La table de réglage résultante ne contient pas les bonnes colonnes et générera donc une erreur. Je ne suis pas le meilleur programmeur, alors essayer d'aborder tous les scénarios possibles prend du temps.
En attendant, avant la sortie de ma prochaine version, je vous suggère de recopier les colonnes que JMP a supprimées, puis de remplir les valeurs jusqu'à la fin du tableau. Cela devrait vous faire avancer. Si vous rencontrez d'autres problèmes, veuillez m'en informer.
J'espère que cela t'aides!,
DS
Re : Automatiser le réseau de neuronesBonjour Diedrich Schmidt,
Je vous félicite pour l'interface graphique Gen_AT_v3.0, apparemment je ne sais pas m'en servir, j'obtiens une erreur :
Existe-t-il un manuel ou des exemples ?
Tableau des séries chronologiques et tableau des paramètres ci-joints.
Merci pour votre aide.
Salutations,
Marco





Re : Automatiser le réseau de neuronesSalut DS,
Merci de m'aider. Honnêtement, j'ai abandonné et je l'ai fait manuellement.
J'ai essayé plusieurs fois le script en demandant aux gens ou en auto-apprenant avec JMP Scripting Index. Par exemple, j'ai utilisé l'option Get RSquare Validation dans fit() ou add rSquare = (report(obj)["Validation"]["mvalue"][NumberColBox(1)]< afficher (rCarré);
Les deux n'ont pas fonctionné.
À propos de votre suggestion de sélectionner au hasard l'ensemble de données de validation K-fold. C'est une excellente idée. Cependant, je souhaite conserver la cohérence de la structure NN afin de pouvoir comparer les performances entre NN. La plupart des articles que j'ai lus, utilisant des NN artificiels, ne mentionnent pas comment ils sélectionnent leur ensemble de données de validation lors des itérations.
Je vais essayer de voir toute amélioration dans R2. Je vous ferai part du résultat prochainement.
Meilleur
Re : Automatiser le réseau de neuronesBien sûr, content que ça aide!Re : Automatiser le réseau de neuronesMerci beaucoup.
Re : Automatiser le réseau de neuronesMerci, .@G_M!Re : Automatiser le réseau de neuronesBon travail, @SDF1 .
Re : Automatiser le réseau de neuronesSalut @giaMSU et @G_M ,
Plus tôt dans ce fil, j'ai posté une section de script que j'utilise tout le temps lors de l'exécution de milliers d'ensembles d'entraînement afin de simplement enregistrer le R^2, RASE, etc.
Comme @G_M mentionné, vous voudrez aller dans l'arborescence du rapport pour savoir où se trouvent les valeurs à enregistrer. Tout en bas du script, juste avant la fin de la boucle FOR, c'est là qu'il extrait les valeurs de l'arborescence du rapport.
J'ai modifié mon script précédent qui automatise l'ajustement NN et inclus la partie de mon message précédent qui extraira les valeurs d'ajustement (R2 et RMSE). Si vous voulez d'autres valeurs, vous pouvez également les ajouter. Le script crée une nouvelle table de données contenant les résultats de l'ajustement NN pour chaque ID d'emplacement. J'ai également modifié la partie où chaque table de données est générée en fonction de l'ID d'emplacement afin que la table de données ait son propre identifiant unique basé sur l'ID d'emplacement, bien que je ferme de toute façon chaque table de données à la fin ; en principe, vous pouvez les garder tous ouverts en commentant la commande de fermeture à la fin de la boucle FOR, mais vous aurez alors une énorme quantité de tables de données ouvertes.
Avant d'implémenter le code, je vous suggère fortement de lire les commentaires et de comprendre ce que fait le script. Une fois que vous vous serez familiarisé avec les scripts, cela changera à jamais votre vie JMP !
En passant, avez-vous vraiment besoin d'avoir toujours la même graine aléatoire ? Je recommande de le laisser vide pour l'ajustement afin que vous obteniez vraiment un ajustement aléatoire, ce qui peut le rendre plus robuste. De plus, vous avez suffisamment d'observations dans vos données pour pouvoir créer une colonne de validation avec un ensemble d'entraînement, de validation (et de test) afin que vous puissiez réellement savoir lequel des modèles est réellement le meilleur en matière de prédiction. Vous pouvez stratifier cette colonne de validation en fonction de votre colonne :Y ("SoilMoisture(kg.m-2) or (mm)"). Vous pouvez également automatiser cela et l'avoir dans la partie où il crée chacune des tables de données après avoir résumé sur : ID.
En exécutant le script ci-dessous sur votre table de données, j'obtiens le résultat suivant :

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 );
);Bonne chance!,
DS
Re : Automatiser le réseau de neuronesSalut DS
Nous vous remercions de votre contribution.
J'ai encore un petit problème avec le problème. J'ai enregistré un millier de fichiers pdf des rapports NN. Ensuite, c'est devenu un problème car j'ai besoin de lire manuellement de nombreux fichiers pdf pour obtenir le R2 de chaque NN.
Je veux exécuter un script pour les extraire automatiquement. Pouvez-vous m'aider?
Sincèrement
GN
Re : Automatiser le réseau de neuronesSalut @giaMSU ,
Merci d'avoir publié le petit tableau de données que vous avez et le script avec lequel vous travailliez. Je l'ai un peu modifié et je l'ai fait fonctionner. Essayez ce qui suit. Je n'ai pas réalisé que vous créiez des sous-ensembles de tableaux de données et que vous n'utilisiez que ceux-ci pour l'ajustement.
Voici la sortie que j'ai obtenue en exécutant une version modifiée de votre script :

Voici le script modifié :
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.
);Si vous avez beaucoup d'identifiants d'emplacement différents, vous pouvez enregistrer chaque résultat avec le code de caractère d'identifiant unique pour les différencier. Modifiez peut-être la ligne "save" en quelque chose comme:
NNReport << Save PDF("E:/Ready_for_ANN/result_LocID_"|| Char(dt_list[i]:ID[1]));J'espère que cela t'aides!,
DS
Re : Automatiser le réseau de neuronesSalut @giaMSU ,
J'aime l'idée d'automatiser l'ajustement NN, et j'ai fait quelque chose de similaire pour d'autres plates-formes. Je pense que je vais essayer de faire quelque chose de similaire pour le NN afin de tester divers paramètres d'ajustement dans la plate-forme NN pour trouver un ajustement optimal.
J'ai fait quelque chose de très similaire, mais avec une plateforme de modélisation différente (forêt aléatoire et arbres boostés). J'inclurai mon code ci-dessous avec des descriptions de ce que font les lignes principales.
En général, cependant, vous ne fournissez pas les nouvelles informations au NN à chaque fois que vous sélectionnez un nouvel emplacement. L'ajustement doit en fait être à l'intérieur une boucle FOR. J'ai le mien sous forme de code de script dans ma table de données et je le fais car j'ai besoin d'exécuter une très grande table de réglage pour obtenir le meilleur ajustement, et quand je le fais de cette façon, cela économise beaucoup de mémoire pour mon ordinateur, plus vous peut faire plus de 24 000 lignes dans une table de données de cette façon, en la laissant s'exécuter pendant la nuit.
Soit dit en passant, le concept original de ceci et l'idée de la boucle pour l'ajustement m'est venu via un message de gzmorgan0, mais je ne me souviens pas du message d'origine. Je l'utilise tout le temps.
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];
);J'imagine que vous devriez pouvoir prendre le plan ci-dessus et le modifier en fonction de vos besoins spécifiques.
En passant, n'oubliez pas non seulement de faire une validation d'ajustement pour ne pas sur-ajuster, mais aussi de tester sa capacité prédictive sur un ensemble de données de test complètement inutilisé que vous avez séparé des données d'ajustement. De plus, si vous pouvez vous le permettre, je recommanderais d'augmenter le nombre de visites> = 25. La plate-forme NN nécessite parfois beaucoup plus de tentatives, comme dans DOE, pour trouver un ajustement optimal pour un ensemble de paramètres donné.
Bonne chance! J'espère voir la solution finale. Je pourrais aussi y jeter un coup d'œil.
Merci d'avoir lancé ce fil.
DS
Re : Automatiser le réseau de neuronesApprenez le scénario.Re : Automatiser le réseau de neurones@giaMSU , donc la façon dont j'aborde probablement est d'accéder à la couche de rapport et d'obtenir la valeur de la zone d'affichage appropriée dans l'arborescence de la couche de rapport. Une fois capturée, la statistique R^2_i du rapport peut soit insérer la valeur dans une liste, puis créer une table de données à partir de la liste, soit créer une table de données et concaténer les valeurs dans une seule table de données. Recherchez Afficher l'arborescence dans l'index de script.
Re : Automatiser le réseau de neuronesSalut G_M
En tant que votre aide, j'ai effectué près d'un millier d'analyses de réseaux de neurones. De plus, j'ai enregistré un millier de fichiers pdf des rapports NN. Ensuite, c'est devenu un problème car j'ai besoin de lire manuellement de nombreux fichiers pdf pour obtenir le R2 de chaque NN.
j'ai essayé d'ajouter Obtenir le test RSquare au script afin qu'il puisse afficher les valeurs R2. Ensuite, je peux les enregistrer avec un fichier en utilisant
obj << Save (Get Gen RSquare Test)
Le script est toujours en cours d'exécution, mais il n'enregistre la valeur R2 nulle part. Je ne vois pas la valeur.
Pourriez-vous s'il vous plaît m'aider avec ce problème?
Merci beaucoup.
GN
Re : Automatiser le réseau de neuronesOn dirait que le rapport est de plus en plus écrit. Essayez de concaténer l'ID au rapport comme suit :
Save PDF("C:\test\model_"|| Char(i) ||".pdf");Re : Automatiser le réseau de neuronesLe script fonctionne bien maintenant.
Il y a un petit problème dans le script. Comme vous avez nommé le fichier "Fichier de sous-ensemble de modèle", le script remplace le fichier PDF à chaque étape. Quand c'est fait, il n'y a qu'un fichier dans le dossier. Pourriez-vous m'aider à ajouter un ID d'emplacement dans le nom de fichier afin que le script puisse enregistrer chaque rapport avec un nom unique ?
Merci
Re : Automatiser le réseau de neuronesJe crois que le problème est que vous devez ajouter la fonction Char autour du :ID dans la fonction Select Where.
Select Where(loc[j] == Char(:ID))
Re : Automatiser le réseau de neuronesSalut G_M,
J'ai essayé votre script. Il tourne bien mais pas exactement comme je le souhaite. Il semble que le script extrait les données de tous les emplacements pour créer un sous-ensemble, puis exécute le neurone. Je l'ai testé avec un sous-ensemble de 02 emplacements. Le neurone a couru deux fois. Cependant, leurs rapports sont les mêmes. Je pense donc que la boucle For a quelques problèmes. Pourriez-vous m'aider s'il vous plaît ? J'ai joint mon script et mes données dans cette discussion au cas où vous auriez besoin d'utiliser.
MerciRe : Automatiser le réseau de neuronesMerci pour votre aide. J'ai écrit un script avec un jeu de données à 2 emplacements.
Tout d'abord, j'ai utilisé un script neuronal enregistré à partir d'une exécution NN sur JMP 14 Pro. J'ai utilisé deux couches cachées avec respectivement six nœuds et trois nœuds.
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 )
)
);
Cette partie fonctionne bien. Ensuite, j'ajoute la boucle For comme suggestion G_M.
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")Ensuite, ça ne marche pas.
Au fur et à mesure que j'apprends du script, la boucle For a créé un sous-ensemble qui inclut tous les ID de j=1 à j++. Ensuite, ce sous-ensemble sera utilisé par le script Neural. Mais la partie neurale n'est pas incluse dans la boucle For. Ensuite, ce n'est pas ce que je veux faire.
Je souhaite créer un sous-ensemble de 1 données de localisation et exécuter le neurone pour ce sous-ensemble à chaque étape.Veuillez corriger si je me trompe.
Je joins ici mon sous-ensemble de données (02 emplacements).
S'il vous plaît aidez-moi à résoudre le problème.
Merci d'avance.
Re : Automatiser le réseau de neurones@G_M J'aime votre approche.
Pour @giaMSU , tout ce que vous avez à faire est d'exécuter un cas de votre réseau de neurones et d'enregistrer le script dans la fenêtre de script (ou le presse-papiers). (Menu du triangle rouge le plus haut, dernière option de la liste, "Enregistrer le script")
Prenez le script écrit par G_M et remplacez cette partie :
Neural(
Y( :Name( "Y" ) ),
X( :Name( "X1" ), :Name( "X2" ) ),
Validation( :Validation ),
Informative Missing( 0 ),
Set Random Seed( 1121 ),
Fit( NTanH( 3 ) )
);
avec votre script Neural, et vous pourriez être prêt à partir, ou au moins 90% du chemin.
Re : Automatiser le réseau de neurones@giaMSU , ce que vous envisagez de faire est possible.Étape 1. Utilisez la fonction Summarize pour créer une liste de chacun des emplacements J = 1000+.Étape 2. Indexez les emplacements J dans la liste.Étape 3. Utilisez les fonctions Sélectionner où et Sous-ensemble pour créer un ensemble de données pour le jème emplacement.Étape 4. Exécutez le jème modèle de réseau neuronal pour le jème emplacement.Étape 5. Enregistrez le rapport de la plate-forme NN dans le format souhaité. Étape 6. Répétez jusqu'à ce que vous ayez atteint le dernier emplacement.Je n'ai pas testé, mais ce qui suit devrait fonctionner ou vous rapprocher vraiment.
//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")
);Re : Automatiser le réseau de neuronesSalut @giaMSU ,
Cela semble très faisable, mais votre question est assez ouverte.Quels sont les obstacles que vous voyez et pour lesquels vous avez besoin de l'aide de la communauté ?
Je commencerais par le script du réseau neuronal et je verrais où vous devrez faire des substitutions dans le script pour chaque emplacement.Définissez une fonction ou une expression qui extrait les informations spécifiques à l'emplacement, effectue l'analyse du réseau neuronal, enregistre le rapport/les scripts.Parcourez les emplacements exécutant cette fonction/expression à chaque fois.