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 linéaire


Régression

Le terme régression est utilisé lorsque vous essayez de trouver la relation entre des variables.

Dans l'apprentissage automatique et dans la modélisation statistique, cette relation est utilisée pour prédire le résultat d'événements futurs.


Régression linéaire

La régression linéaire utilise la relation entre les points de données pour tracer une ligne droite à travers eux.

Cette ligne peut être utilisée pour prédire les valeurs futures.

En Machine Learning, prédire l'avenir est très important.


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 linéaire. Nous allons vous montrer comment utiliser ces méthodes au lieu de passer par la formule mathématique.

Dans l'exemple ci-dessous, l'axe des x représente l'âge et l'axe des y représente la vitesse. Nous avons enregistré l'âge et la vitesse de 13 voitures alors qu'elles passaient devant un poste de péage. Voyons si les données que nous avons collectées pourraient être utilisées dans une régression linéaire :

Exemple

Commencez par dessiner un nuage de points :

import matplotlib.pyplot as plt

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

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

Résultat:

Exemple

Importez scipyet tracez la ligne de régression linéaire :

import matplotlib.pyplot as plt
from scipy import stats

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
  return slope * x + intercept

mymodel = list(map(myfunc, x))

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

Résultat:

Exemple expliqué

Importez les modules dont vous avez besoin.

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

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

import matplotlib.pyplot as plt
from scipy import stats

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

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

Exécutez une méthode qui renvoie certaines valeurs clés importantes de la régression linéaire :

slope, intercept, r, p, std_err = stats.linregress(x, y)

Créez une fonction qui utilise les valeurs slopeet interceptpour renvoyer une nouvelle valeur. Cette nouvelle valeur représente où sur l'axe y la valeur x correspondante sera placée :

def myfunc(x):
  return slope * x + intercept

Exécutez chaque valeur du tableau x via la fonction. Cela se traduira par un nouveau tableau avec de nouvelles valeurs pour l'axe des ordonnées :

mymodel = list(map(myfunc, x))

Dessinez le nuage de points d'origine :

plt.scatter(x, y)

Tracez la droite de régression linéaire :

plt.plot(x, mymodel)

Affichez le diagramme :

plt.show()



R pour Relation

Il est important de savoir quelle est la relation entre les valeurs de l'axe des x et les valeurs de l'axe des y, s'il n'y a pas de relation, la régression linéaire ne peut pas être utilisée pour prédire quoi que ce soit.

Cette relation - le coefficient de corrélation - est appelée r.

La rvaleur est comprise entre -1 et 1, où 0 signifie aucune relation et 1 (et -1) signifie 100 % lié.

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

Exemple

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

from scipy import stats

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

slope, intercept, r, p, std_err = stats.linregress(x, y)

print(r)

Remarque : Le résultat -0,76 montre qu'il existe une relation, non parfaite, mais il indique que nous pourrions utiliser la régression linéaire 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 de 10 ans.

Pour ce faire, nous avons besoin de la même myfunc()fonction de l'exemple ci-dessus :

def myfunc(x):
  return slope * x + intercept

Exemple

Prédire la vitesse d'une voiture de 10 ans :

from scipy import stats

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
  return slope * x + intercept

speed = myfunc(10)

print(speed)

L'exemple prévoyait une vitesse à 85,6, que nous pouvions également lire sur le diagramme :


Mauvais ajustement ?

Créons un exemple où la régression linéaire 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 linéaire :

import matplotlib.pyplot as plt
from scipy import stats

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]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
  return slope * x + intercept

mymodel = list(map(myfunc, x))

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

Résultat:

Et la rrelation?

Exemple

Vous devriez obtenir une rvaleur très faible.

import numpy
from scipy import stats

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]

slope, intercept, r, p, std_err = stats.linregress(x, y)

print(r)

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