Tutoriel Python

Python ACCUEIL Introduction à Python Python pour commencer Syntaxe Python Commentaires Python Variables Python Types de données Python Nombres Python Casting Python Chaînes Python Booléens Python Opérateurs Python Listes Python Tuples Python Ensembles Python Dictionnaires Python Python Si... Sinon Boucles tant que Python Python pour les boucles Fonctions Python Python Lambda Tableaux Python Classes/Objets Python Héritage Python Itérateurs Python Portée Python Modules Python Dates Python Mathématiques Python PythonJSON Python RegEx PIP Python Python Essayer... Sauf Entrée utilisateur Python Formatage de chaîne Python

La gestion des fichiers

Gestion des fichiers Python Fichiers de lecture Python Python écrire/créer des fichiers Python Supprimer des fichiers

Modules Python

Tutoriel NumPy Procédure pas à pas Panda Tutoriel Scipy

Python Matplotlib

Introduction à Matplotlib Matplotlib Commencer MatplotlibPyplot Tracé Matplotlib Marqueurs Matplotlib Ligne Matplotlib Étiquettes Matplotlib Grille Matplotlib Sous-parcelles Matplotlib Matplotlib Scatter Barres Matplotlib Histogrammes Matplotlib Graphiques à secteurs Matplotlib

Apprentissage automatique

Commencer Mode médian moyen Écart-type Centile Diffusion des données Répartition normale des données Nuage de points Régression linéaire Régression polynomiale Régression multiple Échelle Former/Tester Arbre de décision

Python MySQL

MySQL Premiers pas Créer une base de données MySQL Créer une table MySQL Insertion MySQL Sélectionnez MySQL MySQL Où Trier MySQL par Supprimer MySQL Table de dépôt MySQL Mise à jour MySQL Limite MySQL Rejoindre MySQL

Python MongoDB

MongoDB Commencer MongoDB Créer une base de données Créer une collection MongoDB Insertion MongoDB Trouver MongoDB Requête MongoDB Tri MongoDB Supprimer MongoDB Collection de dépôt MongoDB Mise à jour MongoDB Limite MongoDB

Référence Python

Présentation de Python Fonctions intégrées Python Méthodes de chaîne Python Méthodes de liste Python Méthodes du dictionnaire Python Méthodes Python Tuple Méthodes d'ensemble Python Méthodes de fichier Python Mots-clés Python Exceptions Python Glossaire Python

Référence des modules

Module aléatoire Module de demandes Module Statistiques Module de mathématiques Module cMath

Python Comment

Supprimer les doublons de liste Inverser une chaîne Additionner deux nombres

Exemples Python

Exemples Python Compilateur Python Exercices Python Quizz Python Certificat Python

Apprentissage automatique - Régression polynomiale


Régression polynomiale

Si vos points de données ne correspondent clairement pas à une régression linéaire (une ligne droite passant par tous les points de données), cela pourrait être idéal pour la régression polynomiale.

La régression polynomiale, comme la régression linéaire, utilise la relation entre les variables x et y pour trouver la meilleure façon de tracer une ligne à travers les points de données.


Comment ça marche?

Python a des méthodes pour trouver une relation entre les points de données et pour tracer une ligne de régression polynomiale. Nous allons vous montrer comment utiliser ces méthodes au lieu de passer par la formule mathématique.

Dans l'exemple ci-dessous, nous avons enregistré 18 voitures alors qu'elles passaient devant un certain poste de péage.

Nous avons enregistré la vitesse de la voiture et l'heure de la journée (heure) à laquelle le dépassement s'est produit.

L'axe des x représente les heures de la journée et l'axe des y représente la vitesse :

Exemple

Commencez par dessiner un nuage de points :

import matplotlib.pyplot as plt

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

plt.scatter(x, y)
plt.show()

Résultat:

Exemple

Importez numpypuis matplotlibtracez la ligne de régression polynomiale :

import numpy
import matplotlib.pyplot as plt

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

myline = numpy.linspace(1, 22, 100)

plt.scatter(x, y)
plt.plot(myline, mymodel(myline))
plt.show()

Résultat:

Exemple expliqué

Importez les modules dont vous avez besoin.

Vous pouvez en savoir plus sur le module NumPy dans notre Tutoriel NumPy .

Vous pouvez en savoir plus sur le module SciPy dans notre didacticiel SciPy .

import numpy
import matplotlib.pyplot as plt

Créez les tableaux qui représentent les valeurs des axes x et y :

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

NumPy a une méthode qui nous permet de faire un modèle polynomial :

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Spécifiez ensuite comment la ligne s'affichera, nous commençons à la position 1 et terminons à la position 22 :

myline = numpy.linspace(1, 22, 100)

Dessinez le nuage de points d'origine :

plt.scatter(x, y)

Tracez la droite de régression polynomiale :

plt.plot(myline, mymodel(myline))

Affichez le diagramme :

plt.show()



R au carré

Il est important de savoir à quel point la relation entre les valeurs des axes x et y est bonne, s'il n'y a pas de relation, la régression polynomiale ne peut pas être utilisée pour prédire quoi que ce soit.

La relation est mesurée avec une valeur appelée le r au carré.

La valeur r au carré varie de 0 à 1, où 0 signifie aucune relation et 1 signifie 100 % lié.

Python et le module Sklearn calculeront cette valeur pour vous, tout ce que vous avez à faire est de l'alimenter avec les tableaux x et y :

Exemple

Dans quelle mesure mes données s'intègrent-elles dans une régression polynomiale ?

import numpy
from sklearn.metrics import r2_score

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

print(r2_score(y, mymodel(x)))

Remarque : Le résultat 0,94 montre qu'il existe une très bonne relation, et nous pouvons utiliser la régression polynomiale dans les prédictions futures.


Prédire les valeurs futures

Nous pouvons maintenant utiliser les informations que nous avons recueillies pour prédire les valeurs futures.

Exemple : Essayons de prédire la vitesse d'une voiture qui passe le péage vers 17h :

Pour ce faire, nous avons besoin du même mymodeltableau que dans l'exemple ci-dessus :

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Exemple

Prédire la vitesse d'une voiture qui passe à 17h :

import numpy
from sklearn.metrics import r2_score

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

speed = mymodel(17)
print(speed)

L'exemple prévoyait une vitesse de 88,87, ce que nous pouvions également lire sur le diagramme :


Mauvais ajustement ?

Créons un exemple où la régression polynomiale ne serait pas la meilleure méthode pour prédire les valeurs futures.

Exemple

Ces valeurs pour les axes x et y devraient entraîner un très mauvais ajustement pour la régression polynomiale :

import numpy
import matplotlib.pyplot as plt

x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

myline = numpy.linspace(2, 95, 100)

plt.scatter(x, y)
plt.plot(myline, mymodel(myline))
plt.show()

Résultat:

Et la valeur r au carré ?

Exemple

Vous devriez obtenir une valeur r au carré très faible.

import numpy
from sklearn.metrics import r2_score

x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

print(r2_score(y, mymodel(x)))

Le résultat : 0,00995 indique une très mauvaise relation et nous indique que cet ensemble de données n'est pas adapté à la régression polynomiale.