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

    1 mars 2017 à 17:41:52

    Bonjour, et bienvenue dans la discussion dédiée au cours Évaluez et améliorez les performances d'un modèle de machine learning !

    Dans ce cours, vous allez apprendre à évaluer un modèle de machine learning, et à sélectionner le modèle qui convient le mieux à votre problème.

    N'hésitez pas à poser vos questions ici et à échanger les uns avec les autres ! Je ferai de mon mieux pour vous répondre régulièrement.

    Si vous avez une question concernant le fonctionnement du cours (accès aux exercices, envoi des exercices, inscription au cours…), contactez directement OpenClassrooms à hello@openclassrooms.com

    Bon courage et à bientôt !

    Chloé.

    • Partager sur Facebook
    • Partager sur Twitter
      18 mai 2017 à 11:52:45

      Bonjour,

      Si j'ai bien compris le cours, la validation croisée utilise l'intégralité du jeu de données, en le découpant en plusieurs parties qui serviront successivement de testing set.

      Dans ce cas, à quoi sert la séparation préalable des données en un jeu de données et un jeu d'entrainement, puisque ceux-ci vont varier au cours de la validation croisée ?

      Merci d'avance pour votre retour.

      Frédérik

      Edit (petite précision sur ma question précédante) :
      Quelle est la taille d'un testing set sur 1 fold ?  Est-ce [Nombre d'échantillons] / [Nombre de folds]  ou plutôt un ratio que l'on définit ?

      Dans le 1er cas, pourquoi ajouter le code :

      X_train, X_test, y_train, y_test = \
      	model_selection.train_test_split(X, y_class,
                                      	test_size=0.3 # 30% des données dans le jeu de test
                                      	)

      Dans le 2ème cas, certains échantillons peuvent se retrouver dans plusieurs testing set, ce qui ne correspond pas à la phrase du cours "À la fin, chaque point (ou observation) a servi 1 fois dans un jeu de test, (k-1) fois dans un jeu d'entraînement."

      -
      Edité par FrédérikVarlet 19 mai 2017 à 11:05:19

      • Partager sur Facebook
      • Partager sur Twitter
        7 juin 2017 à 11:38:50

        Bonjour,

        La séparation entre jeu d'entraînement et jeu de test a un but différent de la séparation en jeu d'entraînement et jeu de validation. Dans le premier cas (entraînement/test), il s'agit d'évaluer la capacité du modèle choisi à généraliser : comment va-t-il se comporter sur de nouvelles données que l'on a jamais vues ? Dans le deuxième (entraînement/validation), il s'agit de sélectionner l'algorithme d'apprentissage (soit l'algorithme lui-même, par ex. réseau de neurones ou algorithme kNN, soit ses hyper-paramètres, par ex. nombre de couches du réseau de neurones ou nombre de voisins dans le kNN.) qui donnera un modèle optimal.

        Dans l'exemple choisi, le jeu de données est séparé en un jeu d'entraînement qui contient 70% des données et un jeu de test qui contient les 30 autres pourcents. C'est ensuite le jeu d'entraînement (X_train, y_train) sur lequel on fait une validation croisée (séparation répétée en un sous-jeu d'entraînement et jeu de validation). La taille d'un test set sur un fold fait bien [Nombre d'échantillons] / [Nombre de folds].

        J'espère que c'est plus clair !

        • Partager sur Facebook
        • Partager sur Twitter
          11 juillet 2017 à 16:04:29

          Est-ce qu'une version ebook du cours est prévue ?
          • Partager sur Facebook
          • Partager sur Twitter
            18 juillet 2017 à 14:19:32

            Dans le chapitre "Comparez votre algorithme à des approches de régression naïves", il y a des petites erreurs de copier/coller :

            • dans l'appel à train_test_split : le code référence "y_class" au lieu de "y"
            • il manque plusieurs imports : sklearn.preprocessing et sklearn.metrics, matplotlib...

            Et, c'est peut-être l'effet de Chrome, mais l'extrait de code avec l'accumulation pour déterminer la taille des ronds n'est pas indenté.

            • Partager sur Facebook
            • Partager sur Twitter
              21 août 2017 à 13:12:57

              .

              -
              Edité par AlanC 18 septembre 2017 à 13:19:06

              • Partager sur Facebook
              • Partager sur Twitter
                17 octobre 2017 à 15:36:58

                Bonjour,

                Après la validation du modèle calculé sur 70 % du jeu de données totales (X_train), peut-on rejouer un modèle avec la totalité de du jeu de données pour augmenter la généralisation du modèle ?

                -
                Edité par NicolasMejane 17 octobre 2017 à 15:38:09

                • Partager sur Facebook
                • Partager sur Twitter
                  27 mars 2018 à 10:29:32

                  Pour l'activité "Implémentez une validation croisée", je ne suis pas sûre de comprendre le mot "implémentez".

                  Habituellement, je comprends "implémenter" comme "utiliser"

                  Pouvez vous confirmer qu'il s'agit ici d' écrire une fonction qui pourrait remplacer gridSearchCV de scikit learn si elle n'existait pas déjà ?

                  merci.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Catalyseur d'innovation digitale pour des responsables opérationnels passionnés par leur métier.
                    28 mars 2018 à 16:00:08

                    @BrigitteMaillère :
                    En informatique, le terme « implémenter » signifie généralement « programmer » ou « mettre en place » et non pas « utiliser » ! (L'académie propose « effectuer l’ensemble des opérations qui permettent de définir un projet et de le réaliser », le Wiktionnaire « Traduire un algorithme dans un langage de programmation », nous ne sommes donc pas les seuls à le penser !).

                    Donc oui, il s'agit bien d'écrire une validation croisée vous-même sans utiliser gridSearchCV.

                    @NicolasMejane :

                    Oui, c'est l'idée. Cependant remarquez bien que vous ne serez pas en mesure de mesurer la généralisation.

                    -
                    Edité par cazencott 28 mars 2018 à 16:05:49

                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 avril 2018 à 9:16:35

                      Bonjour, une question pour l'exercice d'implémentation d'une validation croisée:

                      Je n'arrive pas à ne pas randomiser la selection des sets pour pouvoir comparer les résultats avec ma propre implémentation.

                      J'ai essayé plusieurs solutions dont la suivante:

                      clf = model_selection.GridSearchCV(neighbors.KNeighborsClassifier(), # un classifieur kNN
                      param_grid, # hyperparamètres à tester
                      cv=model_selection.KFold(n_splits=5,shuffle=False), # nombre de folds de validation croisée
                      scoring=score # score à optimiser
                      )

                      En copiant exactement le code du TP et en ne modifiant que les lignes citées ci-dessus j'ai pourtant à chaque fois que je lance le script des résultats différents pour l'hyperparamètre k et des accuracy différentes.

                      Je voudrais qu'à chaque fois que je lance le script les résultats soient exactement les mêmes afin de pouvoir remplacer l'appel à GridSearchCV avec ma fonction CustomGridSearchCV.

                      Merci d'avance.

                      EDIT: parmi mes tentatives, j'ai essayé d'utiliser un seed en prenant comme paramètres shuffle=True et random_state=123 sans que cela ne fonctionne non plus.

                      -
                      Edité par Shravan1804 6 avril 2018 à 10:27:05

                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 avril 2018 à 15:39:56

                        L'option shuffle=False devrait fonctionner, et d'ailleurs en utilisant votre code j'obtiens toujours le même résultat. Vous pouvez vérifier les folds créés en utilisant :

                        for train_index, test_index in cv.split(X):
                            print("TRAIN:", train_index, "TEST:", test_index)


                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 avril 2018 à 10:02:27

                          Je vous remercie pour votre réponse.

                          Vous avez raison, les folds sont les mêmes à chaque fois que je lance et relance le code.

                          Le KNN ne donnait pas les même résultats car je séparais à chaque fois le training set du test set sans utiliser de seed.

                          Encore merci.



                          • Partager sur Facebook
                          • Partager sur Twitter
                            13 avril 2018 à 17:45:56

                            Bonjour,

                            Concernant le dernier exercice "Sélectionnez le nombre de voisins dans un kNN pour une régression:

                            le lien indiqué pour "le second dataset" semble, d'après le nom du lien, être le dataset des vins rouges (winequality-red.csv),

                            Pourtant le téléchargement renvoie la dataset des vins blancs. Lequel devons nous prendre ?


                            Victor

                            • Partager sur Facebook
                            • Partager sur Twitter
                              Team OC 16 avril 2018 à 19:04:22

                              Bonjour,

                              Merci d'avoir remonté ce bug. Le lien est corrigé !

                              Cordialement,

                              LB.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                7 mai 2018 à 8:28:53

                                Bonjour,

                                Dans le cours "Évaluez un algorithme de classification qui retourne des scores", j'ai une question avec l'antispécificité à cette ligne:

                                Comme aucune observation n'est prédite positive, notre sensibilité (qui est le taux de vrais positifs TP/P) est égale à 0, de même que l'antispécificité (qui est le taux de faux positifs FP/P).

                                Je ne vois pas comment déduire FP/P algébriquement en utilisant la formule de la spécificité du cours précédent à savoir TN/(TN+FP) ou TN/N.

                                Or avec 1 - TN/N, j'arrive à FP/N et non pas FP/P.

                                Merci d'avance.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  13 juin 2018 à 17:49:48

                                  Bonjour,

                                  La fonction de sklearn "r2_score" pour calculer le coefficient de détermination ne fonctionne pas avec ma version de python.

                                  Je code avec Jupyter Notebook, python 3.4. Existe t-il une autre fonction qui marchera  avec cette version?

                                  En vous remerciant par avance.

                                  -
                                  Edité par FatouDrame1 17 juillet 2018 à 17:33:24

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    7 juillet 2018 à 19:02:18

                                    bonjour, 
                                    pour l'exemple de plot scatter size que vous donnez ici : https://openclassrooms.com/courses/4297211-evaluez-et-ameliorez-les-performances-dun-modele-de-machine-learning/4308281-comparez-votre-algorithme-a-des-approches-de-regression-naives#/id/r-4334448

                                    i
                                    l semblerais  que ".has_khey" ne soit pas implémenté en python3 mais remplacé par "in".

                                    J'ai donc essayé de remplacer 

                                    if sizes.has_key((yt, yp)):

                                    qui renvoie l'erreur : AttributeError: 'dict' object has no attribute 'has_key'

                                    par

                                    if (yt, yp) in sizes:

                                    et j'obtiens l'erreur  : 

                                    TypeError: unhashable type: 'numpy.ndarray'

                                     Comment régler ce problème merci d'avance



                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      31 juillet 2018 à 15:21:51

                                      c'est bon j'ai pu régler mon problème c'est juste la library qui a subit des changement il faut , utiliser la nouvelle méthode pour .has_khey
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        16 août 2018 à 5:45:25

                                        C'est en forgeant qu'on devient forgeron, j'avais plein de questions au début de l'activité 1, à la faire, j'ai compris...

                                        -
                                        Edité par GaranceRichard1 16 août 2018 à 10:58:44

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          2 septembre 2018 à 15:14:46

                                          Quiz question 8.

                                          Bonjour, je ne comprends pas le corrigé de cette question.

                                          En effet, il vaut mieux utiliser le paramètre constant, mais d'après votre cours, étant donnée que la classe majoritaire est négative, il faudrait utiliser un classifieur de classe négative? Pourquoi positive?

                                          Crdt, José

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          José Castro
                                            22 mai 2019 à 15:49:15

                                            Bonjour

                                            Pour l'activité 1 (sur l'implémentation de la validation croisée), devons-nous également ré-implémenter la fonction KFold de sélection des plis ?

                                            model_selection.KFold(n_splits=n_folds,shuffle=False)

                                            Ou bien pouvons-nous la réutiliser dans notre code ?

                                            Merci d'avance et bonne journée.

                                            Christophe

                                            -
                                            Edité par Christophe Lebrun du Puytison 22 mai 2019 à 15:49:46

                                            • 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