Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Cours] Sélection de modèle en machine learning

Évaluez et améliorez les performances d'un modèle de machine learning

    19 novembre 2019 à 2:20:38

    Effectivement, je suis très léger en programmation python. J'avoue ne rien avoir compris au cours "apprendre à programmer en python". Et je n'utilise que python 3 avec Anaconda.
    Concernant l'activité de validation croisée, j'ai bien trouvé un moyen d'utiliser kfolds, avec 5 folds... il les a bien créé, mais franchement, il y; a un truc que je ne comprend pas.
    Le KNN est supposé prendre ses folds, et faire 4 versus 1 à chaque fois, et je dois collecter les résultats ? Or, comme les folds ne sont pas définis en terme de dataframe, je ne peux pas répéter 5 instructions de KNN...
    Concernant la dernière activité du cours, j'ai relu l'énonce, le scénario de base est bien un bayésien... mais le piège ne serait-il pas "à nouveau à l’aide d’une grid search, à implémenter vous même" ?
    Si c'est utiliser la librairie, ça va, mais si c'est créer la fonction...

    -
    Edité par RichardChazal1 19 novembre 2019 à 4:44:57

    • Partager sur Facebook
    • Partager sur Twitter
      20 novembre 2019 à 18:43:21

      RichardChazal1 a écrit:

      Effectivement, je suis très léger en programmation python. J'avoue ne rien avoir compris au cours "apprendre à programmer en python". Et je n'utilise que python 3 avec Anaconda.

      Je vois mal comment tu vas pouvoir suivre ce cours et les autres cours Data sans bonnes notions de Python.
      Tu devrais sans doute concentrer tes efforts là-dessus, ça te fera gagner du temps ensuite sur les cours Data.

      Python est vraiment un langage très simple, au point que beaucoup de collégiens de 12 ans commencent par ce langage. En bossant le cours Python tu devrais y arriver. Sinon, prends un autre cours sur internet. Le tutoriel officiel est bien fait.

      RichardChazal1 a écrit:

      Le KNN est supposé prendre ses folds, et faire 4 versus 1 à chaque fois, et je dois collecter les résultats ? Or, comme les folds ne sont pas définis en terme de dataframe, je ne peux pas répéter 5 instructions de KNN...

      Inspire-toi des exemples de la documentation officielle (user guide, API...).

      Voilà ce que dit l'énoncé :

      Vous comparerez les performances à l’aide d’une baseline naïve

      Et voilà ce que dit le cours sur les approches "naïves" : https://openclassrooms.com/fr/courses/4297211-evaluez-et-ameliorez-les-performances-dun-modele-de-machine-learning/4308281-comparez-votre-algorithme-a-des-approches-de-regression-naives#/id/r-4334395

      Je veux pas dire, mais je t'ai déjà signalé en long, en large et en travers que "Naive Bayes" n'est pas une "baseline naïve". Et je t'ai expliqué pourquoi.

      RichardChazal1 a écrit:

      Si c'est utiliser la librairie, ça va, mais si c'est créer la fonction...

      Quand l'énoncé dit "à implémenter vous-même", c'est sans ambiguïté : tu es censé écrire la fonction.

      Tu l'as bien fait pour l'activité précédente, non ? Donc c'est faisable.

      • Partager sur Facebook
      • Partager sur Twitter
        21 novembre 2019 à 0:29:18

        Zachee54 a écrit:

        RichardChazal1 a écrit:

        Effectivement, je suis très léger en programmation python. J'avoue ne rien avoir compris au cours "apprendre à programmer en python". Et je n'utilise que python 3 avec Anaconda.

        Je vois mal comment tu vas pouvoir suivre ce cours et les autres cours Data sans bonnes notions de Python.
        Tu devrais sans doute concentrer tes efforts là-dessus, ça te fera gagner du temps ensuite sur les cours Data.

        Python est vraiment un langage très simple, au point que beaucoup de collégiens de 12 ans commencent par ce langage. En bossant le cours Python tu devrais y arriver. Sinon, prends un autre cours sur internet. Le tutoriel officiel est bien fait.

        RichardChazal1 a écrit:

        Le KNN est supposé prendre ses folds, et faire 4 versus 1 à chaque fois, et je dois collecter les résultats ? Or, comme les folds ne sont pas définis en terme de dataframe, je ne peux pas répéter 5 instructions de KNN...

        Inspire-toi des exemples de la documentation officielle (user guide, API...).

        Voilà ce que dit l'énoncé :

        Vous comparerez les performances à l’aide d’une baseline naïve

        Et voilà ce que dit le cours sur les approches "naïves" : https://openclassrooms.com/fr/courses/4297211-evaluez-et-ameliorez-les-performances-dun-modele-de-machine-learning/4308281-comparez-votre-algorithme-a-des-approches-de-regression-naives#/id/r-4334395

        Je veux pas dire, mais je t'ai déjà signalé en long, en large et en travers que "Naive Bayes" n'est pas une "baseline naïve". Et je t'ai expliqué pourquoi.

        RichardChazal1 a écrit:

        Si c'est utiliser la librairie, ça va, mais si c'est créer la fonction...

        Quand l'énoncé dit "à implémenter vous-même", c'est sans ambiguïté : tu es censé écrire la fonction.

        Tu l'as bien fait pour l'activité précédente, non ? Donc c'est faisable.

        Ces collégiens doivent être plus doués que moi. Je connais quelques langages simples (Papyrus, HTML...). J'ai fait pas mal de petits cours en python (celui avec les citations de San Antonio, entre autres, je bidouille des scripts python pour Renpy). J'ai réussi l'activité du cours "initiation au machine learning" et autres cours de ce niveau utilisant python. J'ai échoué au cours libraires pythons pour les data sciences sur le problème de monty hall et la conversion de dates. Voilà mon niveau.

        Je n'ai pas réussi à compléter la première activité du cours : si la boucle que tu m'as donné en exemple m'a aidé à construire celle qu'il faut pour tester le nombre de voisins et récupérer l'accuracy, mais je suis coincé avec les kfolds : je pense que je dois faire d'abord la boucle qui permet de tester les 5 kfolds, et imbriquer dedans la boucle qui teste le nombre de voisins (ainsi, pour chaque kfold, je teste tous les voisins), mais je ne sais pas comment je peux appeler les kfolds générés par cette fonction, et les utiliser avec l'algo.

        Concernant la baseline naive, tu l'as dit, j'ai compris... et je suis coincé : autant pour un problème de régression, un régression linéaire aura fait l'affaire, autant pour une classification, je ne sais pas quoi utiliser...

        • Partager sur Facebook
        • Partager sur Twitter
          21 novembre 2019 à 9:48:51

          Dans ce cas, très clairement, tu as besoin de bosser le Python avant d'aller plus loin. L'initiation au machine learning n'était pas une initiation au Python.

          RichardChazal1 a écrit:

          Concernant la baseline naive, tu l'as dit, j'ai compris... et je suis coincé : autant pour un problème de régression, un régression linéaire aura fait l'affaire, autant pour une classification, je ne sais pas quoi utiliser...

          C'est ni plus ni moins que le contenu du cours qui précède l'activité.
          • Partager sur Facebook
          • Partager sur Twitter
            10 décembre 2019 à 0:03:14

            Bonjour

            Après avoir bossé la syntaxe de python, j'ai réussi à créer une fonction basée sur Kfolds (5 folds, non randomisés), qui prend comme entrées une liste des voisins et le nombre de folds à créer, et me sors la moyenne des accuracy (ainsi que l'accuracy pour chaque fold) pour chaque nombre de voisins.

            Je ne sais pas encore automatiser la sélection du meilleur nombre de voisins en fonction de la meilleur accuracy moyenne... devons nous implémenter cela aussi ?

            Autre chose : ma fonction et gridsearchCV ne fournissent pas les mêmes résultats... quelle marge d'erreur est tolérée (nombres de voisins, accuracy ?).

            Cordialement

            -
            Edité par RichardChazal1 10 décembre 2019 à 1:19:08

            • Partager sur Facebook
            • Partager sur Twitter
              10 décembre 2019 à 13:41:46

              Bonjour,

              Oui, il faut implémenter la sélection du meilleur k par validation croisée.

              Si ta fonction ne donne pas la même chose que GridSearchCV, c'est sans doute dû à la constitution des folds. Par défaut, il utilise un StratifiedKFold.

              On ne parle pas de marge d'erreur parce que chacun fait quelque chose de différent, et qu'on ne va pas comparer avec GridSearchCV. L'important, c'est que ta démarche et ton analyse soient correctes.

              Bon, évidemment, si tu donnes le même KFold et le même scoring à GridSearchCV et qu'il te renvoie complètement autre chose que ta fonction, c'est peut-être qu'il y a une erreur quelque part...

              • Partager sur Facebook
              • Partager sur Twitter
                11 décembre 2019 à 2:42:31

                Zachee54 a écrit:

                Bonjour,

                Oui, il faut implémenter la sélection du meilleur k par validation croisée.

                Si ta fonction ne donne pas la même chose que GridSearchCV, c'est sans doute dû à la constitution des folds. Par défaut, il utilise un StratifiedKFold.

                On ne parle pas de marge d'erreur parce que chacun fait quelque chose de différent, et qu'on ne va pas comparer avec GridSearchCV. L'important, c'est que ta démarche et ton analyse soient correctes.

                Bon, évidemment, si tu donnes le même KFold et le même scoring à GridSearchCV et qu'il te renvoie complètement autre chose que ta fonction, c'est peut-être qu'il y a une erreur quelque part...


                ça y est, ma fonction donne non seulement le détail, mais aussi la meilleure accuracy moyenne et le nombre de voisins correspondants.

                Il y avait une erreur liée à l'absence de purge des listes entre chaque itération de boucle for.

                Niveaux résultats, j’obtiens certes des résultats différents ce ceux du TP, mais ma fonction et gridsearchCV donne le même nombre de voisins que gridsearchCV, et un résultat d'accuracy identique à 0.01 ou 0.001 près, en cross validation et en prédiction. Je pense donc que c'est bon...

                Je vais pouvoir donc finaliser le fichier avant de l'envoyer...

                Concernant la seconde activité :

                - comment optimiser le naive bayses ? Et peut-on recycler et adapter la fonction gridsearchCV faite pour la première activité ?

                • Partager sur Facebook
                • Partager sur Twitter
                  11 décembre 2019 à 14:20:18

                  Combien de fois faudra-t-il te dire qu'il s'agit d'une baseline naïve, pas d'une Naive Bayes ?

                  Si tu avais compris la différence entre les deux, tu ne te poserais même pas la question.

                  Je renonce à t'expliquer davantage ce que je t'ai déjà répété de trop nombreuses fois.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  [Cours] Sélection de modèle en machine learning

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  • Editeur
                  • Markdown