Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Cours] Initiez-vous au machine learning

Découvrez les bases du machine learning

    24 septembre 2018 à 16:23:04

    Il me semble difficile d'établir un prix par m2 avec une droite qui a une ordonnée à l'origine... ?

    Cela ne revient-il pas aussi quelque part à dire qu'on a trouvé la réponse avant de poser la question ?

    Bon courage

    -
    Edité par Pezman 26 septembre 2018 à 14:54:38

    • Partager sur Facebook
    • Partager sur Twitter
      30 septembre 2018 à 19:52:33

      Bonjour 

      Je ne comprends pas pourquoi j'ai cette résultat de theta [[-283.37836117][  40.97116431]] alors que je n'ai rien changé au niveau des données.

      • Partager sur Facebook
      • Partager sur Twitter
      La vie, c'est comme une bicyclette, il faut avancer pour ne pas perdre l'équilibre.   Albert Einstein
        1 octobre 2018 à 18:51:33

        Missay a écrit:

        Bonjour 

        Je ne comprends pas pourquoi j'ai cette résultat de theta [[-283.37836117][  40.97116431]] alors que je n'ai rien changé au niveau des données.


        Je me posais la même question que toi. Si tu regardes les autres postes du forum, tu verras que le code indiqué dans le cours n'est pas exactement celui que le prof a utilisé pour obtenir ses résultats. La différence existe car le prof a fait un filtrage des loyers trop élevés.

        Son poste est sur la première page. Je le reporte ici.

        import numpy as np
        import pandas as pd
        import matplotlib.pyplot as plt
         
        # Import des donnees
        house_data_raw = pd.read_csv('house.csv')
        house_data = house_data_raw[house_data_raw['loyer'] < 7000]
         
        # Affichage des observations
        plt.plot(house_data['surface'], house_data['loyer'], 'ro', markersize=4)
        plt.show()
         
        # Creation des matrices de travail
        X = np.matrix([np.ones(house_data.shape[0]), house_data['surface']]).T
        y = np.matrix(house_data['loyer']).T
         
        # Calcul du coefficient de regression
        theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
        theta.item(0) + 50 * theta.item(1)
         
        # Affichage de la droite de regression
        plt.plot(house_data['surface'], house_data['loyer'], 'ro', markersize=4)
        plt.plot([0, 250], [theta.item(0), theta.item(0) + 250 * theta.item(1)])
        plt.show()

        __________________________________________________________________

        Concernant le TP des KNN, je rencontre des problèmes avec les données récupérées avec MNIST.

        Les données sont correctement récupérées, cependant chaque image est de taille 780 (et non 784). Cela ne correspond pas à 28*28, le format aurait il changé ? (26*30 par exemple). Par ailleurs, il est indiqué dans le TP que les niveaux de gris sont compris entre 0 et 16, mais c'est en fait entre 0 et 255.

        De plus, les données sont représentées sous forme de matrices creuses. Il faut donc utiliser la fonction todense() décrite ici.

        from sklearn.model_selection import train_test_split
        
        xtrain, xtest, ytrain, ytest = train_test_split(data, target, test_size=0.2)
        
        #On transforme la matrice creuse en matrice dense.
        denseXTEST = xtest.todense()
        
        #On reforme les matrices pour qu'elles aient un format compatible avec l'affichage d'images
        images = []
        for i in 0,denseXTEST.shape[0]-1:
            images.append(denseXTEST[i].reshape((-1,26,30)))
        
        #Attention, images n'est plus une matrice de matrices, mais une liste de matrices.




        Par ailleurs, pourrait-on me dire si j'aurais dû procéder autrement pour utiliser reshape ? Ca me dérange un peu de casser la matrice initiale pour la transformer en liste, mais je n'ai pas réussi à utiliser reshape autrement... (la fonction s'applique sur la matrice entière plutôt que chaque élément de la matrice).

        J'ai finalement réussi à afficher les images avec ce reshape 26,30. Mais il est clair que ce n'est pas le bon format vu l'apparence des images.

        Je pense que le TP aurait besoin d'une petite mise à jour :) 

        -
        Edité par oppoppy 1 octobre 2018 à 20:15:59

        • Partager sur Facebook
        • Partager sur Twitter
          18 octobre 2018 à 17:04:26

          Bonjour, 

          J'ai terminé le cour à 100% et j'ai eu 5/7 (en moyenne) à l'activité. J'ai échoué le quizz n°1 à deux reprises et je ne peut plus recommencer. Je n'ai aucune possibilité pour obtenir le certificat ? En vous remerciant. 

          • Partager sur Facebook
          • Partager sur Twitter
            6 novembre 2018 à 14:35:15

            Bonjour,

            J'ai essayé de faire le TP1 mais ça marche pas.

            voici mon code

            #On importe les libraries qu'on aura besoin

            %matplotlib inline

            import numpy as np

            import pandas as pd

            import matplotlib.pyplot as plt

            # Import des donnees

            house_data_raw = pd.read_csv('house_data.csv')

            house_data = house_data_raw[house_data_raw['price'] < 7000]

            house_data_raw

            plt.show

            # On affiche le nuage de points dont on dispose

            plt.plot(house_data['surface'], house_data['price'], 'ro', markersize=4)

            plt.show()

            # On décompose le dataset et on le transforme en matrices pour pouvoir effectuer notre calcul

            X = np.matrix([np.ones(house_data.shape[0]), house_data['surface'].values]).T

            X

            y = np.matrix(house_data['price'].values).T

            y

            # On effectue le calcul exact du paramètre theta

            theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)

            print(theta)

            résultat obtenu après exécution de la dernière ligne :

             [[nan]

             [nan]]
            • Partager sur Facebook
            • Partager sur Twitter
              20 novembre 2018 à 15:34:50

              Bonjour,

              Serait-il possible d'obtenir la correction du TP prédiction de loyers améliorées avec arrondissements ?

              Merci d'avance.

              • Partager sur Facebook
              • Partager sur Twitter
                29 novembre 2018 à 12:31:33

                Bonjour,

                sur le mooc "Analysez vos données textuelles", j'ai fais une erreur de correction sur le dernier tp pour le troisième élève.

                Serait-il possible de débloquer le corriger pour changer la note.

                Cordialement

                • Partager sur Facebook
                • Partager sur Twitter
                José Castro
                  8 décembre 2018 à 17:06:24

                  Bonjour.

                  Pour commencer ce post, je souhaite mentionner que j’apprécie beaucoup le contenu des cours proposés par Openclassroom. Je me permets toutefois de faire remarquer plusieurs erreurs et/ou confusions qui ne semblent pas avoir été soulevées jusqu’à présent. Dans la section « TP: Décomposez l’apprentissage d’une régression linéaire », plusieurs éléments mathématiques sont donnés aux lecteurs, plus précisément dans les sous-sections « Reformuler le problème dans l'espace d’hypothèse : une droite », « Définir la fonction loss » et « Apprentissage : trouver le thetaoptimal ». Je suis partisan du fait qu’il est primordial de définir correctement toutes les notions et notations mathématiques que l’on souhaite utiliser. Sinon, cela reste une série de symboles incompréhensibles pour le lecteur non initié. Etant donné que l’auteur de ce cours a ajouté ces quelques équations, je suppose qu’il estime quelles apportent une informations supplémentaires pour le lecteur désireux d’avoir quelques détails techniques. J’ai remarqué plusieurs grosses erreurs dans les équations ainsi que des erreurs de notation. N’ayant pas accès à LaTeX pour formater les équations correctement, je vais essayer de faire comme je peux: l’underscore _ pour définir un indice (x_1), le chapeau ^ pour définir une notation avec exposant (x^{(2)} est le second x, comme on aurait pu l’écrire par x_2), la notation Python/numpy .T pour appliquer l’opérateur transposé. C’est parti:

                  (1) La première équation de la sous-section « Reformuler le problème dans l'espace d’hypothèse : une droite » est incorrecte: « ychapeau = theta.T x avec x = (1, x_1, x_2, …, x_N), ychapeau = (ychapeau_1, ychapeau_2, …, ychapeau_N) ». Premièrement, si l’auteur a pris la peine de mentionner qu’il faut appliquer l’opérateur transposé au vecteur theta, c’est qu’il différencie les notions de vecteur ligne (par exemple (a, b, c, …)) et vecteur colonne (le même mais « écrit à la vertical », avec c en dessous de b, lui-même en dessous de a). Je suis tout à fait d’accord avec lui sur ce point. Dans ces conditions, le produit de deux vecteurs n’est défini qu’entre un vecteur ligne par un vecteur colonne: `a b` est par définition le produit du vecteur ligne `a` par le vecteur colonne `b`. C’est une convention mathématique à la base même du calcul matriciel. Dans le cours, x est défini comme un vecteur ligne, ce qui rend d’ores et déjà le produit indéfini. Etant donné qu’il est indiqué, à la fin de cette sous-section, que theta = (theta_0, theta_1) (lorsqu’on réduit le problème à une seule dimension), le vecteur theta est donc un vecteur ligne, ce qui implique donc que theta.T est un vecteur colonne. Le produit n’aurait donc de sens que sous la forme `x theta.T` au lieu de `theta.T x`. Deuxièmement, quand bien même nous utiliserions `x theta.T`, le résultat de ce produit est nécessairement un scalaire, autrement dit une simple valeur, et non pas un vecteur comme c’est indiqué par ychapeau = (ychapeau_1, ychapeau_2, …, ychapeau_N). Cette équation n’a donc aucun sens. Il semble que l’auteur ait extrait cette équation de l’article qu’il donne en référence dans un cadre bleu un peu plus loin (lien cliquable sur la phrase « par exemple ici (en anglais) »), mais en transposant de façon erronée les notations. 

                  (2) Une autre erreur manifeste dans cette première équation est l’utilisation du `N` dans les définitions de x et ychapeau. Le `N` a été défini plus tôt dans la section comme étant « Notre training set est un ensemble de N = 545 observations de surface et leur loyer associé … ». Je pense donc que l’auteur a confondu le nombre d’observations avec la dimensionalité du problème. Ceci expliquerait les erreurs expliquées au point (1) de ce post. Cela est d’autant plus clair que l’auteur mentionne dans la phrase suivante: «  Dans notre cas, puisqu’on est en une dimension, … ». Ceci veut bien dire que la première équation discutée ci-dessus est une généralisation du problème abordé. La dimension du vecteur x (et celle de ychapeau et theta aussi) doit donc être indépendante du nombre d’observations. Une conséquence immédiate de cette erreur est que la notation utilisée à l’équation qui suit la précédente: « … on peut écrire pour un point x_i, ychapeau_i = theta_0 + theta_1 x_i » laisse penser que les x_i peuvent être un des éléments du vecteur x = (1, x_1, x_2, …, x_N) définit précédemment. Par exemple, on pourrait croire que pour i = 5, x_5 dans cette seconde équation est le même que celui dans x = (1, x_1, …, *x_5*, x_6, …, x_N). Or ce n’est *pas* le cas. Toutes les valeurs que le x_i de cette seconde équation peuvent prendre sont des réalisations de la variable « surface », qui peut être représenté uniquement par le x_1 (et uniquement lui, car la dimension de notre cas est 1) dans la première équation. Cette dernière phrase montre bien la confusion dans la notation x_i et (x_1, x_2, ….). Je propose une version correct plus bas. 

                  (3) Malheureusement, les erreurs décrites ci-dessus se propagent à la sous-section « Définir la fonction loss », notamment dans la définition du risque empirique. Cette définition est, selon moi, erronée. La somme couvre les N observations, ce qui implique que pour un i donné, x_i est une simple valeur (en l’occurence, la surface correspondant à la i-th observation). Dans ce cas, que peut bien représenter la quantité `theta.T x_i` qui est le produit d’un vecteur par un scalaire? Certainement pas l’estimation, donnée par le modèle, du loyer associé à la i-th surface. De même, l'expression `theta.T x_i - y_i` représente la différence d'un vecteur avec un scalaire, ce qui n'a pas de sens mathématique. Quant à la définition de la distance euclidienne, quel est l’intérêt de l’ajouter si la notation n’est pas définie? || . ||_2 représente la norme l_2 d’un vecteur?

                  (4) Dans la sous-section « Apprentissage : trouver le thetaoptimal », quitte à mettre la solution exacte, pourquoi ne pas indiquer ce que X représente, à savoir (dans le problème abordé) une matrice Nx2 dont la première colonne est remplie de 1, et la seconde est remplie avec les N observations de surface. Chaque ligne est donc un vecteur (1, x_i) avec x_i la i-th valeur de surface.

                  Au vu de ce qui a été dit, je pense qu’une version correcte de la première équation serait: 

                  ychapeau(x) = x theta.T

                  avec theta = (theta_0, theta_1, …, theta_D), x = (1, x_1, x_2, …, x_D), et D >= 1 est un entier représentant la dimension du problème. Ainsi, ychapeau(x) représente une fonction du vecteur x, à valeur réelle. Dans notre problème surface-loyer, cette dimension se réduit à D=1. Cela implique que le vecteur theta se réduit à deux composantes: theta = (theta_0, theta_1). De même, le vecteur x se réduit à x = (1, x_1) où x_1 représente une variable dont une réalisation correspond à une valeur de la surface. La j-th réalisation définit un vecteur x^{(j)} = (1, x_1^{(j)}), où ^{(j)} est une notation pour différencier les réalisations de la variable x_1. Si on collecte l’ensemble de ces N = 545 réalisations, l’ensemble des vecteurs x^{(j)} pour j = 1, …, N peut se condenser dans une matrice de dimension Nx2, dont la j-th ligne est définie par x^{(j)} = (1, x_1^{(j)}). Cette nouvelle matrice X est précisément la matrice X présentée dans le cours à la première équation de la sous-section « Apprentissage : trouver le thetaoptimal », à savoir thetachapeau = (X.T X)^{-1} X.T y. 

                  Pour conclure, les erreurs mentionnées ne sont pas que de simples typos, ou erreurs de notation. Comme écrites dans le cours, ces quelques équations mélangent le nombre d’observations avec la dimensionalité du problème, ce qui rend la compréhension très difficile pour quelqu’un n’ayant pas un bagage mathématique suffisant. Pour les personnes parlant anglais, le lien fourni par l’auteur dans le cadre « Détails de la solution » renvoi vers une démonstration rigoureuse et très bien expliquée de la solution exacte. De plus, les différentes quantités (vecteurs et matrices) y sont définies clairement.

                  En espérant que ce post soit utile, je vous (nous) souhaite bonne continuation.

                  -
                  Edité par klosferatu 8 décembre 2018 à 20:54:49

                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 janvier 2019 à 14:18:01

                    Bonjour à tous,

                    sur cet exemple :

                    https://openclassrooms.com/fr/courses/4011851-initiez-vous-au-machine-learning/4020631-exploitez-au-mieux-votre-jeu-de-donnees#/id/r-4091481

                    il faut caster en integer :

                    sample = np.random.randint(data_size, size=int(data_size*0.1))

                    Bien à vous.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 janvier 2019 à 23:48:17

                      Bonjour Tout le monde,

                      Svp, est-qu'il y a des idées pour résoudre l'activité:Allez plus loin... ?

                      Je comprend pas bien est qu'on doit chercher améliorations avec régression linéaire ou bien d'autres méthodes!!

                      Des pistes pour résoudre l'activité !!

                      Merci

                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 janvier 2019 à 16:57:07

                        YounseZr a écrit:

                        Bonjour Tout le monde,

                        Svp, est-qu'il y a des idées pour résoudre l'activité:Allez plus loin... ?

                        Je comprend pas bien est qu'on doit chercher améliorations avec régression linéaire ou bien d'autres méthodes!!

                        Des pistes pour résoudre l'activité !!

                        Merci


                        Bonjour. Un première amélioration est de tenir compte des arrondissements en plus de la surface, ce qui peut se faire par une régression linéaire en dimension 2. Personnellement, j'ai également effectué 5 régressions linéaires, chacune étant basée sur des données liées à un et un seul arrondissement. Chacune de ces régressions produit un modèle prédictif qui n'est utilisable uniquement que pour l'arrondissement sur lequel il a été construit.

                        Je ne suis qu'un élève en plein apprentissage, et mon avis ne veut pas celui d'un expert. Mais comme tu l'auras remarqué, la dernière réponse d'un membre du staff sur cette partie du forum date d'un an environ... 

                        • Partager sur Facebook
                        • Partager sur Twitter
                          6 janvier 2019 à 20:13:14

                          Bonjour Klosferatu,

                          Tu as raison, il y a effectivement une erreur. Ton message étant très dense, je vais tenter de clarifier un peu pour que ça soit bien compréhensible.

                          Commençons par le point 2):

                          Le `N` a été défini plus tôt dans la section comme étant « Notre training set est un ensemble de N = 545 observations de surface et leur loyer associé … ». Je pense donc que l’auteur a confondu le nombre d’observations avec la dimensionalité du problème.

                          et

                          La dimension du vecteur x (et celle de ychapeau et theta aussi) doit donc être indépendante du nombre d’observations..

                          On touche le coeur de l'erreur déjà. Ce qui se passe c'est un mélange entre deux notions et deux notations.

                          Commençons par définir une variable X = (x_1, x_2, ... x_N) qui contient l'ensemble de notre échantillon. Avec cette définition, N = 545 est correct, il s'agit du nombre d'appartement dans notre dataset.

                          Maintenant, définissons un x_i. Un x_i est un individu (ici un appartement), c'est à dire une variable qui définit plusieurs features.  Ici, il n'y en a qu'une, c'est le loyer, mais il pourrait y en avoir d'autre. On verra plus tard dans le cours l'arrondissement par exemple, on pourrait penser à l'âge de l'immeuble, le nombre de chambres, etc.

                          Ces features sont représentées par un vecteur de taille k (pour k features): x_1 = (f_1, f_2, ..., f_k).

                          Pour des raisons liées au calcul matriciel, nous allons ajouter la valeur 1 dans notre vecteur (ça sert à calculer l'ordonnée à l'origine. On a maintenant:

                          x_1 = (1, f_1, f_2, ..., f_k)


                          C'est là que le cours fait une confusion entre X et les x_i.

                          Si x est une variable alors on doit écrire x = (1, f_1, ..., f_k), c'est un vecteur.

                          Si x est l'échantillon alors on doit écrire x = (x_1, ..., x_n), c'est un vecteur de vecteurs, soit une matrice.

                          Mais x = (1, x_1, ..., x_n) c'est faux

                          Donc pour être clair partons sur:

                          • des individus x_i = (1, f_i1, f_i2, ... f_ik) qui sont des vecteurs
                          • un échantillon  X = (x_1, x_2, ... x_N) qui est une matrice de dimension (N, k+1), soit un vecteur de N vecteurs de taille k+1 (nos N individus).

                          Puisque nous sommes dans un cas de dimension 1, on aura donc

                          x_i = (1,  s_i)

                          avec s_i la surface du logement i.

                          On va garder ŷ = (ŷ_1, ..., ŷ_N), le vecteur contenant les N loyers.

                          Pour rappel, on cherche l'équation d'une droite affine de la forme y = ax + b.

                          Ou, comme écrit dans le cours ŷ_i = theta_1 * x_i + theta_0 .

                          ça c'est le résultat du calcul de l'estimation de 1 loyer, pour le logement i. 

                          Maintenant, pour résoudre le problème pour nos N logements, nous allons utiliser le calcul matriciel et donc on va pouvoir utiliser une formule de la forme

                          ŷ = theta_T * X

                          theta = (theta_0, theta_1)  (vecteur de dimension (2, 1)

                          X notre échantillons (une matrice de dimension (N, 2)

                          ŷ l'estimation de l'ensemble des loyer (un vecteur de taille N)

                          Avec une formulation différente, on peut écrire:

                          E l'erreur que l'on ignore.

                          Rappel, le produit de matrice d'après Wikipedia:

                          On a donc une matrice X de taille (N, 2) multipliant un vecteur A de dimension (2, 1), ce qui doit nous donner un vecteur ŷ de dimension (N, 1).

                          Je crois que c'est ce à quoi tu arrives comme conclusion.

                          Pour écrire la formule comme dans le cours, il suffit de se souvenir que:

                          Le code python fait d'ailleurs ce même calcul en créant la matrice X.

                          En fait on a une matrice (2, N) avec une première rangée de 1, ce que fait le professeur avec le code python:

                          X = np.matrix([np.ones(house_data.shape[0]), house_data['surface'].as_matrix()]).T
                          y = np.matrix(house_data['loyer']).T

                          Voilà, je pense que j'ai bien expliqué où était l'erreur j'espère que c'est clair pour tout le monde et que le cours sera corrigé.

                          -
                          Edité par QuentinLeguay 7 janvier 2019 à 0:22:13

                          • Partager sur Facebook
                          • Partager sur Twitter
                            29 janvier 2019 à 10:35:29

                            Bonjour tout le monde,

                             Je me permets de vous exposer mon problème car je bloque sur l'import du dataset MNIST et j'ose espérer avoir un coup de pouce pour pouvoir continuer le cours. Je précise que je suis sur python3

                            Sauvez une apprenti datascientist en detresse :)

                            Kazon.

                            -
                            Edité par kazon 29 janvier 2019 à 10:53:48

                            • Partager sur Facebook
                            • Partager sur Twitter
                              7 février 2019 à 19:03:02

                              Bonjour tout le monde,

                              je beugue au niveau tu TP : Allez plus loin.... , est ce que quelqu'un a pu avancer là dessus, j'ai divisé les données en 2 mais ensuite j'ai pas su est ce qu'il faut revenir vers la regression ou bien continuer avec le KNN?

                              Merci D'avance. 

                              • Partager sur Facebook
                              • Partager sur Twitter
                                20 février 2019 à 21:30:33

                                NABILSEFTA a écrit:

                                Bonjour tout le monde,

                                je beugue au niveau tu TP : Allez plus loin.... , est ce que quelqu'un a pu avancer là dessus, j'ai divisé les données en 2 mais ensuite j'ai pas su est ce qu'il faut revenir vers la regression ou bien continuer avec le KNN?

                                Merci D'avance. 


                                Bonjour je suis exactement au même point ! J'envisage de creuser la piste de la Regression Multiple et peut être un KNN bi dimension si c'est possible I don't know ! Help :) 

                                Si quelqu'un peut nous donner un indice pour nous débloquer ! J'ai du mal à saisir ec qu'il faut faire.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  25 février 2019 à 14:16:00

                                  Bonjour,

                                  Je n'arrive pas à compiler:

                                  from sklearn import linear_model

                                  regr = linear_model.LinearRegression()

                                  regr.fit(surface, loyer) regr.predict(donnee_test)

                                  ---------------------------------------------------------------------------
                                  NameError                                 Traceback (most recent call last)
                                  <ipython-input-12-a0a81b9061aa> in <module>()
                                   1 from sklearn import linear_model
                                   2 regr = linear_model.LinearRegression()
                                  ----> 3regr.fit(surface, loyer)
                                   4 regr.predict(donnee_test)
                                  
                                  NameError: name 'surface' is not defined

                                  -
                                  Edité par milenasilva 25 février 2019 à 14:16:57

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    28 février 2019 à 11:26:42

                                    milenasilva a écrit:

                                    Bonjour,

                                    Je n'arrive pas à compiler:

                                    from sklearn import linear_model

                                    regr = linear_model.LinearRegression()

                                    regr.fit(surface, loyer) regr.predict(donnee_test)

                                    ---------------------------------------------------------------------------
                                    NameError                                 Traceback (most recent call last)
                                    <ipython-input-12-a0a81b9061aa> in <module>()
                                     1 from sklearn import linear_model
                                     2 regr = linear_model.LinearRegression()
                                    ----> 3regr.fit(surface, loyer)
                                     4 regr.predict(donnee_test)
                                    
                                    NameError: name 'surface' is not defined

                                    -
                                    Edité par milenasilva 25 février 2019 à 14:16:57

                                    Bonjour,

                                    Tu n'as pas défini les variables surface et loyer

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Le savant ce n'est pas celui qui a le plus appris mais c'est celui qui a le plus compris.

                                      17 mars 2019 à 19:50:59

                                      bonjour chez moi, la fonction read et la variable fecth_mldtata ne sont pas définis selon mon notebook

                                      et cela m'empêche de continuer ce cours(je suis au premier TP)

                                      EXEMPLE :

                                      • FileNotFoundError                         Traceback (most recent call last)
                                        <ipython-input-10-b3786dca68d3> in <module>
                                        ----> 1pd.read_csv('house.csv')

                                      • D:\CHARLES\jupyter notebook\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, escapechar, comment, encoding, dialect, tupleize_cols, error_bad_lines, warn_bad_lines, skipfooter, doublequote, delim_whitespace, low_memory, memory_map, float_precision)
                                            676                     skip_blank_lines=skip_blank_lines)
                                            677
                                        --> 678return _read(filepath_or_buffer, kwds)
                                            679
                                            680     parser_f.__name__ = name

                                      • D:\CHARLES\jupyter notebook\lib\site-packages\pandas\io\parsers.py in _read(filepath_or_buffer, kwds)
                                            438
                                            439# Create the parser.
                                        --> 440parser = TextFileReader(filepath_or_buffer,**kwds)
                                            441
                                            442if chunksize or iterator:

                                      • D:\CHARLES\jupyter notebook\lib\site-packages\pandas\io\parsers.py in __init__(self, f, engine, **kwds)
                                            785             self.options['has_index_names']= kwds['has_index_names']
                                            786
                                        --> 787self._make_engine(self.engine)
                                            788
                                            789def close(self):

                                      • D:\CHARLES\jupyter notebook\lib\site-packages\pandas\io\parsers.py in _make_engine(self, engine)
                                           1012def _make_engine(self, engine='c'):
                                           1013if engine =='c':
                                        -> 1014self._engine = CParserWrapper(self.f,**self.options)
                                           1015else:
                                           1016if engine =='python':

                                      • D:\CHARLES\jupyter notebook\lib\site-packages\pandas\io\parsers.py in __init__(self, src, **kwds)
                                           1706         kwds['usecols']= self.usecols
                                           1707
                                        -> 1708self._reader = parsers.TextReader(src,**kwds)
                                           1709
                                           1710         passed_names = self.names isNone

                                      • pandas\_libs\parsers.pyx in pandas._libs.parsers.TextReader.__cinit__()

                                      • pandas\_libs\parsers.pyx in pandas._libs.parsers.TextReader._setup_parser_source()

                                      • FileNotFoundError: File b'house.csv' does not exist

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        29 mars 2019 à 18:54:35

                                        Salut j'ai une question, j'aimerais savoir comment faire pour réaliser un réseau de neurones qui traite du texte? Mon problème est que je ne sais pas comment faire un réseau à entrées variables ... Merci
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          1 avril 2019 à 9:41:08

                                          @SwordBlade57 : Ta question est HS dans ce sujet qui concerne le cours d'initiation au machine learning, tu devrais plutôt poser un nouveau sujet.

                                          @BelgiCamera & Kazon : fecth_mldtata est obsolète, il faut remplacer cette partie par

                                          from sklearn.datasets import fetch_openml
                                          mnist = fetch_openml(name='mnist_784')

                                          (en cas de problème de mémoire, on peut choisir un autre jeu de données, par exemple gina_prior, qui classe les chiffres selon qu'ils sont pairs ou impairs).

                                          -
                                          Edité par Sk. 1 avril 2019 à 9:53:55

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            2 avril 2019 à 10:51:44

                                            Avis à tous : pensez aux autres étudiants qui doivent corriger vos TPs, mettez des commentaires et des explications PARTOUT SVP, et idéalement présentez le TP sous la forme d'un notebook (Jupyter), c'est tellement plus lisible qu'un bout de code non commenté qui n'affiche aucun résultat ! Franchement des fois ça donne envie de mettre un zéro et de passer au suivant (ne pas le faire, hein ! ;) )… A contrario ça fait plaisir de corriger un notebook bien présenté avec des explications.

                                            Sinon pour le TP sur les loyers, je trouve aussi que l'énoncé n'est pas très clair sur ce qui est attendu (note aux enseignants : c'est dommage que les critères de notation ne soient pas toujours donnés dans l'énoncé, c'est parfois difficile de savoir à quoi s'en tenir).

                                            En fait il faut revenir quelques chapitres en arrière, les pistes sont données explicitement à la fin du premier TP :

                                            Que se passe-t-il si : 

                                            • on change l’hypothèse de linéarité (une droite) et qu’on en prend une autre (un polynôme du second degré par exemple) ?

                                            • on teste le modèle avec d’autres types d’erreurs que la distance euclidienne ?

                                            • on ajoute des features (dimensions) supplémentaires en entrée ?

                                            • au fur et à mesure que  la surface augmente, les données on l'air d'être de plus en plus "éparses", comment intégrer ce comportement dans ma modélisation ?

                                            Question subsidiaire : le numéro de l'arrondissement est-il une variable quantitative ? ;)

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              13 avril 2019 à 22:56:58

                                              Je pense que l'activité encourage une grossière erreur de raisonnement. Je suis très sceptique sur l'approche suggérée par l'énoncé, et plus encore par la correction (sans vouloir la dévoiler). Ou alors c'est que je n'ai rien compris et ce serait sympa qu'on m'explique !

                                              En effet, quand l'énoncé parle d'ajouter une feature, et de "meilleures performances que la baseline (régression linéaire avec une seule feature)", il pousse naturellement les étudiants à tester une régression linéaire sur les deux features [surface, arrondissement]. Ce n'est pas un secret. C'est d'ailleurs ce qui a été fait dans tous les devoirs que j'ai corrigés.

                                              Techniquement, c'est très bien. Mais sur le raisonnement, ça me paraît complètement insensé : contrairement aux surfaces, il n'existe aucune relation linéaire entre les loyers et les numéros d'arrondissements. Cela reviendrait à dire que dans le 3ème arrondissement, vous êtes plus influencé par les loyers du 1er arrondissement que par les loyers du 10ème. Cela pourrait se comprendre s'il y avait une proximité géographique, mais en l'occurrence ce n'est pas nécessairement le cas.

                                              Plus choquant : si, dans la régression obtenue, les loyers prédits sont 10% moins chers dans le 2ème arrondissement par rapport au 1er arrondissement (ce qui peut se concevoir, non ?), alors ils devraient être 90% moins chers dans le 10ème arrondissement ( 10%x(10-1)/(2-1) ), et négatifs dans le 20ème. Cela n'a pas de sens !

                                              Pour s'en convaincre encore, il suffit de faire un plot avec les arrondissements en abscisses et les loyers en ordonnées (ce qu'ont fait 2 des devoirs que j'ai corrigés) pour voir que la répartition n'est pas du tout linéaire en fonction du numéro d'arrondissement.

                                              L'un des devoirs que j'ai corrigés proposait une méthode supplémentaire qui n'était pas une régression linéaire, mais qui était aussi basée en grande partie sur la différence entre les numéros d'arrondissements. Là encore, le scoring était bon mais c'est irréaliste.

                                              Ce n'est pas parce qu'on obtient de bons résultats que le modèle est bon, et encore moins que l'étudiant a compris comment faire des choix judicieux. C'est pourtant une bonne moitié des compétences attendues, si j'ai bien suivi ?

                                              Cela pourrait en rester là si la correction n'en rajoutait pas une couche. Ceux qui l'ont lue comprendront de quoi je veux parler.

                                              Je propose de modifier la correction sur ce point, et d'inciter les étudiants dans l'énoncé à se poser la question de la vraisemblance des modèles choisis. Pourquoi ne pas les aiguiller vers certains types de modèles, parce qu'en l'état il faut aller chercher au-delà de ce qui est décrit dans le cours et on est un peu largués dans la nature.

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                16 avril 2019 à 6:27:16

                                                Bonjour Zachee54, c'est absolument vrai. C'est une erreur grossière de ce cours de ne pas l'aborder. Vous pouvez trouver davantage de détails dans le cours sur la préparation des données.

                                                La solution ici est de transformer chaque arrondissement en variable booléenne indépendante puisqu'il n'y a pas de relation linéaire comme cela existe pour la surface.

                                                arr_1, arr_2, arr_3, etc.... Chaque appartement ne pouvant évidemment être que dans un arrondissement à la fois.

                                                                        ar_1  ar_2  ar_3  ar_4  ar_10 
                                                Appartement_1    0       0       1        0       0 
                                                Appartement_2    0       1       0        0       0 
                                                Appartement_3    0       0      0        0       1 
                                                Appartement_4    0       1       0        0       0 

                                                Etc....

                                                Il est aussi possible d'encoder toutes les variables en une, on appelle ça le one hot encoding. En reprenant l'exemple ci-dessus:

                                                                         Surface  Arrondissement  Prix

                                                Appartement_1       40       [0, 0, 1, 0, 0]   ....

                                                Appartement_2       24       [0, 1, 0, 0, 0]   ....

                                                Appartement_3       15       [0, 0, 0, 0, 1]   ....

                                                Appartement_4       30       [0, 1, 0, 0, 0]   ....

                                                Pour en revenir à l'exercice, je l'ai déjà signalé il y a plusieurs mois. Ce n'est pas la seule erreur (voir plus haut) mais rien n'a changé et des étudiants continuerons à apprendre des âneries puisque la correction par les pairs n'est en rien un gage de qualité ici.

                                                Je vous encourage à contacter hello@openclassrooms.com pour leur faire part de votre retour, apparemment ils adorent les feedbacks. Moi je vais les relancer. Peut-être qu'ils se bougeront cette fois.

                                                -
                                                Edité par QuentinLeguay 16 avril 2019 à 6:30:44

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  18 avril 2019 à 21:59:50

                                                  Bonsoir,

                                                  pour information j'ai réussi une réponse d'OpenClassrooms concernant ce cours:

                                                  J'ai pu avoir un retour sur le cours "initiez-vous au machine learning" et celui-ci fera l'objet d'une mise à jour d'ici la fin de mois. 
                                                  
                                                  Ces changements prennent du temps donc nous n'avons pas eu trop de nouvelles ces dernières semaines mais ce cours sera donc bientôt bien à jour. 
                                                  
                                                  Ouvrez l'oeil donc, je n'ai pas encore d'informations sur la communication autour de la mise à jour de ce cours. Il sera peut-être annoncé aux personnes suivant le cours !


                                                  Donc à priori il y a bien des erreurs dans le cours et ça prend un peu (trop) de temps pour le corriger.

                                                  Si vous avez des doutes ou trouvez des erreurs, signalez les directement via hello@openclassrooms.com plutôt que dans le forum car personne chez eux ne va le consulter.

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    17 mai 2019 à 15:25:22

                                                    Bonjour,

                                                    J'essaie de faire le premier TP sur les loyers mais je me heurte au fait que dans le tableau de données fourni certaines valeurs sont manquantes pour le prix. Resultat: des [nan]... Est-ce une erreur dans les données? ou un test? Dois-je automatiser l'élimination des lignes avec des valeurs manquantes ou puis-je le faire à la main?

                                                    Merci d'avance

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      17 mai 2019 à 17:37:13

                                                      Bonsoir @MarieGérus-Durand

                                                      Effectivement, il faut "nettoyer" les données pour éviter les "nan";

                                                      Bon courage

                                                      -
                                                      Edité par Philippe2463 17 mai 2019 à 23:02:08

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      La chute n'est pas un échec, l'échec c'est de rester là où on est tombé!
                                                        19 mai 2019 à 9:37:48

                                                        Bonjour

                                                        Serait-il possible d'avoir les critères d'évaluation pour l'activité sur le loyer ?

                                                        Merci d'avance et bonne journée.

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          20 mai 2019 à 14:32:54

                                                          ChristopheLebrun2 a écrit:

                                                          Bonjour

                                                          Serait-il possible d'avoir les critères d'évaluation pour l'activité sur le loyer ?

                                                          Merci d'avance et bonne journée.

                                                          Je suis d'accord avec Christophe, avoir les critères d'évaluation de tous les tests en général aiderait grandement

                                                          Merci

                                                          -
                                                          Edité par MarieGérus-Durand 20 mai 2019 à 14:34:27

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            20 mai 2019 à 15:31:25

                                                            ChristopheLebrun2 a écrit:

                                                            Bonjour

                                                            Serait-il possible d'avoir les critères d'évaluation pour l'activité sur le loyer ?

                                                            Merci d'avance et bonne journée.

                                                            Je précise que le cours a été mis à jour depuis que je l'ai fait. Je ne sais pas si l'activité a changé aussi.

                                                            Quand je l'ai passée, les critères d'évaluation correspondaient exactement aux objectifs énoncés.

                                                            À ce stade, on ne vous demande pas de savoir trouver "le" bon modèle, mais d'essayer plusieurs modèles ou plusieurs approches et d'en tirer des conclusions simples. C'est dans la dernière partie, puis dans d'autres cours, que vous verrez quelques critères pour choisir un bon modèle.

                                                            L'activité pousse un peu à faire des choix qui n'ont pas de sens (cf. mon post du 13/04/19) ; ce n'est pas ce qui est évalué ici, donc ne vous inquiétez pas. Mais tant qu'à faire, en creusant un peu on peut quand même trouver des approches intelligentes.

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              30 mai 2019 à 16:20:54

                                                              J'ai le même problème que MoBo2, si quelqu'un pouvait lui répondre ce serait cool :)


                                                              MoBo2 a écrit:

                                                              Bonjour à tous, j'ai globalement compris tout le TP de régression linéaire à l'exception de la définition de la matrice X

                                                              # On décompose le dataset et on le transforme en matrices pour pouvoir effectuer notre calcul
                                                              X = np.matrix([np.ones(house_data.shape[0]), house_data['surface'].as_matrix()]).T
                                                              y = np.matrix(house_data['loyer']).T
                                                              
                                                              

                                                              En effet, j'ai bien compris qu'il fallait une ordonnée à l'origine, mais le reste ne me parait pas clair, pourquoi avoir besoin d'avoir un vecteur constitué de 1 (le fameux np.ones...)

                                                              alors que pour la matrice y, il suffit de la définir de manière classique y = np.matrix(house_data['loyer']) ?

                                                              N'aurait-on pas pu tout simplement définir X = np.matrix(house_data['surface']) ?

                                                              Merci pour votre aide, au passage, cours très bien expliqué à l'exception de ce petit passage.

                                                              -
                                                              Edité par MoBo2 7 mars 2018 à 17:10:49


                                                              Ça y est j'ai compris ! 

                                                              Notre matrice X doit avoir en première colonne des 1, et la colonne doit faire la taille de notre colonne Y

                                                              Voir ce cours pour mieux comprendre : 

                                                              https://cel.archives-ouvertes.fr/cel-01387714v4/document

                                                              -
                                                              Edité par Apoilon 30 mai 2019 à 16:29:35

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              [Cours] Initiez-vous au machine learning

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