Apprentissage automatique - Régression polynomiale
- Page précédente Régression linéaire
- Page suivante Régression multiple
Régression polynomiale (Polynomial Regression)
Si vos points de données ne conviennent clairement pas à la régression linéaire (une ligne passant entre les points de données), la régression polynomiale pourrait être une bonne option.
Comme la régression linéaire, la régression polynomiale utilise la relation entre les variables x et y pour trouver la meilleure méthode pour tracer la ligne des points de données.

Principe de fonctionnement
Python a plusieurs méthodes pour trouver la relation entre les points de données et tracer la ligne de régression polynomiale. Nous vous montrerons comment utiliser ces méthodes plutôt que par des formules mathématiques.
Dans l'exemple suivant, nous avons enregistré 18 véhicules passant par un péage spécifique.
Nous avons enregistré la vitesse des véhicules et le temps de passage (heures).
L'axe des abscisses représente l'heure d'une journée, l'axe des ordonnées représente la vitesse :
Exemple
Tout d'abord, tracez le graphique des points dispersés :
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
importer numpy
et matplotlib
ensuite, tracez 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 :

Explication de l'exemple
Importer les modules nécessaires :
import numpy import matplotlib.pyplot as plt
Créer un tableau représentant les valeurs de l'axe x et de l'axe 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 pour nous permettre de construire un modèle polynomial :
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Ensuite, spécifiez la manière d'afficher les lignes, nous commençons à la position 1 et finissons à la position 22 :
myline = numpy.linspace(1, 22, 100)
tracer le graphique des points dispersés d'origine :
plt.scatter(x, y)
tracer la ligne de régression polynomiale :
plt.plot(myline, mymodel(myline))
Afficher le graphique :
plt.show()
R-Squared
Il est important de savoir combien bien les valeurs de l'axe x et de l'axe y sont liées, car sans relation, la régression polynomiale ne peut pas être utilisée pour prédire quoi que ce soit.
Cette relation est mesurée par une valeur appelée le coefficient de corrélation (r²).
La plage de la valeur de l'adjus té de la régression (R²) est de 0 à 1, où 0 signifie pas de corrélation, et 1 signifie 100% de corrélation.
Python et le module Sklearn calculeront cette valeur pour vous, tout ce que vous avez à faire est d'entrer les tableaux x et y :
Exemple
Comment mon ajustement de données s'effectue-t-il en 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 indique une bonne relation, nous pouvons utiliser la régression polynomiale pour les prédictions futures.
Prédire les valeurs futures
Maintenant, nous pouvons utiliser les informations collectées pour prédire les valeurs futures.
Par exemple : essayons de prédire la vitesse des véhicules passant par le péage à environ 17 heures le soir :
Pour cela, nous avons besoin des mêmes exemples que ceux ci-dessus mymodel Tableau :
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Exemple
Prédire la vitesse du passage du véhicule à 17 heures l'après-midi :
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)
La vitesse de prédiction de cet exemple est de 88,87, et nous pouvons également le voir sur le graphique :

Mauvaise ajustement ?
Laissons-nous créer un exemple où la régression polynomiale n'est pas la meilleure méthode pour prédire les valeurs futures.
Exemple
Ces valeurs sur les axes x et y entraîneront une mauvaise adéquation de 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 :

Qu'est-ce que la valeur de r-squared ?
Exemple
Vous devriez obtenir une valeur de r-squared très basse.
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)))
Résultat : 0.00995 indique une mauvaise relation et nous dit que ce jeu de données n'est pas adapté à la régression polynomiale.
- Page précédente Régression linéaire
- Page suivante Régression multiple