| Conférencier |
Transcription |
| Lucas |
D'accord, merci à tous d'être venus écouter ma présentation. Je m'appelle Lucas Beverlin. Je suis statisticien chez Intel. |
| |
Et aujourd'hui, je vais parler de l'utilisation de JMP pour comparer des modèles de différents environnements. |
| |
D'accord, donc actuellement, JMP 15 Pro est le dernier et le meilleur que JMP ait sorti et si vous souhaitez adapter le modèle, ils disposent de plusieurs outils différents pour le faire. |
| |
Il existe la plateforme de modélisation d'ajustement, la plateforme neuronale pour la partition de réseaux neuronaux, la plateforme pour la classification et la régression d'arbres, la plateforme non linéaire pour la modélisation non linéaire, et bien d'autres encore. |
| |
Et donc dans JMP 15, je pense qu'il est sorti en 12 ou 13, mais cette plateforme de comparaison de modèles est un outil très astucieux que vous pouvez utiliser pour comparer |
| |
Les ajustements de modèles proviennent de différentes plateformes JMP. Si vous avez un arbre et un réseau de neurones et que vous hésitez sur lequel est le meilleur, vous pouvez alterner entre les deux. Mais avec ceci… |
| |
Tout est sur le même écran. C'est très rapide et facile à comprendre : « Cela vaut-il mieux que cela ? » |
| |
Ceci étant dit, JMP s'adapte à beaucoup de choses, mais malheureusement, il ne peut pas tout faire. Voici donc quelques exemples de choses qui ne s'y adaptent pas. Par exemple : |
| |
ceux qui font beaucoup d'apprentissage automatique et d'IA pourraient s'adapter à quelque chose comme un encodeur automatique ou un réseau neuronal convolutif qui nécessite généralement de nombreuses fonctions d'activation ou oui, de nombreux nœuds de couches cachées, |
| |
d'autres fonctions d'activation que celles proposées par JMP, donc JMP ne sera pas en mesure de faire beaucoup de cela dans JMP. |
| |
Une autre méthode est la régression par projection-poursuite. Une autre méthode est la régression adaptative multivariée par splines. JMP ne peut malheureusement pas faire certaines choses. |
| |
R, Python et MATLAB. |
| |
Il y en a plusieurs autres, |
| |
Mais je vais me concentrer sur ces trois-là. Ceci étant dit, les idées que je vais aborder ici doivent être intégrées en C++, Java, Rust ou tout autre langage. |
| |
Cela me vient à l'esprit, vous devriez pouvoir en utiliser beaucoup. |
| |
Comme je l'ai dit, nous pouvons également utiliser la plateforme de comparaison de modèles pour comparer d'autres logiciels. De quoi avez-vous besoin ? |
| |
Les deux éléments principaux dont vous aurez besoin sont les prédictions du modèle provenant du logiciel que vous utilisez pour ajuster le modèle. |
| |
Et généralement, lorsque nous effectuons l'ajustement du modèle, en particulier avec des modèles plus grands, vous pouvez diviser les données en ensembles de validation d'entraînement et/ou de test. |
| |
Vous aurez besoin de quelque chose qui indique à tous les logiciels ce qui est en cours de formation, ce qui est en cours de validation, ce qui est en cours de test, car vous voudrez que ces éléments soient cohérents lorsque vous comparerez les ajustements. |
| |
OK, donc la principale raison pour laquelle j'ai choisi R, Python et MATLAB pour cette conférence est qu'il s'avère que JMP et le langage de script peuvent réellement créer leurs propres sessions de R et exécuter du code à partir de celles-ci. |
| |
Donc cette image ici montre très rapidement si je voulais adapter un modèle de régression linéaire à une sortie |
| |
Concernant les données sur le logement à Boston, je travaillerai plus en détail sur ces données plus tard. |
| |
Mais si vous souhaitez ajuster très rapidement un modèle de régression linéaire dans R et obtenir les valeurs prédictives, c'est possible. Bien sûr, vous pouvez utiliser JMP. Mais pour vous donner une idée très simple, |
| |
Donc, |
| |
une chose à noter, j'utilise donc R 3.6.3 mais JMP peut tout gérer tant que c'est supérieur à 2.9. |
| |
De même, Python vous permet d'appeler votre propre session Python. L'image ci-dessous montre comment j'ajuste la régression linéaire avec Python. Je ne vais pas détailler toutes les lignes de code ici, mais vous avez saisi l'idée de base. |
| |
Bien sûr, soyez prudent avec Python, car la dernière version est 3.8.5. Cependant, si vous utilisez Anaconda pour installer des éléments, JMP rencontre des difficultés à communiquer avec lui lorsqu'il est supérieur à 3.6. |
| |
puisque j'utilise la version 3.6.5 pour cette démonstration. |
| |
Et enfin, nous pouvons également créer notre propre session MATLAB. |
| |
J'utilise donc MATLAB 2019b. Mais si votre version de MATLAB est sortie il y a sept ou huit ans, elle devrait fonctionner correctement. |
| |
Bon, comment relier tout cela ? Nous allons examiner un processus en quatre étapes. Tout d'abord, nous voulons ajuster chaque modèle. Nous envoyons donc à chaque logiciel les données et l'ensemble de chaque observation. |
| |
Une fois les modèles ajustés, nous souhaitons générer ces ajustements et leurs prédictions et les ajouter à une table de données que JMP peut consulter. |
| |
Alors, bien sûr, mon avertissement est le suivant : assurez-vous de nommer les éléments qui permettent de savoir où et comment vous avez intégré le modèle. J'ai des exemples des deux. |
| |
Troisième étape : selon le modèle, vous pourriez vouloir examiner certains diagnostics. Ce n'est pas parce qu'un modèle semble bien correspondre aux chiffres qu'il suffit d'observer votre courbe résiduelle, par exemple, pour découvrir rapidement que |
| |
la zone d'intérêt le plus important n'est pas très bien adaptée. |
| |
Ou alors il y a un problème avec les résidus, etc. Nous allons donc montrer comment générer ce genre de données. |
| |
Et enfin, nous utiliserons la plateforme de comparaison de modèles, vraiment, pour rassembler tout dans un grand tableau afin de comparer les chiffres, beaucoup plus facilement que de faire des allers-retours. |
| |
Bon, nous allons maintenant détailler les étapes. Pour la première étape, celle de l'ajustement du modèle, nous avons essentiellement deux options. Tout d'abord, nous pouvons demander à JMP, via JSL, d'appeler le logiciel de votre choix. |
| |
Envoyez-lui les données et le code pour l'adapter. Je vais donc m'en éloigner un instant et faire exactement cela. |
| |
Vous voyez donc ici, j'ai du code pour appeler R. |
| |
Une fois terminé, j'appellerai Python, puis MATLAB, et j'assemblerai le tout. Je reviendrai plus en détail sur le code dans un instant, mais son exécution prendra probablement trois ou quatre minutes. Je vais donc m'en occuper maintenant. |
| |
Et nous reviendrons vers lui quand nous serons prêts. |
| |
Notre autre option consiste à créer un ensemble de données avec la validation. Nous créons un ensemble de données avec la colonne de validation et/ou une colonne de test, selon le nombre de colonnes. |
| |
Les ensembles divisent nos données. Nous sommes programmés pour fonctionner avec le logiciel dont nous avons besoin, et bien sûr, nous obtenons le résultat souhaité. |
| |
Alors, bien sûr, quelques avertissements. Assurez-vous que… quel que soit le logiciel que vous utilisez, il dispose réellement de ce dont vous avez besoin pour adapter le modèle. |
| |
Assurez-vous que le modèle est bien ajusté avant d'essayer de le comparer à d'autres objets. |
| |
Assurez-vous que le format de sortie est lisible par JMP. Heureusement, JMP peut lire un certain nombre de choses, ce n'est donc pas le plus important des quatre avertissements. |
| |
Mais comme je vous l’ai déjà prévenu, assurez-vous que les prédictions de chaque modèle correspondent aux observations correctes de l’ensemble de données d’origine. |
| |
Et cela revient donc à la question de savoir si c'est un entraînement, si c'est une observation d'entraînement, lorsque vous l'intégrez dans JMP, |
| |
Il est préférable que ce soit une observation d'entraînement lorsque vous l'intégrez au logiciel utilisé. S'il s'agit d'une validation dans JMP, la validation se fera ailleurs. S'il s'agit d'un test dans JMP, il sera testé ailleurs. |
| |
Assurez-vous donc que tout correspond bien, car la dernière chose que nous souhaitons, c'est de regarder des ensembles de tests et de nous dire : « Oh, celui-ci correspond bien mieux. » Eh bien, c'est parce que les observations qui y correspondent étaient pondérées différemment et ne présentaient pas de valeurs aberrantes réelles. Cela finit par fausser votre raisonnement. |
| |
un mot d'avertissement, excusez-moi, un mot d'avertissement là. |
| |
OK. Comme je l'ai mentionné, j'ai un exemple que j'exécute actuellement en arrière-plan. Je souhaite donc détailler ce que je fais. |
| |
Il s'avère que je vais intégrer les réseaux neuronaux dans R, Python et MATLAB. Pour ce faire, je dois installer deux packages dans R en plus de l'installation de base : Keras et Tensorflow. |
| |
numpy, pandas et matplotlib. |
| |
J'utilise donc Numpy pour effectuer des calculs assez facilement ; Pandas pour manipuler des données ; et Matplotlib devrait être assez simple pour créer des graphiques. Enfin, dans MATLAB, j'utilise la boîte à outils d'apprentissage profond, que vous y ayez accès ou non. |
| |
OK. Deuxième étape : nous souhaitons ajouter des prédictions à la table de données JMP. Si vous utilisez JMP pour appeler le logiciel, vous pouvez utiliser du code JSL pour récupérer ces prédictions et les ajouter à une table de données afin de pouvoir les comparer ultérieurement. |
| |
L'autre façon de procéder est que le logiciel s'exécute tout seul et enregistre la sortie. Vous pouvez rapidement dire à JMP : « Hé, va extraire ce fichier de sortie, puis fais quelques manipulations pour importer les prédictions dans la table de données dans laquelle tu stockes tes résultats. » |
| |
Nous pouvons maintenant lire les tracés de diagnostic. Dans ce cas, je les enregistre généralement sous forme de fichiers graphiques. Pour ma part, ce sera au format PNG. Mais bien sûr, quel que soit le format, |
| |
Les graphiques que vous pouvez utiliser. JMP ne peut pas tout gérer, mais je crois que le PNG est compatible avec les JPG et autres, et qu'il couvre vos besoins habituels. |
| |
Donc la deuxième note que j'utilise pour la plateforme de comparaison de modèles, mais pour aider à identifier ce que vous... quel modèle vous correspondez et où vous le correspondez, |
| |
Je recommande généralement d'ajouter la propriété suivante pour chaque colonne de prédiction ajoutée. Nous voyons ici que nous envoyons la table de données concernée, cette propriété appelée « prédiction ». |
| |
Et donc ici, nous avons tout ce que vous utilisez pour prédire les choses (maintenant, ici en valeur n'est probablement pas le meilleur choix ici) mais |
| |
Mais avec ce créateur, cela me dit : « Hé, quel logiciel j'ai utilisé pour créer ce modèle ? » J'ai donc utilisé R. Il affiche R, donc cela tient à l'écran. Python et MATLAB étaient un peu trop longs, mais on peut y mettre la chaîne de caractères de son choix. |
| |
Vous les verrez lorsque je passerai en revue le code un peu plus en détail ici sous peu. |
| |
Cela s'avère pratique car je vais également intégrer plusieurs modèles dans R plus tard. Ainsi, si je choisis correctement les noms de colonnes et que j'en ai plusieurs là où R les a créées, je sais toujours quel modèle je regarde. |
| |
Ok, voici à quoi ressemble la boîte de dialogue de comparaison de modèles typique. |
| |
Voici à quoi cela ressemblerait si je pointais et cliquais à la fin de l'ajustement du modèle. Vous voyez que j'ai plusieurs prédicteurs : des réseaux neuronaux pour MATLAB, Python et R. |
| |
Différentes formes de prédiction ; j'ai utilisé JMP pour adapter quelques éléments. |
| |
Souvent, ce que les gens font, c'est qu'ils mettent cette colonne de validation en tant que groupe, |
| |
afin de regrouper la validation de l'entraînement et le test. En fait, j'apprécie un peu mieux le résultat quand je l'insère dans l'instruction By. Je le montrerai ici un peu plus tard. Mais vous pouvez le placer soit dans l'une, soit dans l'autre. |
| |
mais pour faire court, j'aime mieux le résultat de cette façon. |
| |
C'est donc la principale raison pour laquelle je peux maintenant le voir clairement, ce sont toutes les formations, |
| |
ce sont toutes les validations (ne devraient pas être vues par les en-têtes) et ce sont tous les tests. |
| |
Si vous utilisez la validation comme variable de groupe, vous obtiendrez un grand tableau contenant 21 entrées. Il y aura alors une colonne supplémentaire : « Test de validation d'entraînement » ou, dans mon cas, « 012 », mais |
| |
De cette façon, avec les mots, je n'ai pas besoin de réfléchir trop longtemps. Je n'ai pas besoin d'expliquer à qui que ce soit ce que signifie 012, etc. C'est pourquoi j'ai fait ce choix. |
| |
Dans l'exemple que je vais détailler, j'utiliserai l'ensemble de données classique sur le logement à Boston. Il est inclus dans JMP. C'est pourquoi je ne l'ai pas inclus dans ma présentation, car si vous utilisez JMP, vous l'avez déjà. |
| |
Harrison et Rubinfeld disposaient donc de plusieurs facteurs prédictifs de la valeur médiane de la maison, tels que le taux de criminalité par habitant, la proportion d'acres de commerces non commerciaux par ville, |
| |
nombre moyen de chambres dans ce que vous essayez d'acheter, ratio élèves/enseignants par ville (donc s'il y a beaucoup d'enseignants et pas autant d'étudiants, cela signifie généralement qu'une meilleure éducation est ce que beaucoup de gens recherchent) |
| |
(trouvé) et plusieurs autres. Je ne vais pas vraiment essayer de les passer en revue tous les 13 ici. |
| |
Bon, laissez-moi vous donner un peu de contexte concernant les modèles que j'ai étudiés ici. Ensuite, je vais me plonger dans le code JSL et voir comment j'ai tout intégré. |
| |
J'ai examiné quelques modèles. Tout d'abord, le modèle de régression linéaire par excellence. Vous voyez ici une régression linéaire simple. J'ai simplement ajusté la valeur médiane, apparemment par taux d'imposition. |
| |
Mais bien sûr, j'utiliserai une régression linéaire multiple et je les utiliserai tous. |
| |
Donc, |
| |
Mais avec 13 prédicteurs différents, et sachant que certains d’entre eux pourraient être corrélés les uns aux autres, j’ai décidé que peut-être quelques autres types de régression mériteraient d’être examinés. |
| |
L'une d'elles est ce qu'on appelle la régression en pont. Il s'agit en réalité d'une régression linéaire avec une contrainte supplémentaire. |
| |
les valeurs au carré de mes paramètres ne peuvent pas être supérieures à une constante. |
| |
Je peux... il s'avère que je peux en fait réécrire cela comme un problème d'optimisation où une certaine valeur de lambda correspond à une certaine valeur de C. |
| |
Et donc j'essaie simplement de minimiser cela avec ce terme de pénalité supplémentaire, par opposition aux moindres carrés typiques que vous avez l'habitude de voir. |
| |
On appelle cela une méthode de rétrécissement, car, bien sûr, à mesure que je réduis la taille, tout cela va se rapprocher de plus en plus de zéro. Il faut donc bien sûr réfléchir au degré de restriction souhaité. |
| |
Avec la réduction, tout le monde va progressivement se rapprocher de zéro. Mais avec un autre type de terme de pénalité, je peux même éliminer complètement certains termes. |
| |
Et je peux utiliser ce qu'on appelle le lasso. La contrainte ici est la suivante : au lieu d'utiliser les estimations de paramètres au carré, je vais simplement prendre la somme de leurs valeurs absolues. |
| |
Et il s'avère donc que ce qui se passera réellement, c'est que ceux qui sont très faibles verront leurs estimations de paramètres fixées à zéro, ce qui sert en quelque sorte de |
| |
élimination, si vous voulez, des termes sans importance. |
| |
Pour illustrer un peu le fonctionnement de la régression de Lasso et de crête, le cercle représente ici le terme de pénalité. |
| |
Et ici, nous examinons l'espace des paramètres. Les véritables estimations des moindres carrés se trouveraient donc ici. Nous n'y parvenons donc pas tout à fait, car nous avons cette contrainte supplémentaire. |
| |
Au final, nous trouvons où se trouve la valeur minimale qui touche le cercle. Voici donc nos estimations des paramètres de régression de crête. |
| |
Pour le lasso, dessin similaire, mais comme vous pouvez le voir maintenant avec la valeur absolue, il s'agit davantage d'un losange que d'un cercle. Notez qu'il s'agit d'un modèle bidimensionnel ; nous allons bien sûr aborder les hypersphères et toutes ces formes. |
| |
Mais vous pouvez voir ici, remarquez que cela touche la pointe du diamant. Dans ce cas, bêta 1 est en fait zéro. C'est ainsi que cela élimine les termes. |
| |
Bon, nous allons également examiner ce qu'on appelle un arbre de régression. JMP utilise les plateformes de partitionnement pour cela. Pour vous donner une brève démonstration, j'ai toutes mes données. |
| |
Et donc ma première question que je vais me poser est, combien de pièces y a-t-il dans le logement, et je sais que je ne peux pas avoir 0,943 d'une pièce, donc en gros, |
| |
J'ai six pièces ou moins. Alors, descendons par cette partie de l'arbre, ne descendons pas par cette partie. Si j'ai sept pièces ou plus, cela m'indique immédiatement que je vais prédire ma médiane. |
| |
la valeur doit être de 37. N'oubliez pas que cela représente des dizaines de milliers de dollars, alors disons 370 000 $. |
| |
Si c'est moins de sept, alors la question suivante que je pose est, eh bien, quelle est la taille de lstat ? |
| |
Donc, si c'est plus grand ou égal à 14,43, je vais regarder ce nœud et soudainement, mes estimations médianes de logement sont d'environ 150 000 $ et si je viens ici, ce sera environ 233 000 $. |
| |
En réalité, les arbres de régression partitionnent votre espace d'entrée en différentes zones. Nous attribuons la même prédiction à chaque valeur de cette zone. |
| |
Vous pouvez donc voir ici que j'ai partitionné... maintenant dans ce cas, j'en prends un en deux dimensions parce que c'est plus facile à dessiner... |
| |
et vous pouvez donc voir cet arbre ici, où je regarde d'abord x1. Maintenant, regardez x2 ici et posez une autre question sur x1, puis une autre sur x2, et c'est ainsi que je finis par partitionner l'espace d'entrée. |
| |
Chacun de ces cinq éléments aura une valeur de prédiction. Et voilà à quoi cela ressemble. Je regarde d'en haut. Je vais obtenir exactement cela. Mais vous pouvez voir ici que |
| |
la prédiction est un peu différente selon lequel des cinq domaines est correct. |
| |
Maintenant, je ne vais pas trop entrer dans les détails sur la façon exacte d'en installer un, mais |
| |
James, Witten, Tibshirani et Friedman en donnent un peu ; Leo ??? a écrit le livre fondateur sur le sujet, vous pouvez donc y jeter un œil. |
| |
J'aborderai ensuite les réseaux de neurones, très utilisés actuellement en apprentissage automatique et autres. Voici un aperçu de ce à quoi ressemble un réseau de neurones. Ici, ce schéma utilise uniquement les entrées 5 et 13 lors de leur transmission. |
| |
à ces… cette couche cachée. Et chacune d'elles est transformée par une fonction d'activation. |
| |
Et pour chacune de ces fonctions d'activation, vous obtenez une sortie et nous utiliserons... |
| |
souvent, nous utiliserons simplement une régression linéaire de ces sorties pour prédire la valeur médiane. |
| |
D'accord, donc |
| |
En réalité, les réseaux neuronaux sont des modèles non linéaires, en fin de compte, et en réalité, ils sont appelés réseaux neuronaux parce que la représentation est généralement la façon dont nous percevons le fonctionnement des neurones dans le cerveau humain. |
| |
Chaque entrée peut donc être transmise à des nœuds d'une couche cachée. Au niveau de cette couche, les entrées sont transmises via une fonction d'activation et une sortie est calculée. Chaque sortie peut être transmise à un nœud d'une autre couche cachée ou être une sortie du réseau. |
| |
Désormais, dans JMP, vous n'êtes autorisé qu'à deux couches cachées. |
| |
À vrai dire, en ce qui concerne la création d'un réseau neuronal, rien n'empêche d'en avoir 20. |
| |
Ce qui nous préoccupe maintenant, c'est qu'il existe une théorie statistique qui suggère que nous pouvons approximer n'importe quelle fonction continue. |
| |
Étant donné quelques conditions limites, avec deux couches cachées. C'est probablement la raison pour laquelle JMP a pris cette décision. |
| |
linéaire, tangente hyperbolique et base radiale gaussienne. Donc, en fait, |
| |
Sur ces nœuds, remarquez la petite courbe. Je pense qu'elle correspond à la fonction tangente hyperbolique ; la fonction linéaire correspond à une ligne droite ascendante ; et la base radiale gaussienne ressemble davantage à une courbe normale. |
| |
Il s'agit de la plateforme de réseau neuronal. Le dernier outil que nous examinerons est la régression par projection-poursuite. Je voulais exploiter quelque chose que JMP ne peut tout simplement pas faire, juste pour donner un exemple. |
| |
La régression par poursuite de projection est un modèle initialement proposé par Jerome Friedman et Steutzle à Stanford. Leur modèle prend en compte les prédictions… il établit des prédictions de la forme y égale à la somme de bêta i, f indice i, et une transformation linéaire des entrées. |
| |
En réalité, c'est un peu comme un réseau neuronal. On y trouve une couche cachée avec k nœuds, chacun doté d'une fonction d'activation fi. |
| |
L. Il s'avère qu'avec la projection et la régression, nous allons en fait estimer ces f sub i également. |
| |
En général, il s'agit d'un ajustement plus lisse ou spline. Les fonctions f sub i sont généralement appelées fonctions de crête. Nous avons maintenant des fonctions alpha, bêta et F sur lesquelles nous devons optimiser. En général, un ajustement par étapes est effectué. Je n'entrerai pas trop dans les détails pour le moment. |
| |
Ok, donc j'ai en quelque sorte parcouru tous mes modèles. |
| |
Je vais maintenant vous montrer quelques résultats, en espérant que tout soit parfait. Avant de commencer JMP, je tiens à préciser que |
| |
Il est très difficile de définir les bases des réseaux neuronaux en R, Python et Keras. Notez donc que si vous utilisez mon code, vous n'obtiendrez probablement pas exactement le même résultat, mais cela devrait être assez proche. Ceci étant dit, |
| |
Voyons ce que nous avons obtenu. Voici donc le résultat obtenu. Malheureusement, les choses ne semblent pas s'être déroulées parfaitement. |
| |
Donc, |
| Lucas |
Qu'est-ce que j'ai ici ? J'ai donc mon entraînement, ma validation et mon test. On voit donc très vite qu'un de ces modèles ne convenait pas parfaitement. Malheureusement, quelque chose de terrible s'est produit dans le réseau neuronal de R. |
| |
Il a dû détecter un mauvais point dans l'espace d'entrée pour démarrer, etc. Et donc, cela ne correspondait pas à un très bon modèle. |
| |
Malheureusement, les paramètres de départ des modèles non linéaires sont importants ; dans certains cas, ils nous perturbent. |
| |
Mais si l'on regarde tout le reste, tout semble convenir. On peut débattre de ce qui est convenable, mais je vois des R au carré, dont un supérieur à 0,5. Je vois une moyenne de racine carrée. |
| |
Les erreurs quadratiques sont ici d'environ cinq, et même nos erreurs absolues moyennes sont de l'ordre de trois. Concernant l'entraînement, il semble que les régressions par poursuite de projection soient les plus performantes. |
| |
Si je reviens à l'ensemble de données de validation, cela ressemble toujours à R |
| |
La poursuite par projection a obtenu les meilleurs résultats. Mais si l'on examine les données de test, soudain, non, la régression par poursuite par projection est arrivée deuxième, en supposant que nous ignorions le réseau neuronal de R, deuxième pire. |
| |
Souvent, dans un cadre comme celui-ci, nous allons examiner l'ensemble de données de test le plus proche, car il n'a été utilisé d'aucune manière, sous aucune forme, pour déterminer l'ajustement du modèle. |
| |
Et nous voyons sur cette base, il semble que |
| |
la régression de crête de JMP est la plus adaptée. |
| |
Nous pouvons voir ici que son R au carré était de 0,71 ici avant d'être d'environ 0,73, et d'environ 0,73 ici, donc nous pouvons voir qu'il est systématiquement approprié. |
| |
La même chose se produit pour les trois ensembles de données. Si je devais prendre une décision, uniquement sur la base de ce que je vois actuellement, je choisirais probablement |
| |
La régression de crête. Ceci étant dit, nous avons tout un ensemble de diagnostics et autres informations ici. Si je veux examiner ce qui s'est passé avec ce réseau neuronal de R, |
| |
Je vois très vite qu'il s'est passé quelque chose à quelques pas. Comme vous pouvez le constater, l'ajustement est très mauvais, car presque tout est prévu à environ 220 000. |
| |
Nous savons donc que quelque chose s'est mal passé lors de l'installation de ceci. |
| |
Nous avons donc constaté que la régression de crête semblait la meilleure. Voyons donc ce qu'elle donne. Je vais vous montrer rapidement mon code JSL dans un instant. |
| |
Voici comment j'ai procédé, mais nous pouvons voir ici les estimations des paramètres issues de la régression de crête. Nous pouvons voir les tracés de diagnostic de crête, ce qui signifie que les estimations initiales n'ont pas vraiment diminué. |
| |
Vous pouvez le voir à partir des tests de validation avec le journal comme si cela n'avait rien à voir. |
| |
Et ici, à droite, nous avons nos courbes essentiellement résiduelles. Elles représentent les valeurs réelles et prédites. |
| |
Comme vous pouvez le constater lors de l'entraînement, il semble y avoir quelques valeurs assez coûteuses dont les prédictions ont été imprécises. Nous en voyons moins ici que dans l'ensemble de test ; il ne semble pas y avoir eu trop de difficultés. Nous avons ici quelques points un peu étranges, mais nous pouvons observer une vue d'ensemble. |
| |
Dans les maisons à bas prix, les trois ensembles de données s'intègrent assez bien. Là encore, on peut se demander ce qui s'est passé, mais… |
| |
Pour l'instant, cela semble être le meilleur du lot. On peut donc en juger par les autres. |
| |
Voyons ici. Regardons MATLAB un instant. |
| |
Vous pouvez donc voir ici la validation des tests d'entraînement. MATLAB génère un élément de diagnostic, et vous pouvez voir qu'il a fallu plusieurs époques pour le terminer. |
| |
Mais heureusement, MATLAB fonctionne assez rapidement, comme nous pouvons le constater. |
| |
Et puis le réel par prédit ici. |
| |
Nous pouvons voir tout cela. |
| |
Ok, je vais donc prendre quelques minutes maintenant pour jeter un œil au code. |
| |
Alors bien sûr, quelques notes, assurez-vous que les éléments sont installés afin que vous puissiez réellement exécuter tout cela, car sinon, JMP va tout simplement échouer lamentablement, ne pas cracher de prédictions et ensuite il va échouer car il ne peut pas trouver les prédictions. |
| |
JMP permet donc de créer une colonne de validation avec du code. J'ai donc choisi 60 20 20. J'ai choisi cette valeur aléatoire pour que vous puissiez utiliser les mêmes ensembles de tests de validation d'entraînement que moi. |
| |
En fait, pour le moment, je sauvegarde les colonnes d'entraînement, de validation et de test. Je vais d'ailleurs supprimer cette colonne pour un moment. |
| |
La raison pour laquelle je fais cela ici est que j'envoie l'ensemble de données à R, Python et MATLAB et il est plus facile de coder lorsque tout ce qu'il contient est soit la sortie, soit toutes les entrées. |
| |
Je ne voulais donc pas d'une colonne de validation qui ne soit pas non plus, ce qui compliquerait un peu la tâche. J'ai donc finalement envoyé l'ensemble de données. |
| |
Je lui ai envoyé les lignes d'entraînement, de validation et de test, puis j'ai appelé le code R pour l'exécuter. Vous pouvez maintenant |
| |
Insérez le code R ici. J'ai choisi de n'écrire qu'une seule ligne pour ne pas avoir à faire défiler indéfiniment. Mais rien ne vous en empêche. S'il ne s'agit que de quelques lignes de code, comme ce que vous avez vu plus tôt dans la présentation, je vous conseille de les coller ici. |
| |
Donc, une fois que c'est fait, il s'avère que... ce code crache |
| |
Une photo du diagnostic. Nous avons constaté qu'il s'est arrêté après six ou sept itérations. Disons que c'est réglé. |
| |
La régression de crête est également intégrée à ce script, ce qui nous permet d'obtenir deux images. J'ai donc copié celle-ci, l'ai enregistrée et l'ai encadrée. Le tout est maintenant assemblé à la fin du code. |
| |
Et puis j'obtiens la sortie et je l'ajouterai à la table de données ici dans peu de temps. |
| |
Bon, je vais vous donner un petit exemple de code. Imaginons que vous ayez 6 millions d'observations et qu'il faille 24 heures pour ajuster le modèle. Vous ne souhaiterez probablement pas l'exécuter dans JMP. |
| |
Donc, comme un petit bout de code que vous pourriez faire à partir d'ici, vous pouvez dire, hé, je suis |
| |
OK, je vais ouvrir la table de données qui m'intéresse. Je vais demander à R de l'exécuter ailleurs en attendant, et une fois que mon système aura donné le feu vert pour que tout soit terminé, je pourrai dire : « OK, ouvre le résultat et importe-le. » |
| |
Ma table de données. Voici une façon de procéder. Bien sûr, vous pouvez enregistrer ces fichiers image et utiliser ce code. Mais ce sera exactement le même code. |
| |
Bon, pour Python, ce sera très similaire. Je vais lui transmettre ces éléments : exécuter du code Python, générer le diagramme de diagnostic et les prédictions. |
| |
Je vous donne du code Python, vous voyez, il est très similaire à ce que nous avons fait avec JMP. Je vais simplement ouvrir un fichier CSV, copier la colonne et le fermer, car je n'en ai plus besoin. |
| |
Et puis MATLAB, toujours le même jeu. J'exécute le script MATLAB. J'obtiens le fichier PNG que j'ai récupéré. Je l'enregistre où je veux, j'enregistre les prédictions. Et si vous avez besoin de le récupérer, |
| |
plutôt que de l'exécuter à partir d'ici, un petit exemple de code le fera. |
| |
OK, maintenant que j'ai fini d'appeler R, Python et Matlab, je récupère mes colonnes de validation pour que JMP puisse les utiliser. Comme ça, je me souviens de quoi il s'agit. |
| |
Par défaut, JMP examine les valeurs de la colonne de validation que nous utiliserons. La plus petite valeur correspond à l'entraînement, la deuxième à la validation et la troisième au test. Si vous effectuez une validation croisée K-fold, JMP indiquera de quel fold il s'agit. Par exemple, 012345678, etc. |
| |
Créez donc ceci. J'ai également créé ceci ici, de cette façon, au lieu de 012, il y aura bien « formation », « validation » et « test » dans ma sortie, ce qui sera plus clair. |
| |
Je comprends. Donc, si je montre à quelqu'un qui n'a jamais utilisé JMP auparavant, il ne saura pas ce que signifie 012, mais il devrait savoir ce que sont une formation, une validation et un test. |
| |
OK, je commence maintenant à ajouter les prédictions à ma table de données. Voici donc la propriété d'ensemble à laquelle j'ai fait allusion plus tôt dans mon exposé. |
| |
Mon créateur est MATLAB. J'ai donné un nom à la colonne, donc je sais que c'est la prédiction du réseau neuronal pour MATLAB. Je n'ai donc pas forcément besoin du créateur, mais au cas où je serais un peu négligent dans mes noms. |
| |
Désolé pour ça. |
| |
Nous pouvons donc obtenir toutes les projections, poursuites, régressions, réseaux neuronaux, etc. |
| |
Ensuite, j'ai également remarqué que, hé, j'adapte la régression de crête, le lasso, la régression linéaire dans JMP. |
| |
J'ai donc fait tout ça ici. J'ai donc fait mon modèle d'ajustement, ma régression généralisée. J'ai tout craché. |
| |
Sauvegardez mes formules de prédiction. |
| |
Tracez mon résultat réel par rapport à mes prévisions pour ma production complète à la fin. |
| |
Et je vais ajuster mon réseau neuronal. Puis-je dire la colonne de validation ? Je transfère mes covariables. En général, les réseaux neuronaux ont tendance à mieux s'ajuster lorsque l'on met les choses à l'échelle autour de zéro, contrairement à la valeur habituelle de la sortie. |
| |
Ma première couche cachée comporte trois nœuds. Ma deuxième couche cachée en comporte deux. Ici, ce sont toutes deux des fonctions d'activation linéaires. Pour les trois précédentes, j'utilise la fonction d'activation des unités linéaires restreintes, donc légèrement différente. |
| |
mais j'ai trouvé qu'ils semblaient s'adapter à peu près de la même manière quoi qu'il en soit. |
| |
5. Cela signifie que je vais essayer cinq ensembles différents de valeurs de départ, et celui qui fonctionne le mieux est celui que je vais conserver. |
| |
Comme vous pouvez le constater d'après mon code, j'aurais probablement dû faire ça avec R. Il a fait une sorte de boucle en quatre étapes, en a fait plusieurs, et a sélectionné celle qui donne le meilleur résultat. Donc, pour mes futurs travaux, ce serait une option que j'utiliserais. |
| |
J'enregistre ensuite ces données et je suis prêt pour la comparaison des modèles. J'intègre alors toutes ces nouvelles colonnes dans la comparaison. |
| |
Faites défiler un peu. Je fais ici la validation, comme je l'ai mentionné plus tôt. |
| |
Et enfin, je fais juste un peu de codage pour que cela ressemble à ce que je veux. |
| |
J'obtiens donc ces boîtes de contour, juste pour dire diagnostics de formation, diagnostics de validation, diagnostics de test, au lieu des choses habituelles que dit JMP. |
| |
Je vais obtenir ces tracés de diagnostic. |
| |
Maintenant, je dis simplement que je veux seulement une partie des sorties en saisissant une poignée pour cela. |
| |
Je vais faire quelques tracés résiduels très rapidement car tous ne les crachent pas instantanément, en particulier ceux de MATLAB, Python et R. |
| |
Définissez ces titres et ensuite, je crée simplement le grand vieux tableau ou le grand vieux dialogue. |
| |
Et puis je note tout dans un journal. |
| |
Pour que ce soit propre et net. Je ferme plein de choses pour ne pas avoir à m'en soucier. Et puis, ce que j'ai fait ici, c'est ce que je voulais faire, quand j'ouvre un de ces trucs. |
| |
tout le reste en dessous est immédiatement ouvert plutôt que |
| |
Je dois cliquer sur six ou sept éléments différents. Vous voyez, je dois cliquer ici, ici, et |
| |
Là, il y en a trois autres. Je suppose qu'il y en a encore un. Désolé. Mais comme ça, je n'ai pas besoin de cliquer dessus, ils s'ouvrent automatiquement. |
| |
C'est donc ce que fait ce dernier morceau de code. |
| |
D'accord. |
| Lucas |
Il s'agit simplement d'une sortie différente et d'une exécution en direct. Mais voici à quoi cela peut ressembler. |
| |
Donc, comme je l'ai mentionné, dans le code, vous avez vu là, vous avez vu autre chose, c'est ce que nous avons vu. |
| |
Richard |
| Lucas |
Non. En résumé, la plateforme de comparaison de modèles est un outil très pratique pour comparer la capacité prédictive de plusieurs modèles en un seul endroit. Plus besoin de passer d'un élément à l'autre. Vous pouvez tout visualiser directement sous vos yeux. |
| |
Cette flexibilité peut même être utilisée pour ajuster des modèles qui n'étaient pas adaptés à JMP ou pour comparer des modèles qui n'étaient même pas adaptés à JMP. |
| |
Grâce à cela, si nous devons ajuster des modèles très volumineux et longs à ajuster, nous pouvons leur demander de s'ajuster. Nous pouvons tout récupérer dans JMP et analyser facilement tous les résultats pour déterminer les étapes suivantes. |
| |
Et sur ce, merci pour votre temps. |