Index
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).
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(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.
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.
Ingénieur en informatique avec plus de 20 ans d’expérience dans la gestion et l’utilisation de données, Benoit CAYLA a mis son expertise au profit de projets très variés tels que l’intégration, la gouvernance, l’analyse, l’IA, la mise en place de MDM ou de solution PIM pour le compte de diverses entreprises spécialisées dans la donnée (dont IBM, Informatica et Tableau). Ces riches expériences l’ont naturellement conduit à intervenir dans des projets de plus grande envergure autour de la gestion et de la valorisation des données, et ce principalement dans des secteurs d’activités tels que l’industrie, la grande distribution, l’assurance et la finance. Également, passionné d’IA (Machine Learning, NLP et Deep Learning), l’auteur a rejoint Blue Prism en 2019 et travaille aujourd’hui en tant qu’expert data/IA et processus. Son sens pédagogique ainsi que son expertise l’ont aussi amené à animer un blog en français (datacorner.fr) ayant pour but de montrer comment comprendre, analyser et utiliser ses données le plus simplement possible.
3 Replies to “La Régression Linéaire”