Python Tutorial

Python Machine Learning 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 :

importer matplotlib.pyplot en tant que 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 d’exécution »

Exemple

Importer numpy et
matplotlib
puis tracez la ligne de régression polynomiale :

importer numpy
importer matplotlib.pyplot en tant que 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]

monmodèle = numpy.poly1d(numpy.polyfit(x, y, 3))

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

plt.scatter(x, y)
plt.plot(maligne, monmodèle(maligne))
plt.show()

Résultat:

Exemple d’exécution »

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 :

Tracez la droite de régression polynomiale :


plt.plot(myline, mymodel(myline))

Affichez le diagramme :



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 ?

importer numpy
à partir de sklearn.metrics importer 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]

monmodèle = numpy.poly1d(numpy.polyfit(x, y, 3))

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

Essayez si vous-même »

Note: 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 au péage vers 17h00 :

Pour ce faire, nous avons besoin du même mymodel tableau de l’exemple ci-dessus :


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

Exemple

Prédire la vitesse d’une voiture passant à 17h00 :

importer numpy
à partir de sklearn.metrics importer 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]

monmodèle = numpy.poly1d(numpy.polyfit(x, y, 3))

vitesse = monmodèle(17)
impression (vitesse)

Exemple d’exécution »

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 :

importer numpy
importer matplotlib.pyplot en tant que 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]

monmodèle = numpy.poly1d(numpy.polyfit(x, y, 3))

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

plt.scatter(x, y)
plt.plot(maligne, monmodèle(maligne))
plt.show()

Résultat:

Exemple d’exécution »

Et la valeur r au carré ?

Exemple

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

importer numpy
à partir de sklearn.metrics importer 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]

monmodèle = numpy.poly1d(numpy.polyfit(x, y, 3))

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

Essayez si vous-même »

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.


#Python #Machine #Learning #Régression #polynomiale

Related Articles

Back to top button