Aller au contenu

Régression linéaire

La régression linéaire est l'un des algorithmes les plus connus. Elle est toujours enseigné au lycée. Il permet de résoudre des problèmes de régression de type linéaire.

Définition

La régression linéaire est un modèle de régression linéaire est un modèle de régression qui cherche à établir une relation linéaire entre une variable, dite expliquée, et une ou plusieurs variables, dites explicatives.
Wikipédia : https://fr.m.wikipedia.org/wiki/R%C3%A9gression_lin%C3%A9aire

La régression linéaire repose sur l'hypothèse d'une relation linéaire entre la variable dépendante y et les prédicteurs X. La valeur de y serait donc une combinaison linéaire des prédicteurs.

La solution d'une régression est obtenue grâce à la méthode des moindres carrés ordinaires qui consiste à minimiser les erreurs de prédictions.

On appelle résidu (ou erreur) la différence entre la valeur prédite et la valeur réelle. On note epsilon = y - ŷ

https://scikit-learn.org/stable/modules/linear_model.html#ordinary-least-squares

Principe de la régression linéaire

1. Problème

La régression linéaire permet de répondre à des problèmes linéaires. L'utilisation de la régression linéaire suppose qu'il existe une relation linéaire entre les variables explicatives et la variable expliquée.

Exemples:

  • Prédire la valeur d'un bien
  • Prédire le poids en fonction de la taille
  • Prédire la température sur la base

2. Données

Les variables explicatives sont désignées par X et la variable expliquée par Y. X est une matrice de taille (n, p), n étant la taille des données et p le nombre de variables.

3. Fonction de perte

L'erreur de prédiction sur la moyenne de la somme des carrées des erreurs. MAE

4. Méthode d'optimisation

La solution d'une régression linéaire peut être déterminée de manière analytique. Il est possible d'apprendre une régression linéaire avec une méthode itérative, dans ce cas on utilise généralement la descente de gradient.

  • Solution analytique (approche directe)
  • Descente de gradient (approche itérative)

Librairies

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, r2_score

Importation des données

Le jeu de données contient les résultats d'élèves.

data = pd.read_csv("data/StudentsPerformance.csv")
data.head()
gender race/ethnicity parental level of education lunch test preparation course math score reading score writing score
0 female group B bachelor's degree standard none 72 72 74
1 female group C some college standard completed 69 90 88
2 female group B master's degree standard none 90 95 93
3 male group A associate's degree free/reduced none 47 57 44
4 male group C some college standard none 76 78 75

La tâche consiste à prédire la note en écriture writing score en fonction de la note en lecture reading score.

Exploration

plt.figure(figsize=(10, 8))
sns.scatterplot(x="reading score", y="writing score", alpha=0.5, data=data)
plt.show()
No description has been provided for this image

Échantillonnage

X = data["reading score"].values.reshape(-1, 1)
y = data["writing score"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3, shuffle=True, random_state=42)

Modélisation

lr = LinearRegression()
lr.fit(X_train, y_train)
LinearRegression()
a, b = lr.coef_[0], lr.intercept_
print("Modèle: aX + b")
print("a =", a)
print("b =", b)
Modèle: aX + b
a = 0.9916505366266591
b = -0.5086241001645675

plt.figure(figsize=(10, 8))
sns.scatterplot(x=X_train[:, -1], y=y_train, alpha=0.5, label="Données")
plt.plot([0, 100], [b, a*100+b], color="red", label="Modèle")
plt.xlabel("reading score")
plt.ylabel("writing score")
plt.title("Régression linéaire de `writing score` sur `reading score`")
plt.legend(loc="best")
plt.show()
No description has been provided for this image

Évaluation

y_pred = lr.predict(X_test)

print("Moyenne des carrés des erreurs: ", mean_absolute_error(y_test, y_pred))
print("R^2 Score: ", r2_score(y_test, y_pred))
Moyenne des carrés des erreurs:  3.6737022607831356
R^2 Score:  0.9154964112229643

plt.figure(figsize=(10, 8))
sns.scatterplot(x=y_test, y=y_pred)
plt.plot([0, 100], [b, a*100+b], color="black")
plt.xlabel("Bonnes valeurs")
plt.ylabel("Valeurs prédites")
plt.show()
No description has been provided for this image

Régularisation

Régularisation Ridge

La régression linéaire Ridge est une variante de a régression linéaire abordée dans la publication précédente. Elle prend en compte les corrélations qui peuvent avoir entre certaines variables explicatives, ainsi ces variables seront pondérées de la manière.

from sklearn.linear_model import Ridge

reg = Ridge(alpha=alpha)
reg.fit(X_train, y_train)

a, b = reg.coef_, reg.intercept_

Régression Lasso

from sklearn.linear_model import Lasso

reg = Lasso(alpha=alpha)
reg.fit(X_train, y_train)

a, b = reg.coef_, reg.intercept_

Pour signaler un problème que vous avez rencontré durant l'exécution des cahiers, merci de créer une issue. Assurez-vous que vous avez les bonnes versions des packages*