Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Cours] Initiez-vous au machine learning

Découvrez les bases du machine learning

    13 novembre 2019 à 11:44:05

    Charles-HenriDupire a écrit:

    bonjour, 

    est-ce que ton fichier est bien dans le même dossier que ton fichier notebook? Sinon il faut soit le déplacer, soit mettre le chemin absolu à la place de 'house.csv'


    Merci Charles-Henri, ça marche désormais
    • Partager sur Facebook
    • Partager sur Twitter
      11 décembre 2019 à 15:42:27

      Bonjour,

      J'ai fini ce cours et ai décidé de faire l'activité à la fin. J'ai voulu (peut être est-ce là l'erreur) appliquer la méthode des plus proches voisins à cet exemple.
      Et les erreurs que je trouve sont énormes (95%). En reprenant bêtement le code j'ai trouvé que ça ne passait pas pour le knn.fit() car je n'avais pas de array-like en entrée. Si qqn a une idée d'où vient mon problème je suis preneuse! bonne journée et merci d'avance :)

      import numpy as np
      import pandas as pd
      import matplotlib.pyplot as plt




      # On charge le dataset
      house_data = pd.read_csv('house.csv')
      x=house_data['surface']
      y=house_data['loyer']
      from sklearn.model_selection import train_test_split
      xtrain, xtest, ytrain, ytest = train_test_split(x, y, train_size=0.8)
      xtrain=xtrain.values.reshape(-1,1)
      xtest=xtest.values.reshape(-1,1)


      #Méthode plus proches voisins
      from sklearn import neighbors
      knn = neighbors.KNeighborsClassifier(n_neighbors=3)
      knn.fit(xtrain, ytrain)
      error = 1 - knn.score(xtest, ytest)
      print('Erreur: %f' % error)

      • Partager sur Facebook
      • Partager sur Twitter
        12 décembre 2019 à 11:17:02

        Vous utilisez un classifieur alors qu'il s'agit d'un problème d'estimation.
        Classifier, c'est mettre dans des cases : "ceci est un chat", "ceci est un hélicoptère", etc.
        Estimer, c'est donner une valeur : "ceci vaut environ 120 €".

        Si vous avez 5 voisins qui valent 120, 120, 180, 183, 190, alors votre KNeighborsClassifier va renvoyer "120" parce que c'est le résultat le plus fréquent. Un estimateur KNN aurait renvoyé une moyenne ou une médiane, c'est-à-dire environ 180.
        Votre classifieur fait ça parce qu'il considère que les nombres sont des classes (= des cases, des boîtes...), et celle qui est la plus représentée est 120. Donc il vous dit : "Ceci est un '120' ".

        Je vous laisse trouver le bon estimateur à utiliser. Il n'est pas dans le cours, il faut le chercher dans la doc.

        NB : Au-delà de ça, ça n'a pas de sens de vouloir utiliser un KNN sur les arrondissements. La proximité des numéros d'arrondissements n'implique pas une proximité des loyers.
        Mais il est un peu difficile à ce stade de trouver par soi-même un modèle pertinent. Vous ne serez pas pénalisée pour avoir utilisé un KNN.

        • Partager sur Facebook
        • Partager sur Twitter
          20 décembre 2019 à 10:23:13

          BenjaminHannache a écrit:

          Bonjour à tous,

          Je suis resté bloqué quelque temps au chapitre "TP Entrainez le modèle des plus proches voisins KNN."

          En effet, La commande "mnist = fetch_mldata('MNIST original', data_home='./scikit_learn_data')" ne permettait pas récupérer le dataset : donc impossible réaliser le TP.

          Le problème est apparu plusieurs fois, (cf le forum Open Classroom et le Github de Scikit Learn) , car la source du data set est injoignable.

          J'ai donc trouvé une source alternative ici :https://github.com/amplab/datascience-sp14/raw/master/lab7/mldata/mnist-original.mat

          En plaçant le fichier dans le repertoire './scikit_learn_data/mddata', ca fonctionne ! (nom du dossier à adapter en fonction de celui que vous spécifiez en appelant la fonction fetch_mldata.

          -
          Edité par BenjaminHannache 22 juillet 2018 à 15:48:55

          A ce propos, j'aurai des questions à propos de l'activité du cours clustering, mais il n'y a apparemment pas de forum dédié...

          • Partager sur Facebook
          • Partager sur Twitter
            10 janvier 2020 à 0:03:46

            Bonjour,

            je suis débutant en codage python et je me suis intéressé à ce mooc. J'utilise Jupyter.

            Voici le code que j'ai pu élaboré pour l'instant pour l'exercice de l'activité qui concerne le dataset, prix, surface, arrondissement à faire évoluer.

            Je trouve que les notions dans ce mooc ne sont pas très accessibles, j'ai l'impression de faire sans comprendre et ce faisant, je ne peux expliquer pourquoi j'obtiens tel ou tel résultat.

            Par exemple mon nuage de point est bizarre et j'ai une droite à la base de mon axe.

            Aussi, ca serait vraiment sympathique si quelqu'un pouvait m'expliquer point par point la démarche, son effet sur le dataset, comment se deroule sa transcription sur python ainsi que la notion de training et testing (que je comprends via le cours mais je ne comprends pas la ligne de code et son implication par rapport au graphique et au dataset).

            Merci aux bonnes âmes qui voudront bien m'expliquer.

            Al

            import numpy as np
            import pandas as pd
            import matplotlib.pyplot as plt
            house_data=pd.read_csv(r'house_data.csv')
            plt.plot(house_data['surface'], house_data['arrondissement'], house_data['price'], 'ro', markersize=2)
            
            
            plt.show()
            
            
            X = np.matrix([np.ones(house_data.shape[0]), house_data['surface'].to_numpy(), house_data['arrondissement'].to_numpy()]).T
            y = np.matrix(house_data['price']).T
            
            from sklearn.model_selection import train_test_split
             
                
            xtrain, xtest, ytrain, ytest = train_test_split(X, y, train_size=0.8)
            
            theta = np.linalg.inv(xtrain.T.dot(xtrain)).dot(xtrain.T).dot(ytrain)
             
            print(theta)


            • Partager sur Facebook
            • Partager sur Twitter
              10 janvier 2020 à 9:37:28

              Tu donnes 3 arguments à ta fonction plot : les surfaces, les arrondissements et les loyers.
              À en croire la documentation, ce n'est pas une syntaxe habituelle. Mais je suppose qu'il te représente :

              • les loyers en fonction de la surface (ok, c'est ce qui est dans le cours)
              • les numéros d'arrondissements en fonction de la surface, ce qui n'a aucun intérêt et qui te dessine une série de points très proche de l'axe des abscisses (car les numéros d'arrondissements sont des petits nombres).

              Le problème est que tu ne sais probablement pas toi-même ce que tu veux représenter. À quoi te sert-il d'avoir les arrondissements sur l'axe des ordonnées ??!?
              Si tu veux une visualisation, il vaut mieux que tu fasses un graphique différent pour chaque arrondissement. Et encore, ce n'est peut-être pas très utile.

              Ensuite, ne te prends pas la tête avec linalg. Utilise les modèles scikit-learn !
              Tu en trouves déjà un certain nombre dans le cours, et si tu es curieux tu peux en trouver d'autres tout aussi simples dans la documentation. Par exemple une régression quadratique ?

              La suite du parcours data scientist te permettra d'apprendre à manipuler de nombreux autres modèles. Ce n'est pas encore l'objectif de ce cours.

              La fonction train_test_split te fait une partition des données. Elle renvoie un tableau de 4 valeurs [X_train, X_test, y_train, y_test].
              En Python, on peut faire une affectation mutiple c'est-à-dire que ta ligne est équivalente à :

              split = train_test_split(X, y, train_size=0.8)
              xtrain = split[0]
              xtest = split[1]
              ytrain = split[2]
              ytest = split[3]
              • 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