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 DataScience 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 carracté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).

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:

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(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.

predictions = range(30,51)
results = []
for pr in predictions :
    results.append([pr, regr.predict(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.

Le notebook Jupyter ici.



A propos de Benoit Cayla

En plus d'être un spécialiste des données et processus d'entreprise, j'aime passer le plus clair de mon temps à l'extérieur, à jardiner par exemple ou simplement à aller dans le bois avec mes enfants. J'adore aussi le VTT que je pratique chaque semaine avec mes amis. Quand je dois rester à l'intérieur, j'aime améliorer ma maison. Bricoler me permet ainsi de libérer ma créativité d'ingénieur. Et, si je n'ai rien à réparer ou créer, je passe mon temps libre à explorer les dernières avancées technologiques dans le monde de l'IA et du RPA.

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

quatre + six =

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