Niveau
Débutant
Env.
Google Colab
Code
Python
Libs
scikit-learn
Sources

La Régression Linéaire

Régression

Impossible d’aborder les Data sciences ou le Machine Learning sans passer par la case Régression Linéaire. Bien sur, il y a plusieurs type de régression. Nous avons vu dans un précédent article comment utiliser la régression logistique afin d’effectuer une classification ! vous trouvez que ça sonne de manière étrange ? ne vous ai-je pas dit que les algorithmes étaient divisés en plusieurs familles ? Régressions et classifications entre autres ? En fait, c’est vrai … et puis pas tout à fait ! il est en effet tout à fait possible d’utiliser et de mixer les algorithmes.

La Data Science c’est vraiment de la cuisine !

A vrai dire le Monde du Machine Learning est un monde fait d’incertitudes et d’apprentissages. Si les données que l’on traite ont leur aléas il semble que la, ou plutôt les boites à outils nécessaires à leurs traitements n’y fassent pas exception. Ces dernières sont principalement composées d’algorithmes. Ces algorithmes mélangent des probabilités, des statistiques ainsi que de l’algèbre linéaire. C’est pour tout dire une monde très hétéroclite, et l’objectif de cet article est de présenter le plus simple des outils supervisé : la régression linéaire.

Principe de la Régression Linéaire

Le principe est plutôt simple.  Vous constatez une phénomène et incroyable vous détectez qu’il y a un lien entre les paramètres de vos constats (les caractéristiques) et le résultat (l’étiquette). Comme tout bon scientifique vous exploitez donc la géométrie et placez vos constats (points bleu) sur une graphe. En abscisse vous mettrez donc votre caractéristique (on commence simple avec 1 seule) et en ordonnée votre résultat (étiquette).

Incroyable … vos point semblent, mais pas exactement dessiner une droite (donc linéaire) ! a quelques incertitudes près il semblerait donc qu’il y ait un lien linéaire entre votre caractéristique. Vous avez compris ?

La Régression linéaire consiste à deviner quelle est l’équation linéaire qui lie caractéristique(s) et étiquette !

Pour faire simple, l’algorithme va tenter de deviner quelle est l’équation (y = aX + b) (Cf. droite rouge ci-dessus).

Oui mais comment ?

Vous avez remarqué ? il y a vraiment beaucoup de points, et à moins de grossir l’épaisseur du trait, il y a vraiment beaucoup de candidats potentiels pour notre belle droite. Quel candidat choisir et comment ? Tout simplement en prenant en compte la notion d’erreur par rapport aux données d’apprentissage. Je m’explique : dans la phase d’apprentissage nous avons récolté les données nécessaires (nos points bleus). Nous avons de plus une équation candidate calculée par notre algorithme … il suffit maintenant de la confronter à la réalité.

Pour calculer le taux d’erreur, on pourra se baser sur la distance entre le résultat réel et le résultat calculé (Cf. graphe ci-dessus). Rien n’empêchera ensuite de pénaliser telles ou telles plages de valeurs selon des facteurs de dispersion par exemple. Très simplement nous saurons dire (sur les données d’apprentissage) si notre droite répond à 80, 90 ou 99%

Ce taux d’erreur c’est notre cockpit pour affiner les paramètres (a et b ici).

La Régression Linéaire avec Scikit-Learn

Vous avez compris le principe … un peu  de pratique maintenant avec le module Python Scikit-Learn. Pour illustrer mes dires plus haut je vais repartir du jeu de données de la formation Coursera (univariate_linear_regression_dataset.csv). Ces données représentent simplement deux colonnes avec des données numériques.

A l’aide d’un graphe (à points) simple regardons à quoi cela ressemble (ci-dessous).

Python
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('./data/univariate_linear_regression_dataset.csv')
plt.scatter (data.col2, data.col1)
plt.grid()

Vous imaginez la droite se profiler ? pas si simple n’est-ce pas mais on l’imagine pas si mal cependant. utilisons la librairie Scikit-learn pour calculer la régression linéaire sur ces données:

Python
from sklearn import linear_model
X = data.col2.values.reshape(-1, 1)
y = data.col1.values.reshape(-1, 1)
regr = linear_model.LinearRegression()
regr.fit(X, y)
regr.predict(np.array([[30]]))

Faisons même une prédiction avec la valeur 30 pour voir le résultat. Nous obtenons une valeur de 22.37, ce qui n’est pas vraiment incohérent n’est-ce pas au vu des données ?
Maintenant afin de mieux comprendre ce que je vous ai expliqué plus haut je vous propose de rajouter 30 nouvelles valeurs que nous allons rajouter à notre jeu d’apprentissage. pour chaque nouvelle valeur nous ferons une prédiction bien sur.

Python
predictions = range(30,51)
results = []
for pr in predictions :
    results.append([pr, regr.predict(np.array([[pr]]))[0][0]])
myResult = pd.DataFrame(results, columns=['col1', 'col2'])
myResult.head(5)

Vous la voyez maintenant, cette fameuse droite (en haut à droite) se profiler ? là voici  ;

Vous avez trouvé que cette droite n’était pas si simple à trouver visuellement et vous avez raison car le calcul du taux d’erreur (ici très mauvais = 70%) va refléter cette complexité de trouver une relation linéaire entre nos deux valeurs.

Partager cet article

3 Replies to “La Régression Linéaire”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.