Exercice 82 / 100

ML — Régression Linéaire

Entraîne un modèle de régression linéaire avec scikit-learn

La régression linéaire prédit une valeur continue en supposant une relation linéaire : y ≈ β₀ + β₁·x₁ + β₂·x₂ + ... + ε

Les coefficients (βᵢ) sont appris pour minimiser la somme des carrés des erreurs (moindres carrés).

La régression linéaire cherche la droite qui passe au plus près des points : chaque écart vertical entre un point et la droite est une erreur, et la droite retenue est celle qui rend la somme de leurs carrés la plus petite

Workflow sklearn

from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression() model.fit(X_train, y_train) y_pred = model.predict(X_test)

Attributs après fit :

model.coef_ array des coefficients β₁, β₂, ... model.intercept_ β₀ (ordonnée à l'origine)

Métriques de régression

MSE (mean squared error) → moyenne des (y_pred - y_true)² RMSE → √MSE (même unité que y, plus interprétable) MAE (mean absolute error) → moyenne des |y_pred - y_true| R² (coefficient de détermination) → proportion de variance expliquée R² = 1 modèle parfait R² = 0 pas mieux que prédire la moyenne R² < 0 pire que la moyenne (modèle inadapté)
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score rmse = np.sqrt(mean_squared_error(y_test, y_pred))

Exemple complet

X = np.random.uniform(0, 10, (100, 1)) y = 3 * X.ravel() + 7 + np.random.normal(0, 2, 100)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression() model.fit(X_train, y_train) y_pred = model.predict(X_test)
print(f'Coef: {model.coef_[0]:.2f}') # ~ 3 print(f'Intercept: {model.intercept_:.2f}') # ~ 7 print(f'R²: {r2_score(y_test, y_pred):.4f}') print(f'RMSE: {np.sqrt(mean_squared_error(y_test, y_pred)):.2f}')

Variantes

Ridge(alpha=1.0)
régularisation L2 (combat l'overfitting)
Lasso(alpha=0.1)
régularisation L1 (peut mettre des coefs à 0 → sélection de variables)
ElasticNet
mix L1 + L2

Avant de partir sur un modèle complexe (forest, neural net), toujours essayer une régression linéaire comme baseline.

exercise.py

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →