construire plusieurs modèles de réseaux neuronauxJ'utilise la plate-forme neuronale pour faire des prédictions et, étant nouveau dans les réseaux neuronaux, je ne connais que peu tous les paramètres d'entrée : nombre de couches cachées, nombre de nœuds/couche cachée, modèles d'amélioration, 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 modifier de manière itérative chaque paramètre un par un, enregistrer les paramètres de performances 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 crée, disons, 1 000 modèles et transfère les données dans une table afin que je n'aie pas à modifier manuellement chaque paramètre d'entrée du modèle ?
#Couches cachées : 1 ou 2
#Nœuds sigmoïdaux : 0, 1, 2, 3 ou 4
#Nœuds linéaires : 0, 1, 2, 3 ou 4
#Nœuds radiaux : 0, 1, 2, 3 ou 4
#boosting de modèles : 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
Cela ferait donc 2 x 5 x 5 x 5 x 5 x 5 x 5 = ~ 30 000.
Je suppose que je pourrais en réduire quelques-uns 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 boosting n'a pas de sens (et certaines autres combinaisons non plus), mais nous parlons toujours de potentiellement des centaines de modèles qui valent la peine d'être testés. Ce type de sélection/comparaison de modèles pourrait sûrement être scripté, n'est-ce pas ?
Modélisation prédictive et apprentissage automatiqueRe : créer plusieurs modèles de réseaux neuronaux@SDF1 J'ai vu votre message, mais j'ai reçu un message d'erreur étrange en essayant de répondre : abm64@miami.edu .
BTW, après des semaines sans l'utiliser, la dernière version de l'interface graphique fonctionne désormais sur mon Macbook Pro 16 pouces sans aucun de ces problèmes liés aux zones de délimitation (en utilisant à la fois Y continu et catégorique avec tous les différents types de validation). Je ne me souviens pas avoir mis à jour quoi que ce soit sur mon ordinateur, mais bon, je suis juste content que cela fonctionne aussi sur cet ordinateur (cela a toujours fonctionné sur mon Macbook Air, il est à bout de souffle !).
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Intéressant, eh bien, il semble certainement que ce problème soit vraiment lié au Macbook Pro (et peut-être au système d'exploitation qu'il exécute). Cela pourrait peut-être être lié au système d'exploitation ou même au matériel - par exemple, la façon dont JMP utilise l'unité de traitement graphique sur un Pro est en quelque sorte différente de la façon dont il l'utilise sur un Air. Vérifiez peut-être si Mac a créé les deux ordinateurs avec le même GPU ou s'il peut s'agir d'un problème matériel. Quoi qu'il en soit, j'imagine que les développeurs JMP voudront en savoir plus sur les spécificités auxquelles vous êtes confrontés, et il serait utile de les porter à leur attention lors du Discover Summit. Au moins, ce n'est pas mon incompétence ! 
Je suis heureux que vous puissiez toujours l'exécuter sur votre Air. J'espère que votre Air continuera à fonctionner afin que vous puissiez réaliser votre vidéo et la soumettre pour le Sommet. Faites-moi savoir votre créneau horaire pour la conférence, j'aimerais le voir.
Merci!,
DS
Re : créer plusieurs modèles de réseaux neuronauxVous savez ce que j'ai appris cette semaine, qui représente littéralement le plus de temps que j'ai jamais consacré à mon travail sur Macbook Pro ? Il y a BEAUCOUP de petits bugs ennuyeux, mais pour la plupart triviaux dans JMP Pro 16.1 qui sont complètement absents sur mon Macbook Air. Et tout est question d’esthétique. Par exemple, savez-vous comment regrouper les scripts sur la gauche, puis cliquer pour développer le dossier groupé ? Cela ne marche pas. Eh bien, ça marche parfois. Vous devez cliquer sur la flèche de développement, puis cliquer ailleurs sur l'écran, revenir, cliquer à nouveau et il finit par se développer. Il y a d'autres petites choses étranges comme celles-là que je n'ai jamais remarquées sur le même système d'exploitation et la même version de JMP Pro sur mon autre Mac, il doit donc y avoir un problème avec JMP et cet ordinateur particulier communiquant entre eux, ce qui affecte ensuite votre script. puisque cela semble avoir quelque chose à voir avec l'apparence. En d’autres termes, je ne pense pas que ce soit à cause de votre incompétence, haha, et je m’attends à continuer d’utiliser la nouvelle interface graphique sur mon autre ordinateur. En fait, il fonctionne sur 2 000 modèles NN au moment où je tape ceci sur mon ordinateur de travail. J'ai juste besoin de résoudre ces problèmes avec le Macbook Pro étant donné la nature délabrée de mon Macbook Air. En fait, je pourrais commencer à enregistrer tous ces petits bugs et bizarreries et essayer de parler à certains développeurs lors du Discovery Summit. Je me demande s'il s'agit vraiment de MON ordinateur ou d'un problème général de Macbook Pro. Je ne souhaite pas passer au dernier Mac OS (Big Sur), mais je me demande si cela pourrait réellement être la solution.
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Désolé d'apprendre que vous continuez à recevoir l'erreur. Le fichier "GenAT_ver3.0.jsl" que j'ai téléchargé est celui que j'utilise. Je l'ai essayé sur mon travail (JMP 16.0 Pro) et sur mon PC personnel (JMP EA17), et il fonctionne sur les deux. Je ne reçois l'erreur sur aucun des deux PC lorsque j'essaie d'adapter vos données. Il doit s'agir de la façon dont le Macbook Pro gère la fenêtre de rapport d'ajustement. Je ne sais pas comment le réparer sans avoir accès à l'ordinateur spécifique. Je devrais examiner l'arborescence de la fenêtre du rapport et essayer de comprendre quelle est la différence entre un PC, un Macbook et un Macbook Pro.
Je suis revenu et j'ai examiné de plus près votre fichier journal et j'ai pensé qu'il s'agissait peut-être du DOE spécifique que vous avez généré, mais même lorsque j'exécute ce DOE et que je crée une table de réglage basée sur celui-ci, cela fonctionne. Au moins, cela fonctionne sur les PC que j'utilise.
C'est dommage, car il semble que vous ne pourrez peut-être pas faire une démonstration de l'interface graphique de votre exposé si elle ne fonctionne pas sur le Macbook Pro. J'aimerais pouvoir être plus utile sur cette question.
DS
Re : créer plusieurs modèles de réseaux neuronauxAutre chose qui pourrait être informative : même si j'ai un Y continu, je reçois le même message (quel que soit le type de validation). Étrange!
Re : créer plusieurs modèles de réseaux neuronauxJe viens d'essayer sur le Macbook Pro et j'ai eu la même erreur outline box/arg 1, mais j'ai remarqué quelque chose : la version de juillet s'appelait "3.0". Pensez-vous que vous l'avez mis à jour, mais que vous avez ensuite accidentellement téléchargé l'ancienne version ?
Re : créer plusieurs modèles de réseaux neuronauxGénial! Laisse-moi t essayez-le maintenant et faites un rapport. Il s'avère que le support de JMP est arrivé à la même conclusion, donc je suis convaincu que cela fonctionnera maintenant.
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Merci pour les fichiers, cela m'a aidé à comprendre d'où venaient les erreurs. Cela est dû à ma programmation médiocre et à ma compréhension complète des structures arborescentes de JMP (je suis entièrement autodidacte dans ce domaine). Quoi qu'il en soit, la date de la dernière version est à peu près correcte, j'avais mis à jour les choses début juillet pour tenir compte du fait que les statistiques d'ajustement changent de position dans la structure arborescente en fonction du type de données de modélisation que sont les valeurs Y, par exemple numériques. , ordinal ou catégorique. Je travaille avec des réponses purement numériques presque 100 % du temps, je n'ai donc pas vu cette erreur régulièrement. Afin de fournir correctement des informations sur les statistiques d'ajustement pour d'autres types de données de modélisation, j'ai dû modifier la façon dont il attribue cette variable. Heureusement, tout cela était plutôt logique du côté de JMP, donc les modifications n'étaient pas si difficiles.
Vous trouverez ci-joint la version 3.0 qui devrait résoudre ce problème, quelle que soit la version de votre système d'exploitation ou de JMP dont vous disposez. Je ne pense pas que le support pourra beaucoup aider puisqu'il s'agit d'un code "tiers" dans un sens. Quoi qu'il en soit, essayez cette version 3.0 et faites-moi savoir si elle continue de mal se comporter.
Merci!,
DS
Re : créer plusieurs modèles de réseaux neuronauxJ'ai essayé JMP Pro 15 et j'ai toujours le même message d'erreur :
caractère attendu arg 1 lors de l'accès ou de l'évaluation de 'Outline Box' , Outline Box/*###*/(o_box)
J'utilise la version 3 de l'interface graphique depuis le 10 juillet environ. C'était le plus récent, non ?
Lorsque j'ai exécuté le débogueur, il m'a dit : "Object Button Box ne reconnaît pas le message envoyé ; peut-être voulez-vous dire l'un de ceux-ci..." puis il répertorie quelques alternatives. Mais la Button Box se forme bien et tous les boutons fonctionnent.
Je pense que votre argument de structure arborescente POURRAIT être le problème, mais c'est le même système d'exploitation (Catalina). Je vais contacter le support technique.
Re : créer plusieurs modèles de réseaux neuronauxJe joins le journal et la table avec l'interface graphique (le dernier script). J'ai essayé tous les types de validation qui avaient du sens pour plusieurs des choses que j'essaie de prédire (les Y). Normalement, je ferais tout sur mon Macbook personnel (où tout fonctionne), mais cet ordinateur est dans des semaines avant de mordre la poussière, alors j'espère pouvoir tout faire fonctionner sur ce Macbook Pro plus récent et plus agréable ! En attendant, je vais essayer quelques choses. Il y a une légère chance que j'aie simplement copié une ancienne version de l'interface graphique (qui contenait encore des bugs), ce qui serait une solution simple, même si je ne pense pas que ce soit le problème puisque, quoi qu'il en soit, cela a fonctionné sur l'autre ordinateur. Je serai curieux de savoir si vous trouvez quelque chose de bizarre, et merci encore d'avoir étudié cela.
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Je dois dire que c'est un comportement étrange pour qu'il fonctionne avec un Air et non un Pro. Si je me souviens bien, cet appel o_box sert à extraire certaines statistiques de l'ajustement et cela peut changer en fonction du type de méthode de validation que vous utilisez : retenue, lignes exclues, etc. Il ne semble pas qu'il s'agisse d'une version JMP puisque vous utilisez la version 16.1 sur les deux. Utilisez-vous la même méthode de validation pour les deux ordinateurs ? Quelle(s) méthode(s) utilisez-vous ?
Ma seule hypothèse est que si cela ne fonctionne pas d'un modèle de Macbook à l'autre, il doit y avoir un changement dans la structure arborescente du rapport et le code JSL recherche une valeur à un emplacement spécifique, mais elle revient vide ou NAN, ou quelque chose du genre et cela renvoie l'erreur. C'est peut-être un peu au-delà de mes compétences en codage - le rendre indépendant du système d'exploitation pourrait me dépasser. Je travaille sur un PC, Windows10. Je n'ai aucun doute qu'il existe des programmeurs plus qualifiés chez JMP qui pourraient trouver comment contourner ce problème afin qu'il puisse fonctionner sur différents systèmes d'exploitation, etc.
Si je peux reproduire l'erreur, il est relativement facile pour moi de la corriger, mais je n'ai pas accès au Macbook Pro. En attendant, pouvez-vous l'exécuter sur le Macbook Pro et vérifier le fichier journal pour voir s'il vous indiquera à quelle ligne de code il tombe en panne ? Cela pourrait m'aider à préciser l'emplacement du bug et peut-être à voir comment le corriger.
Merci!,
DS
Re : créer plusieurs modèles de réseaux neuronauxg r manger. Merci beaucoup. J'ai remarqué quelque chose ème aujourd'hui : sur mon Macbook Air 13 pouces sous Catalina et JMP Pro 16.1, tout fonctionne. J'ai ensuite migré vers mon Macbook Pro 16 pouces de travail, exécutant également Catalina et JMP Pro 16.1, j'ai utilisé exactement la même table de données et votre interface graphique, et j'obtiens cet étrange "caractère attendu arg 1 lors de l'accès ou de l'évaluation de 'Outline Box'. , Outline Box/*###*/(o_box)", quel que soit ce que j'entre. Pensez-vous que cela pourrait réellement être lié à l'affichage (c'est-à-dire le plus grand écran) ? Sûrement pas. Il semble étrange qu'un script s'exécute sur un ordinateur et pas sur l'autre. Des idées?
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Pas de problème, je suis content que cela puisse aider. Oui, le réglage du XGBoost peut être un peu plus complexe. j'ai trouvé un blog ici c'est très utile - dernière entrée de blog sur cette page, mais pour une raison quelconque, le lien vers l'article du blog ne répond pas vraiment. Il donne un exemple de la façon dont cela peut être réalisé en Python, mais c'est essentiellement la même chose dans JMP, une fois que vous avez compris le jargon des paramètres du modèle. J'ai aussi trouvé ça site et la documentation qui l'accompagne TRÈS utile pour lire ce que fait XGBoost et quels paramètres le rendent plus ou moins conservateur d'un modèle. Une chose que j'aime, c'est qu'il est beaucoup plus stable qu'un arbre boosté ou une forêt aléatoire. Les deux ont un comportement stochastique dans R ^ 2, ce qui donne lieu à des modèles qui diffèrent légèrement à chaque fois que vous exécutez l'ajustement, tous les paramètres étant identiques. XGBoost vous offre la même qualité d'ajustement à chaque fois que vous exécutez le même ensemble de paramètres.
N'hésitez pas à mentionner l'interface graphique NN dans votre discours de découverte. J'ai l'intention d'y assister virtuellement et j'allais essayer d'aller à la visite en personne à Cary (je ne suis qu'à une heure d'ici), mais je pense qu'avec le problèmes persistants dus à la pandémie, ils ont arrêté la rencontre en personne. J'ai publié l'interface graphique sur la page des compléments, donc techniquement, je suppose qu'elle est "publiée" et disponible. Merci d'avoir demandé et pensé à peut-être même en faire une démonstration. J'espère que ça se passera bien ! Je ne suis pas le meilleur programmeur, mais je peux faire fonctionner les choses. Si vous rencontrez des problèmes, faites-le moi savoir et j'essaierai de le corriger dès que possible.
Merci!,
DS
Re : créer plusieurs modèles de réseaux neuronauxOuah! Merci beaucoup pour r le tableau et l'explication. Je pensais que, puisque je connais enfin tout le jargon NN, XGBoost serait un jeu d'enfant, mais il semble que j'ai encore beaucoup à apprendre (juste pour comprendre le jargon, par exemple) ! Il semble que XGBoost soit en quelque sorte le « chouchou » du monde de l’apprentissage automatique en ce moment, mais, plus important encore, qu’il pourrait en fait être mieux adapté aux types de données que je génère, je dois donc absolument m’y plonger en profondeur. tout cela (par exemple, pendant que votre interface graphique fonctionne en arrière-plan !). En parlant de cela, cela vous dérangerait-il si je mentionnais l'interface graphique NN, et très probablement même en faisais une démonstration, dans mon exposé JMP Discovery (que j'enregistre cette semaine) ? Je serais sûr de vous en attribuer le mérite, mais je comprends tout à fait si vous voulez être celui qui le dévoilera à un public plus large et ne voudriez pas « voler votre tonnerre ». J'utiliserais la plateforme neuronale uniquement car je doute que je sois le maître de XGBoost d'ici vendredi (quand j'enregistrerai la conférence), haha.
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Je n'ai pas encore mis à niveau vers la version 16.1, donc je n'ai pas rencontré la même erreur, mais je garderai les yeux ouverts au cas où cela se produirait et publierai une mise à jour si nécessaire.
Quant à XGBoost, j'ai une table de réglage pour l'optimiser. C'est joint ici. La plateforme XGBoost dispose de nombreux paramètres de réglage différents qui peuvent être modifiés. Certains sont plus influents que d’autres. Je suis généralement un réglage progressif du modèle car il s'agit d'un très grand espace de paramètres. Je n'ai pas tous les paramètres possibles pour la table de réglage, juste les plus influents (vous pouvez toujours en ajouter d'autres avec les colonnes correctement nommées). Vous pouvez accéder à toute la liste des paramètres de la plateforme en ouvrant le sous-menu « Options avancées » dans la fenêtre XGBoost. Puisque vous avez mentionné que vous disposez d'un ensemble de données très déséquilibré, vous devez vous assurer que le paramètre scale_pos_weight est défini sur 1.
En fait, vous pouvez même exécuter une conception de réglage à partir de la plate-forme elle-même, où elle utilisera le DOE remplissant l'espace pour générer la table de réglage. C'est assez pratique et flexible. Cependant, je trouve que pour l'utilisation du processeur et la minimisation de la RAM, il est préférable de l'exécuter de la même manière que mon interface graphique depuis JMP.
J'ai constaté que dans mes situations, suivre ces étapes fonctionne très bien pour XGBoost :
1. Corrigez le taux d'apprentissage, max_degree, min_child_weight, gamma, subsample et colsample_bytree pour trouver d'abord le bon nombre d'arbres. Ces autres paramètres seront ajustés ultérieurement. Je les ai d'abord réglés sur leurs valeurs par défaut.
2. Ajustez max_degree et min_child_weight
3. Ajustez le gamma (c'est une bonne idée de réajuster le nombre d'arbres avant de passer à l'étape 4)
4. Ajustez le sous-échantillon et colsample_bytree
5 Ajustez alpha et lambda, les paramètres de régularisation
6. Ajustez le taux d'apprentissage : réduisez le taux d'apprentissage et augmentez le nombre d'arbres.
A chaque étape, je génère une table de réglage pour le paramètre que je souhaite régler tout en gardant les autres fixés à ce qu'ils étaient pour cette étape. Je parcoure généralement cette séquence deux fois. Il est essentiel que vous utilisiez la validation croisée (soit un pli en K, soit une colonne de validation) lors de l'exécution de XGBoost. Vous pouvez exécuter l'ajustement sans validation croisée, mais vous risquez alors de surajuster les données et de ne pas vraiment avoir un modèle prédictif aussi performant au final.
J'espère que cela t'aides!,
DS
Re : créer plusieurs modèles de réseaux neuronauxPeu importe le point n°1. Je pense que c'était quelque chose de bizarre de ma part, ou qu'il s'agissait d'une stratification appropriée des échantillons en formation, validation et test. Fondamentalement, j'ai une conception totalement déséquilibrée dans laquelle un groupe que j'essaie de prédire est beaucoup plus courant, donc je pense que cela est à l'origine du problème !
Re : créer plusieurs modèles de réseaux neuronauxJ'ai recommencé à utiliser votre interface graphique NN après la mise à niveau vers JMP Po 16.1, et j'ai déclaré avoir à nouveau l'erreur "plage d'indice". Avez-vous rencontré ce problème ?
Dans un autre ordre d'idées, disposez-vous d'un script DOE pour la table de réglage XGBoost ? Je vais également explorer cette approche avec votre interface graphique ! Merci beaucoup
Re : créer plusieurs modèles de réseaux neuronauxMerci beaucoup pour toutes les informations. J’aurais en effet totalement essayé de construire des tonnes de modèles sans avoir la moindre idée de ce que je faisais. Il y a deux ans, j'ai fait cela avec une autre approche et j'étais sur le point d'essayer d'écrire un article sur Nature, pensant avoir changé la biologie marine telle que nous la connaissons, avant de réaliser que j'interprétais complètement mal le modèle, haha. Heureusement, les modèles d'IA et d'apprentissage automatique font fureur au moment où je travaille, donc, même si ma motivation pour les utiliser était motivée par les approches traditionnelles qui ne les réduisaient pas (plutôt que par mon envie de faire de l'IA parce que c'est "sexy") , j'espère pouvoir profiter de cette vague d'intérêt pour ce genre d'analyses pour tenter d'en connaître tous les tenants et les aboutissants.
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
En ce qui concerne le complément XGBoost, vous devrez télécharger et installer le complément séparément. Cela fonctionne à partir de JMP Pro 15 et versions ultérieures. Vous pouvez trouver le complément ici . Assurez-vous de lire la documentation et d'essayer certaines des modélisations de test expliquées par Russ dans l'article avant de passer à votre propre modélisation. À l'heure actuelle, cette plate-forme nécessite encore un peu plus de compréhension de la part de l'utilisateur sur la façon de modifier/manipuler les hyperparamètres de l'ajustement. j'ai trouvé ça Blog être très utile lorsqu'il s'agit de régler la plate-forme XGBoost (il y a BEAUCOUP de paramètres différents à régler, ce qui rend tout l'espace assez encombrant). Bien qu'il soit écrit pour les utilisateurs de Python, la même idée de base fonctionne bien pour la plateforme JMP. Ce vidéo est également utile, et vous souhaiterez également en savoir plus sur ce que fait chaque paramètre du modèle, quelles sont ses plages de fonctionnement et pourquoi vous pouvez ou non vouloir le modifier par rapport à la valeur par défaut. ici . Ce n’est certainement pas une plate-forme dans laquelle se plonger sans faire quelques devoirs de base. J'ai découvert cela à mes dépens en plongeant pour la première fois et j'ai réalisé que je ne savais pas ce que je faisais. Alors j’ai fait quelques devoirs et ça m’a beaucoup aidé. Désormais, je peux ajuster les modèles assez rapidement en utilisant le framework du blog que j'ai répertorié ci-dessus.
Bonne chance!,
DS
Re : créer plusieurs modèles de réseaux neuronauxMerci beaucoup d'avoir expliqué cela, et je suis heureux d'avoir demandé parce que mon hypothèse était fausse. Il est cependant plus logique que chaque « exécution » soit un mélange aléatoire en termes de quels échantillons sont dans le modèle de formation et lesquels sont retenus. Comme vous l'avez dit précédemment, avec mon petit et large ensemble de données, il est plus logique d'exclure manuellement des lignes, ou bien de créer une colonne de validation, donc en réalité, j'essaie simplement de m'assurer de "maîtriser" toutes les différentes options, car j'espère que dans le à l'avenir, j'aurai un ensemble de données dans lequel la retenue et le kfold pourraient être utilisés. Je pense surtout que ce dernier est attrayant/intelligent.
J'ai environ 15 000 modèles avec votre interface graphique, sans exagération. Maintenant, je pense que je vais jouer en comparant NN et XGBoost, une technique dont je n'avais jamais entendu parler avant votre interface graphique. Je ne sais même pas si c'est dans JMP Pro 16 (même si c'est peut-être caché quelque part) !
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Désolé pour la réponse tardive, j'étais en vacances la semaine dernière.
En ce qui concerne votre question sur la partie retenue, je crois comprendre que JMP sélectionnera de manière aléatoire le pourcentage de lignes en fonction de votre valeur de retenue. Ainsi, si vous disposez de 100 lignes et que vous sélectionnez 0,3 comme partie de retenue, chaque fois que JMP exécute la plate-forme NN, il sélectionnera un nouvel ensemble aléatoire de 30 lignes comme partie de validation. Ainsi, en termes d'utilisation de la table de réglage, la plateforme est appelée à chaque itération où elle envoie à la plateforme NN un nouvel ensemble de paramètres de modèle. Si vous avez choisi l'option de retenue pour la validation et mis un nombre compris entre 0 et 1, à chaque nouvelle exécution dans la table de réglage, JMP sélectionnera un ensemble de lignes différent en fonction de la partie de retenue. Toutefois, si vous effectuez plusieurs tournées au cours d'un seul ajustement de modèle NN, les mêmes lignes de retenue seront utilisées lors de chaque tournée. Chaque fois que la plateforme NN est appelée, elle générera un nouveau sous-ensemble pour validation. C'est du moins ce que je comprends.
Pour la situation ci-dessus, il n'est pas possible de savoir quelles lignes sont retenues (du moins pas à ma connaissance). Si vous vouliez faire quelque chose comme ça, je choisirais l'option de validation de la retenue des lignes exclues. Vous pouvez ensuite sélectionner les lignes de votre tableau de données à exclure et seules celles-ci seront utilisées pour la validation. Vraisemblablement, vous pourriez fournir à la plate-forme NN une graine aléatoire spécifique, disons 10191, pour chaque exécution de réglage avec une partie de retenue et elle utilisera ce nombre aléatoire à chaque fois pour générer le sous-ensemble pour validation. Puisqu'il part de la même graine aléatoire à chaque fois que la plate-forme NN est appelée, en théorie, JMP devrait finir par sélectionner les mêmes lignes pour chaque exécution de réglage. Cependant, dans ce cas, vous ne saurez toujours pas de quelles lignes il s'agit. Encore une fois, c'est ma compréhension de la façon dont cela fonctionne.
J'espère que cela t'aides!,
DS
Re : créer plusieurs modèles de réseaux neuronauxJ'ai maintenant exécuté littéralement 10 000 modèles impairs grâce à votre interface graphique épique. J'avais une question concernant la retenue. Supposons que ma table de réglage comporte 100 lignes (c'est-à-dire différents modèles à tester). Chaque ligne bénéficie-t-elle d'une retenue aléatoire basée sur le pourcentage ou le même nombre X d'échantillons est-il retenu pour chaque modèle ? Je suppose que c'est ce dernier. En d’autres termes, si les échantillons A, B, C et D sont retenus du modèle n°1, ces quatre mêmes échantillons sont retenus du modèle n°2. Je suppose que quoi qu'il en soit, ma question de suivi serait la suivante : est-il possible de SAVOIR quels échantillons sont retenus ? Quoi qu'il en soit, comme nous en avons discuté, dans mon cas, avoir une colonne de validation stratifiée a vraiment plus de sens car je peux garantir qu'au moins un échantillon de chaque traitement est inclus comme formation, validation et test, alors qu'une retenue aléatoire de 30 % pourrait théoriquement Retenez UNIQUEMENT les échantillons du MÊME traitement (ce qui biaiserait la prédiction en faveur dudit traitement !
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Je suis vraiment heureux d'apprendre que cela fonctionne pour vous et j'espère que les bugs ont été corrigés. J'aurais aimé avoir une meilleure solution pour le problème du haut de la table de données de pile. Honnêtement, je ne sais pas comment contourner ce problème.
Quoi qu'il en soit, je pense que vous avez raison à propos de Kfold xvalidation. Cette méthode fonctionne généralement mieux avec des tables hautes et moins bien avec des tables larges. Si vous avez très peu de saisies de données, utiliser une colonne de validation stratifiée sur la réponse est une bonne idée. Ou, si vous utilisez la plateforme GenReg, vous pouvez utiliser l’approche « Leave-One-Out ». Mais généralement, Kfold n'est pas le meilleur si vous avez peu de points de données à prendre en compte.
Je recommanderais certainement de consulter XGBoost, vous pouvez télécharger le complément à partir de la page du complément sur JMP. C'est un algorithme très stable et robuste. XGBoost fonctionne très bien avec une colonne de validation.
Vous pourriez également envisager de vous pencher sur les machines à vecteurs de support, dont dispose JMP Pro. Il a été initialement développé pour les problèmes de classification, mais peut également gérer les problèmes de régression. Dans tous les cas, c'est toujours une bonne idée de comparer différents modèles en utilisant un ensemble de données conservées qui n'a pas été utilisé lors de la formation ou de la validation du modèle. Je construis généralement plusieurs modèles différents, puis j'examine comment ils se comparent sur un tout nouvel ensemble de données pour voir lequel est le meilleur pour prédire le résultat.
Heureux d'avoir pu aider!,
DS
Re : créer plusieurs modèles de réseaux neuronauxC'est TELLEMENT génial. Je fais des lots de 100 itérations pour chaque méthode de validation et je n'ai encore rencontré aucune erreur. Je n'ai pas encore essayé les "lignes exclues", mais je suis convaincu que cela fonctionnera.
kfold me donne toujours la même solution parfaite (surajustement ?), même si je pense que cela témoigne de la taille/du format de mon ensemble de données, plutôt que de toute sorte d'erreur avec le script.
Scientifiquement, j'ai fait quelques recherches, et il semble que si mes "petits" ensembles de données (des dizaines d'échantillons et des centaines de prédicteurs potentiels) se prêtent probablement mieux à XGBoost, ou bien les réseaux neuronaux peuvent être excessifs, alors je vais essayer ça plateforme aussi. Je ne savais même pas que XGBoost était pris en charge dans JMP (alors que j'ai vu des forêts aléatoires et probablement l'autre approche dans votre interface graphique). En d’autres termes, j’ai hâte de profiter de TOUS les composants de cet excellent outil de recherche ! Merci beaucoup pour votre aide (encore une fois) et je vous ferai savoir si je rencontre d'autres erreurs.
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
J'ai donc découvert quel était le problème dans mon codage. Ce n'était pas un problème d'une version de JMP à l'autre, cela concernait le nombre de niveaux pour une réponse nominale ou ordinale. Cela modifie l'emplacement de la zone de numéro de colonne dans la fenêtre du rapport. J'avais besoin d'ajuster le code pour refléter le fait qu'en passant d'une réponse comportant 2 ou 3, ou 4 ou 6 niveaux, les statistiques d'ajustement changent d'emplacement dans le rapport. Ce qui est bien, c'est qu'il s'agit de changements d'un montant fixe lié au nombre de niveaux, j'ai donc pu corriger le code relativement facilement. Il m'a fallu un certain temps pour comprendre ce bug car j'avais utilisé le fichier PowderMetallurgy à partir des exemples de données, mais il ne s'agit que de deux niveaux, pas de 4 comme le vôtre.
Vous trouverez ci-joint la version mise à jour qui est plus généralisée aux différents niveaux de la variable de réponse. Le code devrait déjà fonctionner pour les colonnes de validation à 2 ou 3 niveaux ainsi que pour les réponses nominales, ordinales et continues.
J'ai testé toutes les plates-formes adaptées : NN, BT, Bootstrap Forest et XGBoost avec votre ensemble de données et cela fonctionne correctement sur tous les types de données et les différentes options de validation. Veuillez noter qu'à l'heure actuelle, JMP ne peut adapter qu'une réponse à deux niveaux (nominal ou ordinal) à l'aide de la plateforme d'arborescence améliorée. Les autres plateformes peuvent gérer plus de niveaux que cela.
Je suis presque sûr que cela fonctionne maintenant comme prévu (sauf pour le passage par défaut à la dernière table de données ouverte - je ne sais pas comment contourner ce problème). Cependant, si vous y trouvez un bug, n'hésitez pas à me le faire savoir.
Merci et bonne chance !,
DS
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
J'ai le même problème avec mes tables de données. Je pense que vous avez raison, si vous ne l'exécutez pas directement à partir de la table de données à partir de laquelle vous modélisez, la valeur par défaut est la dernière table de données ouverte dans votre fenêtre d'accueil JMP. Je ne sais pas comment contourner ce problème.
Hmm, le code devrait fonctionner avec une colonne de validation qui ne concerne que la formation et la validation ou les trois. Je l'ai écrit pour vérifier le nombre de niveaux dans la colonne de validation et l'ajuster en conséquence, c'est-à-dire pour enregistrer les statistiques d'ajustement appropriées, qu'il y ait deux niveaux ou 3. Je vérifierai celui-là demain. Je pense que l'erreur de plage d'indice est probablement due aux changements entre 15 et 16. Lorsque 16 est sorti, je ne suis pas revenu en arrière et vérifié le code pour m'assurer qu'il fonctionnait, mais je l'ai exécuté plusieurs tests en 15 et tout a fonctionné. Néanmoins, je vais résoudre ce problème et faire corriger les choses pour que cela fonctionne comme prévu, je n'aurai tout simplement pas le temps avant vendredi matin pour y arriver.
Encore une fois, merci de m'avoir aidé à déboguer le code et désolé pour le désagrément occasionné. Je vous répondrai lorsque je l'aurai vérifié pour tous les types de données et types de code, comme je l'ai fait pour le soumettre en tant que complément JMP.
Merci!,
DS
Re : créer plusieurs modèles de réseaux neuronauxGÉNIAL! Maintenant, nous cuisinons avec le feu. La seule chose que je vois maintenant, c'est que, même si l'interface graphique vous demande de lui indiquer quelle est la table de données et quelle est la table de réglage, elle les confond encore parfois. Je pense que la valeur par défaut est la table la plus proche du "haut de la pile" (j'ai tendance à avoir 10 à 20 tables ouvertes, sinon cela ne serait probablement pas un problème).
Serait-il possible d'ajouter une simple « règle » disant « Si la colonne de validation ne contient que des termes de formation et de validation, ne calculez pas les données de test » ou quelque chose du genre ? Je suppose que l'alternative est de parcourir le code manuellement et de mettre le "//" devant toutes les options "test". Je demande parce que parfois j'utilise UNIQUEMENT la formation et la validation, plutôt que la formation/validation/test (car mes échantillons sont petits). si vous entrez maintenant une colonne de validation avec UNIQUEMENT des termes de formation et de validation, vous obtenez l'erreur « plage d'indice », et je pense que c'est parce qu'elle recherche des données « test » qui ne sont pas là !
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Merci encore d'avoir compris cela et de me l'avoir fait savoir : mes modèles ont tendance à avoir des réponses numériques, donc je n'ai généralement pas besoin de modifier les éléments pour les types de données nominaux.
Quoi qu'il en soit, je pense qu'il y a peut-être eu un changement de JMP 15 à 16 qui a conduit à des zones de colonnes de numéros différentes dans les fenêtres de rapport, car je devais changer toutes les mêmes valeurs de ce qu'elles étaient à ce qu'elles sont maintenant, et cela fonctionnait auparavant dans JMP 15, je me souviens l'avoir testé. J'ai revérifié et cette version mise à jour fonctionne correctement avec les différentes méthodes de validation pour NN : retenue des lignes exclues, retenue, kfold et colonne de validation. Désolé encore une fois pour le désagrément. Je suis heureux que vous puissiez le tester et me faire part des bugs afin qu'il puisse s'améliorer et aider les autres. S'il vous plaît laissez-moi savoir si vous trouvez autre chose!
Merci!,
DS
Re : créer plusieurs modèles de réseaux neuronauxMerci d'avoir examiné cela, et cela fonctionne maintenant avec une colonne de validation, mais j'obtiens le même code d'erreur lorsque j'utilise holdback ou kfold. Je me demande si c'est parce que ces méthodes ne stratifient pas nécessairement les données là où chaque groupe que j'essaie de prédire est représenté ? Je vais l'essayer avec un ensemble de données plus grand et voir si j'obtiens la même erreur "plage d'indice".
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Désolé, j'ai mis un peu de temps à vous répondre. J'ai pu reproduire l'erreur que vous obteniez et trouver où se trouvait l'erreur dans mon code. les lignes 348 et 349 avaient des valeurs erronées pour les variables ncol_box_v et ncol_box test. Ils devraient être respectivement 10 et 19. J'ai corrigé cela et réexécuté le NN avec la colonne de validation, et cela fonctionne comme il se doit. Je joins le code corrigé. Désolé pour le dérangement. Merci d'avoir détecté cela, et si vous trouvez d'autres bugs, faites-le-moi savoir.
J'espère que cela t'aides!,
DS
Re : créer plusieurs modèles de réseaux neuronauxWow, cette interface graphique a vraiment été mise à niveau ! La seule chose est que maintenant j'obtiens une erreur de : "
Plage d'indice dans l'accès ou l'évaluation de 'V_stats[ /*###*/5]' , V_stats[/*###*/5" quel que soit le type de validation que j'utilise. Je me demande si c'est parce que j'ai un échantillon si petit pour essayer d'avoir des échantillons de formation, de validation et de test pour chacun des quatre groupes (comme les Y) ?
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Non, je suppose que c'est parce que vous avez choisi d'avoir une colonne de validation pour la sélection du bouton radio (par rapport à la retenue ou à la retenue exclue, etc.) mais vous avez oublié d'inclure la validation dans la liste des colonnes lorsque vous convertissez les colonnes dans leur sélection. les rôles. C'est mon hypothèse, mais si ce n'est pas le cas, j'aurai peut-être besoin que vous fournissiez une description étape par étape.
J'ai également quelque peu mis à jour le code pour corriger quelques autres erreurs commises. Mon code inclut la fenêtre de progression, ce que je pense que vous ne vouliez pas, mais quoi qu'il en soit, je joins le nouveau fichier GenAt.jsl afin que vous puissiez avoir le code source. Je l'utilise tout le temps pour m'aider dans ma modélisation - NN, arbre boosté, forêt aléatoire et XGBoost. J'aime ça, mais cela nécessite une certaine connaissance/compréhension de ce que vous faites du point de vue de la modélisation et de ce que les différentes plateformes vous permettent de faire.
Je ne sais pas si ça lien fonctionnera, mais j'ai essayé de rédiger une description sur la façon de l'utiliser pour le référentiel de compléments. Je sais que je peux accéder à ce lien via mon compte SAS, mais je ne sais pas si d'autres le peuvent. Cependant, il n'est pas encore rendu public sur le référentiel.
J'espère que cela t'aides!,
DS
Re : créer plusieurs modèles de réseaux neuronauxBonjour!
Je suis de retour sur ce travail NN après une interruption de 6 mois, et j'ai remarqué que lorsque j'essaie d'exécuter votre interface graphique NN, je reçois un nouveau message d'erreur : "Envoyer attend un objet scriptable lors de l'accès à l'évaluation de la "liste", {/ *###*/"Validation"})." Pensez-vous que cela pourrait être dû à un changement entre JMP 15 et 16 (c'est-à-dire que certains scripts JMP 15 doivent être modifiés pour JMP 16 ?
Re : créer plusieurs modèles de réseaux neuronauxC'est super! Faites-moi savoir quand vous le publierez. Je vais certainement l'essayer, d'autant plus que j'en suis encore aux premiers stades de la compréhension de cet ensemble de données (bien que NN ait été clairement le gagnant par rapport à tous les autres types de modèles que j'ai testés sur JMP Pro 16). Je vois l'intérêt de ne pas aller DIRECTEMENT à NN pour les raisons que vous avez indiquées ET parce que ce n'est pas idéal pour la réduction des variables de réponse. Dans mon cas, je devrais mesurer à plusieurs reprises ma même suite de 30 à 40 protéines dans chaque échantillon (sans aucune donnée manquante, comme vous l'avez souligné), ce qui augmenterait les coûts par rapport à une approche plus traditionnelle de biomarqueurs candidats (avec un ou juste quelques prédicteurs). Je crée donc essentiellement des modèles simples et épurés avec seulement quelques biomarqueurs (généralement en utilisant Gen-reg) et je les compare au modèle NN optimisé de votre script. Dans CE cas, NN est supérieur, mais cela ne veut pas dire qu'il proviendra TOUJOURS de chaque futur ensemble de données que je collecterai ! Au plaisir d'essayer l'interface graphique, les bugs et tout.
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Je suis tout à fait d'accord avec vous sur le fait de ne pas avoir de modèles trop complexes. C'est absolument un problème qui devrait être évité.
Mon point de vue est que la modélisation NN n’est pas trop différente des autres plates-formes. Chacun a ses avantages et ses inconvénients. Par exemple, les NN ne sont pas très doués pour gérer les données manquantes, ils ne sont pas très évolutifs sur le plan informatique et sont notoirement difficiles à interpréter. Pour ceux qui utilisent de tels modèles pour élaborer des théories, cette interprétation est importante. Les NN ne peuvent pas non plus gérer tous les types d’ensembles de données ou d’entrées non pertinentes. Mais le modèle ne contient aucune hypothèse et ceux-ci ont tendance à avoir une capacité prédictive élevée.
Mais, comme chaque méthode de modélisation présente un ensemble différent d'avantages/inconvénients, j'ai tendance à modéliser sur différentes plates-formes, puis à comparer les meilleurs modèles de chaque plate-forme les uns par rapport aux autres sur un nouvel ensemble de données pour voir lesquels sont les plus performants pour prédire l'évolution de la situation. nouvel ensemble de données et utilisez celui-là.
Cela étant dit, je viens de terminer la version 1.0 d'une interface graphique qui peut être exécutée à partir d'un bouton de menu JMP (pas seulement à partir de la table de données). Vous lui fournissez votre table de données et votre table de réglage, et en fonction de la méthode que vous choisissez parmi les quatre méthodes (NN, arbre boosté, forêt d'amorçage, XGBoost), il exécutera le nombre d'ajustements que vous lui envoyez en fonction de la table de réglage. Cela fonctionnera sur les différents types de données pour l'entrée Y et sur différents types de colonnes de validation, même sur plusieurs colonnes de validation pour la plateforme XGBoost. Ce n'est en aucun cas exempt de bugs, mais je suis très heureux de l'avoir fait fonctionner environ une semaine après la publication de la première interface graphique pour la plate-forme NN. Cela nécessite que l'utilisateur sache quelle table de réglage utiliser pour chaque plate-forme et d'autres exigences spécifiques à la plate-forme - comme il faut savoir que la plate-forme arborescente améliorée dans JMP ne fonctionne pas avec plus de 2 niveaux de données nominales/ordinales ( au moins avec JMP 15) ou que la plateforme XGBoost peut utiliser plusieurs colonnes de validation, mais chacune ne doit comporter que 2 niveaux.
C'était amusant de travailler sur ce projet et cela m'aidera dans mes efforts futurs. Merci!
Bonne chance,
DS
Re : créer plusieurs modèles de réseaux neuronauxJe pense qu'une partie de cela peut être liée au fait que, pour de nombreux types de modélisation, construire des modèles de plus en plus complexes n'est PAS ce que vous voulez faire : si un modèle simple correspond bien à vos données et que les valeurs RSME de validation ou de test sont bas, alors arrêtez-vous là. Mais pour NN, ajouter des couches, des nœuds, des boosts, des tours, etc., n'est pas forcément une MAUVAISe chose car, bien que plus complexes, ils sont aussi plus flexibles. Je peux donc en quelque sorte comprendre pourquoi avoir cette interface graphique pour TOUTES les plates-formes de modélisation peut conduire ceux qui ne sont pas familiers avec la modélisation à exploiter essentiellement des données de manière exhaustive et à leur détriment. D'après ma compréhension limitée de NN, cependant, si un modèle a un RSME de validation respectable dans les conditions par défaut de TanH = 3, un autre encore a 3 nœuds TanH, 3 linéaires et 3 gaussiens sur deux couches cachées, mais a un RSME similaire, vous ne rejetterez pas automatiquement ce dernier modèle car il est plus complexe mais tout aussi adéquat en termes de RSME, car il pourrait finir par être PLUS flexible pour les futurs ensembles de données de test. Par conséquent, il se pourrait très bien que la plupart des gens feraient bien de construire potentiellement des centaines, voire des milliers de modèles NN. Il est tout à fait possible, cependant, que je me trompe et que NN n'est pas différent des autres types de modélisation, dans lesquels, toutes choses étant égales par ailleurs, la simplicité est meilleure. Je me demande simplement pourquoi vous ne voyez pas plus de gens essayer d'optimiser les paramètres d'entrée NN : est-ce par ignorance ou par peur de l'exploration de données ?!
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Merci pour vos commentaires et vos aimables paroles. Ouais, j'ai aussi eu ce problème, à propos de l'extraction du mauvais tableau de données si ce n'est pas "au dessus". Je ne sais pas du tout pourquoi il fait cela. Il y a aussi quelque chose de génial dans la façon dont il réagit lorsque j'appelle certaines choses dans la nouvelle fenêtre pour les transmettre plus tard à la partie d'ajustement. Le bouton « Annuler » ne fonctionne pas comme je le souhaite, et le bouton « Aide » ne mène nulle part pour le moment, mais c'est un début ! Je pense qu'un expert en script pourrait facilement corriger ces bugs et le faire fonctionner comme prévu. Peut-être que lorsque j'aurai configuré les choses pour qu'il fonctionne sur plus de plates-formes et qu'il ne contienne pas ces bogues, je pourrais le publier sur la page du complément. Ce serait un honneur de l'intégrer à JMP.
Cela m'aide dans mon travail car cela rendra le processus de réglage de mes modèles encore plus automatisé et simplifié. J'avais voulu faire quelque chose pour la plate-forme NN, mais je le remettais à votre message, et maintenant que j'ai créé l'interface graphique, je souhaite développer cela pour la rendre plus interfonctionnelle. La possibilité d'ajuster un large ensemble de modèles et de se concentrer uniquement sur les statistiques aide réellement à réduire l'espace des hyperparamètres afin qu'il soit plus facile de comparer les modèles sur différentes plates-formes et de voir lequel est le meilleur pour prédire de nouvelles données. Ensuite, vous pouvez revenir en arrière et exécuter les paramètres optimaux dans la plate-forme standard et obtenir tous les commentaires graphiques riches fournis par JMP pour visualiser le modèle et tous les autres éléments.
Bonne chance!,
DS
Re : créer plusieurs modèles de réseaux neuronauxOuah! Maintenant, c'est vraiment génial. Le seul léger problème est que, si la fenêtre de script se trouve directement au-dessus de la table de « réglage », elle « appelle » la table de réglage dans la fenêtre du modèle au lieu de la table de données. Tant que la table de données et le script sont au premier plan de votre écran, les termes du modèle sont correctement chargés. En fait, je viens d'exécuter 100 modèles en quelques minutes seulement. Je me demande si vous pouvez mettre ceci sur le dépôt de "compléments" (j'ai oublié son nom réel) sur le site Web de JMP afin qu'il reçoive une attention plus large. Je suis certain que cela aiderait BEAUCOUP de personnes (sinon immédiatement, du moins à l'avenir, car davantage voient l'utilité de NN dans la construction de modèles). Bon sang, cela devrait probablement être intégré sous une forme ou une autre dans JMP Pro 17 (il sera peut-être trop tard pour la version 16). Merci beaucoup pour toute votre aide, et j'espère que cela aidera également vos propres recherches.
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
J'espère que la réinitialisation du JMP et/ou de l'ordinateur a fait l'affaire. Sinon, je suis également revenu et j'ai construit une interface graphique pour la modélisation NN - je prévois de l'étendre pour qu'elle fonctionne sur différentes plates-formes. Cela ne fonctionne pas parfaitement et j'obtiens parfois des erreurs étranges (un scripteur expert peut probablement le déboguer en quelques secondes). Mais ce qui est bien, c'est que cela fonctionnera avec tout type de colonne de données d'entrée - ordinale, nominale et continue, et qu'il fonctionne avec les méthodes de validation acceptables pour NN - lignes exclues, retenue, Kfold et colonne de validation. Il fonctionnera à la fois avec les colonnes de validation contenant des données de test et avec celles qui n'en contiennent pas. C'est le script appelé NN GUI dans votre table de données (ci-joint).
Pour ceux que cela intéresse, j'ai beaucoup emprunté sur un blog du personnel de JMP .@juliagong (à la retraite) ici et une note d'appui de .@Wendy_Murphrey ici . Je prévois de créer une interface graphique capable d'automatiser cela pour les autres plates-formes que j'ai également automatisées à partir des tables de données : arborescence boostée, forêt d'amorçage et XGBoost. J'ai l'intention de le publier dans la communauté, mais cela pourrait prendre un certain temps, notamment pour m'assurer qu'il est entièrement débogué.
Le seul changement entre le code ci-dessous et l'interface graphique dans la table de données est de changer dt = Data Table ("...") en dt = Current Data Table().
J'espère que cela vous aidera à progresser dans votre travail. C'est le cas pour moi, car je peux également améliorer cela pour faciliter mes efforts de modélisation !
Bonne chance,
DS
Code interface graphique NN :
Names Default To Here( 1 );
//Clear Symbols();
dt = Data Table( "Neural networking Ofav 2017 dataset" );
dt_parms = Data Table( "NN Tuning 8" );
nc = N Col( dt );
dtp_name = dt_parms << get name;
dt_name = dt << get name;
valid_list = {"Excluded Rows Holdback", "Holdback", "KFold", "Validation Column"};
//the width of the column list box in pixels
lbWidth = 110;
/* Expression to clear all current settings */
clearRoles = Expr(
colListY << RemoveAll;
colListV << RemoveAll;
);
/* Expression to store the current settings in global variables */
recallRoles = Expr(
::ycolRecall = colListY << GetItems;
::vcolRecall = colListV << GetItems;
);
VmethodDlg = New Window( "Choose Validation Type",
<<RETURN result=""> 0,
VMeth_Insert = "Validation(" || ":" || validCol[1] || ")";
If(
coltype == "Ordinal",
set = 1;
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
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" );,
coltype == "Nominal",
set = 2;
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
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" );,
coltype == "Continuous",
set = 3;
o_box = 3;
ncol_box_v = 2;
ncol_box_test = 3;
dt_results << New Column( "R² Training" );
dt_results << New Column( "R² Validation" );
dt_results << New Column( "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( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "SSE Training" );
dt_results << New Column( "SSE Validation" );
dt_results << New Column( "SSE Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
dt_results << New Column( "Sum Freq Test" );
);
);
If( VMeth == "Validation Column" & lvl == 0,
VMeth_Insert = "Validation(" || ":" || validCol[1] || ")";
If(
coltype == "Ordinal",
set = 1;
o_box = 3;
ncol_box_v = 10;
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" );,
coltype == "Nominal",
set = 2;
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
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" );,
coltype == "Continuous",
set = 3;
o_box = 3;
ncol_box_v = 2;
ncol_box_test = 3;
dt_results << New Column( "R² Training" );
dt_results << New Column( "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( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "SSE Training" );
dt_results << New Column( "SSE Validation" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
);
);
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( response_col ),
X(
:OFA...22_c0_g2_i1.p1,
:OFA...47_c0_g1_i1.p1,
:OFA...73_c1_g1_i3.p1,
:OFA...72_c1_g1_i1.p1,
:OFA...5_c1_g2_i15.p1,
:OFA...78_c2_g1_i3.p1,
:OFA...51_c4_g1_i1.p1,
:OFA...38_c0_g1_i8.p1,
:OFA...19_c0_g1_i1.p1,
:OFA...22_c2_g1_i4.p1,
:OFA...27_c1_g3_i5.p1,
:OFA...82_c3_g2_i3.p1,
:OFA...11_c1_g1_i7.p1,
:OFA...50_c2_g4_i1.p3,
:OFA...18_c1_g1_i7.p1,
:OFA...66_c2_g1_i3.p1,
:OFA...85_c0_g1_i2.p1,
:OFA...99_c5_g1_i6.p1,
:OFA...03_c2_g1_i1.p1,
:SYM...24_c0_g1_i1.p1,
:SYM...75_c0_g2_i1.p1,
:SYM...42_c0_g1_i1.p1,
:SYM...04_c0_g1_i1.p1,
:SYM...97_c0_g1_i1.p1,
:SYM...13_c0_g1_i1.p1,
:SYM...66_c0_g1_i1.p1,
:SYM...72_c0_g6_i1.p1,
:SYM...13_c0_g1_i1.p1 2,
:SYM...33_c0_g1_i1.p1 3,
:SYM...43_c0_g1_i1.p1,
:SYM...51_c0_g1_i1.p1,
:SYM...65_c0_g1_i1.p1 2
),
^VMeth_insert^,
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_name || " - " || "Neural of " || y_resp[1] );
T_stats = w[Outline Box( o_box ), Number Col Box( 1 )] << Get;
V_stats = w[Outline Box( o_box ), Number Col Box( ncol_box_v )] << Get;
If( VMeth == "Validation Column" & lvl > 0,
Test_stats = w[Outline Box( o_box ), Number Col Box( ncol_box_test )] << Get
);
report << Close Window;
If( coltype == "Ordinal",
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];
If( VMeth == "Validation Column" & lvl > 0,
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];
);
);
If( coltype == "Nominal",
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];
If( VMeth == "Validation Column" & lvl > 0,
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];
);
);
If( coltype == "Continuous",
dt_results:R² Training[i] = T_stats[1];
dt_results:RMSE Training[i] = T_stats[2];
dt_results:Mean Abs Dev Training[i] = T_stats[3];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[4];
dt_results:SSE Training[i] = T_stats[5];
dt_results:Sum Freq Training[i] = T_stats[6];
dt_results:R² Validation[i] = V_stats[1];
dt_results:RMSE Validation[i] = V_stats[2];
dt_results:Mean Abs Dev Validation[i] = V_stats[3];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[4];
dt_results:SSE Validation[i] = V_stats[5];
dt_results:Sum Freq Validation[i] = V_stats[6];
If( VMeth == "Validation Column" & lvl > 0,
dt_results:R² Test[i] = Test_stats[1];
dt_results:RMSE Test[i] = Test_stats[2];
dt_results:Mean Abs Dev Test[i] = Test_stats[3];
dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[4];
dt_results:SSE Test[i] = Test_stats[5];
dt_results:Sum Freq Test[i] = Test_stats[6];
);
);
);</RETURN>Re : créer plusieurs modèles de réseaux neuronauxHmmm, j'ai téléchargé votre nouveau tableau et maintenant j'obtiens l'erreur de la zone de contour à chaque fois. Je vais essayer un redémarrage JMP, puis un redémarrage de l'ordinateur. Cela semble étrange que cela fonctionne de votre côté mais pas du mien !
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Je reposte ceci car il semble que mon message original que j'ai essayé de modifier s'est perdu d'une manière ou d'une autre. Merci d'avoir partagé le tableau de données, cela a aidé à résoudre les problèmes.
Quoi qu'il en soit, j'ai apporté quelques modifications, donc quelques points à noter :
- J'ai fait en sorte qu'un seul code puisse s'exécuter sur les types de modélisation Ordinal, Nominal et Continu. Deux versions différentes ne sont plus nécessaires.
- Vous devrez éditer la variable y_resp, qui est la colonne de réponse Y en entrant le nom de la colonne entre guillemets (voir ligne 8). Vous n'avez plus besoin de le modifier lors de l'appel dans Neural(). Cependant, vous devrez toujours modifier la liste des X().
- Le code teste ensuite le type de modélisation de la colonne y_resp, définit certaines variables et génère les colonnes appropriées dans la table de données de sortie.
- La table de données de sortie reçoit désormais un nom en fonction du type de validation et de la table de données hôte. De cette façon, vous pouvez exécuter tous les types de validation, puis comparer sans avoir de problèmes de dénomination étranges de la part de JMP.
- J'ai édité chacun des différents scripts de type de validation que vous avez dans votre table de données, et ils peuvent facilement être copiés/collés dans de nouvelles tables de données. J'ai testé cela sur votre table précédente que vous avez envoyée et cela a très bien fonctionné.
- J'ai corrigé l'erreur que mon code écrivait dans le fichier journal à chaque exécution, je devais déplacer une parenthèse vers un nouvel emplacement.
- J'ai découvert que la raison pour laquelle votre retenue et mon k-fold ne fonctionnaient pas correctement, c'est que lorsque vous effectuez ce type, vous devez changer Validation() en Validation Method(). Je l'ai fait pour vos différentes méthodes et les scripts sont corrigés.
Donc ça s’améliore petit à petit, donc c’est bien. Je préférerais vraiment qu'il teste le type de colonne de réponse et la méthode de validation avant de générer les colonnes supplémentaires, mais je ne sais pas encore comment procéder. Peut-être que je modifierai cela pour le prochain déploiement !
Vous trouverez ci-dessous l'exemple de code pour la validation Kfold. J'ai également joint votre nouvelle table de données avec les scripts corrigés qui y sont enregistrés.
Names Default To Here( 1 );
dt = Current Data Table();
dt_parms = Data Table( "NN Tuning 8" );
dtp_name = dt_parms << get name;
dt_name = dt << get name;
//edit the line below so that it has the name of the column you want to model.
y_resp = "health designation";
response_col = Column( dt, Eval( Eval Expr( Expr( y_resp ) ) ) );
dt_results = dt_parms << Subset( Output Table( "Output of " || dtp_name || " with Kfold" || " for " || dt_name ), All rows, Selected Columns Only( 0 ) );
//This tests the response column type to automatically set the values for pulling the data out of the report window.
//It also will create the appropriate columns depending on the modeling type of the response column.
coltype = response_col << Get Modeling Type;
If( coltype == "Ordinal",
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
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" );
);
If( coltype == "Nominal",
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
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" );
);
If( coltype == "Continuous",
o_box = 3;
ncol_box_v = 2;
ncol_box_test = 3;
dt_results << New Column( "R² Training" );
dt_results << New Column( "R² Validation" );
//dt_results << New Column( "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( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
//dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "SSE Training" );
dt_results << New Column( "SSE Validation" );
//dt_results << New Column( "SSE 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( response_col ),
X(
:OFA...22_c0_g2_i1.p1,
:OFA...47_c0_g1_i1.p1,
:OFA...73_c1_g1_i3.p1,
:OFA...72_c1_g1_i1.p1,
:OFA...5_c1_g2_i15.p1,
:OFA...78_c2_g1_i3.p1,
:OFA...51_c4_g1_i1.p1,
:OFA...38_c0_g1_i8.p1,
:OFA...19_c0_g1_i1.p1,
:OFA...22_c2_g1_i4.p1,
:OFA...27_c1_g3_i5.p1,
:OFA...82_c3_g2_i3.p1,
:OFA...11_c1_g1_i7.p1,
:OFA...50_c2_g4_i1.p3,
:OFA...18_c1_g1_i7.p1,
:OFA...66_c2_g1_i3.p1,
:OFA...85_c0_g1_i2.p1,
:OFA...99_c5_g1_i6.p1,
:OFA...03_c2_g1_i1.p1,
:SYM...24_c0_g1_i1.p1,
:SYM...75_c0_g2_i1.p1,
:SYM...42_c0_g1_i1.p1,
:SYM...04_c0_g1_i1.p1,
:SYM...97_c0_g1_i1.p1,
:SYM...13_c0_g1_i1.p1,
:SYM...66_c0_g1_i1.p1,
:SYM...72_c0_g6_i1.p1,
:SYM...13_c0_g1_i1.p1 2,
:SYM...33_c0_g1_i1.p1 3,
:SYM...43_c0_g1_i1.p1,
:SYM...51_c0_g1_i1.p1,
:SYM...65_c0_g1_i1.p1 2
),
Validation Method ( \!"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 " || y_resp );
T_stats = w[Outline Box( o_box ), Number Col Box( 1 )] << Get;
V_stats = w[Outline Box( o_box ), Number Col Box( ncol_box_v )] << Get;
//Test_stats = w[Outline Box( o_box ), Number Col Box( ncol_box_test )] << Get;
report << Close Window;
If( coltype == "Ordinal",
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];
);
If( coltype == "Nominal",
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];
);
If( coltype == "Continuous",
dt_results:R² Training[i] = T_stats[1];
dt_results:RMSE Training[i] = T_stats[2];
dt_results:Mean Abs Dev Training[i] = T_stats[3];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[4];
dt_results:SSE Training[i] = T_stats[5];
dt_results:Sum Freq Training[i] = T_stats[6];
dt_results:R² Validation[i] = V_stats[1];
dt_results:RMSE Validation[i] = V_stats[2];
dt_results:Mean Abs Dev Validation[i] = V_stats[3];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[4];
dt_results:SSE Validation[i] = V_stats[5];
dt_results:Sum Freq Validation[i] = V_stats[6];
//dt_results:R² Test[i] = Test_stats[1];
//dt_results:RMSE Test[i] = Test_stats[2];
//dt_results:Mean Abs Dev Test[i] = Test_stats[3];
//dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[4];
//dt_results:SSE Test[i] = Test_stats[5]
//dt_results:Sum Freq Test[i] = Test_stats[6];
);
);
Faites-moi savoir si vous rencontrez d'autres problèmes et j'essaierai de les résoudre.
J'espère que cela t'aides!,
DS
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Merci d'avoir partagé le tableau de données. J'ai pu trouver quelques choses.
- J'ai découvert où se trouvait l'erreur, à savoir qu'il continue d'écrire dans la fenêtre du journal, et j'ai corrigé ce problème. C'est dans l'appel str. J'ai dû déplacer une parenthèse vers un autre emplacement.
- J'ai découvert que lorsque vous effectuez un K-fold ou Holdback, vous devez remplacer Validation() par Validation Method(). Ensuite, il fonctionne et proportionne les données de manière appropriée.
- J'ai recodé la façon dont il teste le type de modélisation de la colonne et apporté quelques modifications associées.
- Je l'ai également écrit pour que le même code puisse être utilisé pour Nominal, Ordinal et Continu. Cela peut être fait simplement en modifiant la variable y_resp -- le nom de la colonne de réponse Y. Il fait tout le reste automatiquement.
- J'ai également ajouté un titre à la table de données de résultats qui change avec la table de données "hôte" et le type de validation afin que vous puissiez exécuter les trois méthodes et qu'il n'y ait aucune interférence de dénomination de la part de JMP.
- Les trois scripts d'ajustement NN de votre table de données peuvent désormais être copiés-collés d'une table de données à la suivante sans problème. Je l'ai testé avec le premier tableau de données que vous avez envoyé et cela a très bien fonctionné.
Cela devient un peu plus automatisé maintenant et est un peu amélioré. Je préférerais qu'il vérifie la méthode de validation, puis génère les colonnes supplémentaires et attribue des valeurs en conséquence. Peut-être lors du prochain déploiement !
Voici à quoi ressemble le code en général. Notez que je testais la colonne de température pour vérifier les types de modélisation continue.
Names Default To Here( 1 );
dt = Current Data Table();
dt_parms = Data Table( "NN Tuning 8" );
dtp_name = dt_parms << get name;
dt_name = dt << get name;
//edit the line below so that it has the name of the column you want to model.
y_resp = "temperature (1, 2, 3)";
response_col = Column( dt, Eval( Eval Expr( Expr( y_resp ) ) ) );
dt_results = dt_parms << Subset( Output Table( "Output of " || dtp_name || " with (validation type)" || " for " || dt_name), All rows, Selected Columns Only( 0 ) );
//This tests the response column type to automatically set the values for pulling the data out of the report window.
//It also will create the appropriate columns depending on the modeling type of the response column.
coltype = response_col << Get Modeling Type;
If( coltype == "Ordinal",
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
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" );
);
If( coltype == "Nominal",
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
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" );
);
If( coltype == "Continuous",
o_box = 3;
ncol_box_v = 2;
ncol_box_test = 3;
dt_results << New Column( "R² Training" );
dt_results << New Column( "R² Validation" );
dt_results << New Column( "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( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "SSE Training" );
dt_results << New Column( "SSE Validation" );
dt_results << New Column( "SSE 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( response_col ),
X(
:OFA...22_c0_g2_i1.p1,
:OFA...47_c0_g1_i1.p1,
:OFA...73_c1_g1_i3.p1,
:OFA...72_c1_g1_i1.p1,
:OFA...5_c1_g2_i15.p1,
:OFA...78_c2_g1_i3.p1,
:OFA...51_c4_g1_i1.p1,
:OFA...38_c0_g1_i8.p1,
:OFA...19_c0_g1_i1.p1,
:OFA...22_c2_g1_i4.p1,
:OFA...27_c1_g3_i5.p1,
:OFA...82_c3_g2_i3.p1,
:OFA...11_c1_g1_i7.p1,
:OFA...50_c2_g4_i1.p3,
:OFA...18_c1_g1_i7.p1,
:OFA...66_c2_g1_i3.p1,
:OFA...85_c0_g1_i2.p1,
:OFA...99_c5_g1_i6.p1,
:OFA...03_c2_g1_i1.p1,
:SYM...24_c0_g1_i1.p1,
:SYM...75_c0_g2_i1.p1,
:SYM...42_c0_g1_i1.p1,
:SYM...04_c0_g1_i1.p1,
:SYM...97_c0_g1_i1.p1,
:SYM...13_c0_g1_i1.p1,
:SYM...66_c0_g1_i1.p1,
:SYM...72_c0_g6_i1.p1,
:SYM...13_c0_g1_i1.p1 2,
:SYM...33_c0_g1_i1.p1 3,
:SYM...43_c0_g1_i1.p1,
:SYM...51_c0_g1_i1.p1,
:SYM...65_c0_g1_i1.p1 2
),
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 " || y_resp );
T_stats = w[Outline Box( o_box ), Number Col Box( 1 )] << Get;
V_stats = w[Outline Box( o_box ), Number Col Box( ncol_box_v )] << Get;
Test_stats = w[Outline Box( o_box ), Number Col Box( ncol_box_test )] << Get;
report << Close Window;
If( coltype == "Ordinal",
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];
);
If( coltype == "Nominal",
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];
);
If( coltype == "Continuous",
dt_results:R² Training[i] = T_stats[1];
dt_results:RMSE Training[i] = T_stats[2];
dt_results:Mean Abs Dev Training[i] = T_stats[3];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[4];
dt_results:SSE Training[i] = T_stats[5];
dt_results:Sum Freq Training[i] = T_stats[6];
dt_results:R² Validation[i] = V_stats[1];
dt_results:RMSE Validation[i] = V_stats[2];
dt_results:Mean Abs Dev Validation[i] = V_stats[3];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[4];
dt_results:SSE Validation[i] = V_stats[5];
dt_results:Sum Freq Validation[i] = V_stats[6];
dt_results:R² Test[i] = Test_stats[1];
dt_results:RMSE Test[i] = Test_stats[2];
dt_results:Mean Abs Dev Test[i] = Test_stats[3];
dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[4];
dt_results:SSE Test[i] = Test_stats[5];
dt_results:Sum Freq Test[i] = Test_stats[6];
);
);Faites-moi savoir s'il y a d'autres problèmes.
Merci!,
DS
Re : créer plusieurs modèles de réseaux neuronauxC'est étrange. Si je continue simplement à exécuter le script, cela finira par fonctionner !
Autre chose étrange : peu importe ce que je modifie le pourcentage de retenue, cela me donne toujours 11 entraînements contre 9 validations (~55/45 %). N'est-il pas possible de faire, disons, 70/30 % ? J'ai le fort sentiment que c'est parce que j'ai simplement mal saisi la commande, plutôt que que ce soit impossible !
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
L'erreur de la zone de contour provient probablement du moment où il tente de récupérer les valeurs statistiques de la fenêtre NN. Pouvez-vous partager la nouvelle table de données et le nouveau code avec moi ? Je peux le dépanner et voir si je peux faciliter le portage d'une table de données à une autre.
Je pense que cela pourrait avoir à voir avec la façon dont j'ai configuré la partie pour vérifier le type de colonne de données et pour donner à la variable ncol_box une valeur différente. Si elle est nominale, cette valeur est différente de si elle est ordinale, ou même numérique.
Si vous pouvez partager la table de données et le code avec lesquels vous obtenez cette erreur, je suis sûr de pouvoir la corriger. Si vous le souhaitez, vous pouvez anonymiser la table de données : Tables > Anonymiser.
DS
Re : créer plusieurs modèles de réseaux neuronauxD'accord, super. Cela répond à quelques questions supplémentaires que je me posais. Maintenant, la seule chose avec laquelle j'ai du mal, 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 plan, à laquelle vous faites allusion dans les commentaires du script. "caractère attendu arg 1 lors de l'accès ou de l'évaluation de la boîte de contour." Qu'est-ce que cela signifie?? J'ai augmenté et diminué les nombres, mais je reçois 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. Peut-être que cela signifie que j'ai besoin d'une boîte de contour plus grande ?Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Si vous revenez en arrière et examinez le script, la deuxième ligne définit quelle table de données doit être utilisée lors de 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 de devoir 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, « NN tuning ». Ces deux tableaux sont en réalité les seules choses que vous alimentez dans le script. Le reste est entièrement interne.
Si vous copiez/collez le code JSL dans une nouvelle table de données, cela 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 indique à 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 du rapport NN, ainsi que le Regex() en dessous. Enfin, selon que vous aurez ou non l'ensemble de données "test" dans une colonne de validation, vous souhaiterez soit commenter (avec la commande // en début de 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.
En ce qui concerne votre dernière question, cela dépend en quelque sorte de la manière 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 alors de modifier Y() et X( ) que vous utilisez comme prédicteurs et réponses pour faire correspondre les noms de colonnes de la nouvelle table de données. Vous devrez bien sûr avoir ouvert la table "NN tuning". D'un autre côté, si vous l'exécutez en tant que script distinct, vous souhaiterez peut-être modifier la définition de dt de dt = Current Data Table() à dt = Data Table (" "), où vous insérerez 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 permettant d'exécuter un modèle Neural Net sur une table de données spécifiée. La commande "<<" permet d'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 column. Là où il est indiqué dt_results << New Column(), le code demande à JMP de créer une nouvelle colonne pour l'objet dt_results, qui correspond au 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 : créer 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 pouvoir copier et coller le script et 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 tables de données, dont l'une est nommée "Neural ?" Peut-être que j'ai raté cette partie !
Re : créer plusieurs modèles de réseaux neuronauxHeureux d'apprendre que ça marche pour toi. Bonne chance pour la modélisation ! Vous souhaiterez peut-être é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éer plusieurs modèles de réseaux neuronauxWow, je n'arrive pas à croire que j'ai exécuté 300 modèles de réseaux neuronaux avant le déjeuner grâce à votre aide en matière de script. J'espère que cela sera repris et "félicité", car j'imagine que 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 faites pas vraiment. savoir où « plonger » en ce qui concerne la quantité ahurissante de paramètres d'entrée du modèle NN qui peuvent être légèrement modifiés (entraînant 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). Je dois absolument être prudent étant donné la petite taille (actuellement) de mon échantillon (dans l'espoir d'utiliser ces données préliminaires pour obtenir des fonds pour ajouter plus de « lignes », c'est-à-dire des coraux).
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Kfold est également un autre excellent moyen de valider un court ensemble de données. 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 que vous ne l'avez pas dans le même tableau de données que les données de formation 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 éditée avec un paramètre de validation 5-Kfold pour la plateforme NN.Cela devrait fonctionner, ça l'a fait 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éer plusieurs modèles de réseaux neuronauxEncore d'excellentes suggestions, notamment concernant le type de validation. Je vois que Neural prend en charge la retenue, le Kfold ou l'exclusion de lignes (je suppose que je choisirais simplement au hasard quelques lignes à laisser de côté). Si je voulais changer le script pour changer le type de validation, est-ce que je changerais simplement la ligne "Validation ( :Validation with test)" ? Et les échantillons retenus seraient-ils équivalents aux yeux de JMP à des é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éer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Heureux que cela ait résolu votre problème.
Avec la modélisation arborescente (XGBoost, arbres boostés et forêt d'amorçage), vous pouvez facilement utiliser l'interface graphique de la table de réglage dans JMP pour exécuter de nombreux modèles. Mais l’inconvénient est qu’il consomme 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 cela ne consomme pas beaucoup de RAM, juste la consommation du processeur. J'ai exécuté jusqu'à 40 000 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 processeur 2 GHz).
Je suis également l'un des premiers utilisateurs du JMP 16, et la sélection des modèles est intéressante, mais comme vous le soulignez, il ne s'agit de régler aucun des modèles, ce qui peut être un peu trompeur. Il utilise simplement les paramètres par défaut, qui ne sont pas toujours les meilleurs paramètres pour créer un modèle prédictif. Cela pourrait au moins vous aider à déterminer quelles plates-formes valent la peine d'être optimisées et lesquelles ne valent pas la peine d'être étudiées.
Vous souhaiterez peut-être également envisager la plate-forme SVM pour modéliser vos données nominales, car elle est également censée être une bonne méthode pour ce type de données.
Quant au simulateur, c'est quelque chose de différent et il s'agit d'un moyen de tester les estimations avec différentes conditions initiales (randomisation). Cela donne une distribution de valeurs pour l'estimation et vous donne un intervalle de confiance pour l'estimation originale 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 effectuer une conception factorielle ou même exécuter une conception remplissant l'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 procéder à une sélection des prédicteurs ou d'amorcer les prédicteurs pour voir si vous avez réellement besoin des 89 d'entre eux ou si vous ne pouvez réellement utiliser qu'un sous-ensemble plus petit.
Enfin, puisque vous disposez d'un tableau de données court et large, vous souhaiterez peut-être envisager, au lieu d'utiliser une colonne de validation, d'adopter une approche Leave one Out pour la validation. Si vous faites cela, vous devrez modifier le script pour cela.
Bonne chance!,
DS
Re : créer plusieurs modèles de réseaux neuronauxAh ! Merci beaucoup de l'avoir refait pour moi. Je n'ai clairement aucune connaissance en script, alors j'ai juste changé "Neural" par le nom de ma table de données... ce qui ne fonctionnerait évidemment pas. Une fois que j'ai changé le nom de ma table de données en "Neural", ajouté les colonnes Test et apporté les autres modifications que vous avez recommandées, cela a fonctionné.
Maintenant, ce que je pourrais faire, c'est utiliser DOE pour créer une conception factorielle conditionnelle (puisque, comme vous l'avez noté, vous ne pouvez pas booster avec plusieurs couches cachées) et exécuter quelques centaines de modèles sur mon ordinateur de travail (afin de ne pas trop taxer mes 8 -Go RAM ordinateur 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, dispose d'un très bon outil de « sélection de modèles », mais je pense qu'il teste tous les types de modélisation (par exemple, PLS ou Gen-Reg), et non DANS les milliers de modèles potentiels qui pourraient être construit dans chaque type de modélisation (sinon il risque de 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 génère pas 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 de temps !
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
Merci d'avoir partagé le tableau de données, cela a aidé à déboguer les modifications que vous avez apportées dans le script.
Quelques choses que j'ai remarquées :
- 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 d'imax, qui correspond au nombre de lignes de la table des paramètres.
- Vous avez également accidentellement modifié l'appel à la plateforme NN où dans le script il est indiqué 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 remplacé par 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 l'inclut dans le nom de la fenêtre, il doit donc être dans les deux la commande GetName et l'instruction IF en dessous. Mais cela n'est vrai que lors de la modélisation avec un seul X. Si vous en utilisez plusieurs, vous n'avez pas besoin d'avoir le "by..." dans le nom de la fenêtre ou l'instruction IF.
- La dernière partie consiste à s'assurer que les statistiques des données de formation, 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 jointe au script modifié). Cela fonctionne avec la table NN Tuning que j'ai donnée plus tôt.
Si vous comptez réellement utiliser les 86 colonnes, vous devez les insérer manuellement dans la partie X(col1, col2,...) du script. Vous devez ensuite également modifier la partie GetName car elle n'inclura pas les 86 noms, ce sera simplement 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éer 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 (ci-jointes) et effectué toutes les mises à jour nécessaires (j'ai utilisé trois échantillons de formation+validation+test). Si vous exécutez le dernier script (« comparaison de réseaux de neurones »), il construira la nouvelle table, mais aucune analyse n'est exécutée. Je viens d'inclure quelques termes X, mais il s'agira en fait des 86 colonnes du groupe « données standardisées ». Lorsque j'utilise le débogueur, il me dit que quelque chose ne va pas avec le
" Pour ( je = 1 , i <= imax, i++", zone. J'espère/je suppose qu'un scénariste plus compétent pourra probablement trouver le problème en quelques secondes !
Re : créer plusieurs modèles de réseaux neuronauxOui! C'est exactement ce que je veux : un tableau 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 plateforme NN. Je ne l'ai pas encore essayé, et j'imagine que cela prendra un certain temps, mais j'utilise un petit ensemble de données "pratique" de prédicteur de 20 échantillons x 90, donc cela pourrait être faisable. En réalité, j'ai seulement constaté que le type d'activation et le nombre de nœuds (ainsi que le nombre de tours) réduisaient réellement mon RMSE, le boosting n'aidant pas beaucoup. Mais même dans ce cas, cela sera beaucoup plus rapide que de réaliser les environ 500 modèles que j'avais prévu d'exécuter (pas autant que ce que j'avais prévu d'exécuter hier, heureusement puisque je veux rester sous 4 nœuds/type d'activation). Je vais l'essayer demain et je ferai savoir à tout le monde comment ça se passe.
Re : créer plusieurs modèles de réseaux neuronauxSalut @abmayfield ,
C'était quelque chose que je voulais écrire depuis un moment et c'était vraiment amusant, et votre message a donné le feu nécessaire pour le faire démarrer, merci ! Je voulais depuis un moment avoir un moyen de régler la plate-forme NN 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 modèles afin d'automatiser leurs processus de réglage, par exemple l'arborescence boostée, 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 quelques-uns sur les scripts et que vous saurez où adapter ces scripts à vos situations spécifiques/structure de données/noms de colonnes, etc. J'ai entré quelques commentaires pour essayer d'aider à 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 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 NN nominal/ordinal. J'ai fait du nominal sur :sex en utilisant :age, :weight:, :height, puis j'ai changé :age d'Ordinal à Continu et modélisé l'âge avec :weight et :sex pour le réglage continu NN.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 à la table de données en stratifiant sur :age, histoire de vérifier que tout fonctionnait correctement.
Je suis sûr que quelqu'un d'autre pourrait le scripter de manière plus élégante pour tester la colonne d'entrée Y() pour qu'elle soit de type modélisation 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 modifier les entrées Y() et X() dans la section dt << Nerual() ainsi que dans la partie où vous obtenez le nom de la fenêtre de rapport, car elle porte le nom de la variable que vous modélisez.
Les tables de réglage NN pourraient en principe être traitées comme un DOE remplissant l'espace, où les paramètres inférieurs et supérieurs correspondent à ce que vous souhaitez définir, à l'exception de certains d'entre eux, comme N_Layers ne peut être que 1 ou 2 car JMP n'en autorise que 1 ou 2. couches. Penalty_Method concerne uniquement les options valides dans la plate-forme NN, et Transform Covariate et Robust Fit ne prennent que des valeurs de 0 ou 1 (off ou on). 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, c'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 reçu de mes autres plates-formes. Je ne peux pas comprendre d'où vient cet avertissement, mais il fonctionne toujours correctement. Peut-être que quelqu'un peut corriger cette partie de mon code ?
Inattendu ",". Il manque peut-être un ")".
Essayer d'analyser l'opérande pour l'opérateur "<<".
Ligne 23 Colonne 10 : ))►,
Enfin, faites attention aux paramètres car l'exécution de la modélisation peut prendre TRÈS longtemps si vous avez un grand nombre de boosts, de tours ou de fonctions de transfert. Faites juste attention à ne pas en faire trop.
J'espère que cela t'aides!,
DS
Re : créer plusieurs modèles de réseaux neuronauxBTW, l'astuce "option" pour que toutes les fonctionnalités pertinentes affichent 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 neuronauxMarc, merci pour vos suggestions. Le deuxième, j'ai essayé et échoué. Je connais l'option « transformer en table combinée » sur d'autres plates-formes, mais peut-être qu'elle a été exclue de la plate-forme neuronale pour une raison quelconque. Étrangement, l'astuce "option", par laquelle vous maintenez la touche option enfoncée, effectuez une sélection, et elle s'applique à toutes les parties du rapport, ne fonctionne ni dans la plateforme neuronale, ni dans le cas contraire, cela pourrait accélérer les choses.
Ce serait cool si je pouvais avoir mes paramètres de réseau neuronal (# nœuds, #tours, etc.) sous forme de X dans un DOE, dans le but de minimiser RSME, mais cela ne semble pas possible à cause de la façon dont vous devez saisir le paramètres dans les cases particulières lors du lancement du modèle neuronal. Il faudrait 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 connaît un moyen par lequel 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 total général), je l'apprécierais grandement. En d'autres termes, les valeurs du premier tableau de capture d'écran devraient être placées dans les zones de saisie appropriées de la deuxième capture d'écran (c'est-à-dire le lancement du modèle neuronal).
Re : créer 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 du RMSE, puis utiliser le modèle pour optimiser les paramètres. En outre, vous pouvez créer chaque modèle tour à tour, puis extraire tous les résultats en même temps en cliquant avec le bouton droit sur l'un des tableaux de résultats et en sélectionnant Créer dans un tableau combiné.