Apprentissage avec Python et Scikit-learn
Ce TP propose une continuation de l’apprentissage de la régression linéaire en Python avec la librairie Scikit-learn. Il permet d’évaluer un modèle de régression, d’étudier analytiquement la minimisation de la fonction de coût, et de mesurer les performances sur un ensemble de test.
D'après le document Apprentissage avec Python et Scikit-learn
Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Document source
Linear Regression and Model Evaluation in Data Science · PDF · 4 pages
Afficher l'aperçu du document
Ce TP propose une continuation de l’apprentissage de la régression linéaire en Python avec la librairie Scikit-learn. Il permet d’évaluer un modèle de régression, d’étudier analytiquement la minimisation de la fonction de coût, et de mesurer les performances sur un ensemble de test. Pour réaliser ce TP, il est nécessaire d’avoir déjà réalisé une régression linéaire simple avec Scikit-learn et d’avoir des notions de base en statistiques et programmation Python.
Objectifs
- Utiliser la somme résiduelle des carrés (RSS) pour évaluer l’apprentissage du modèle.
- Résoudre analytiquement l’équation du modèle pour minimiser la fonction de coût.
- Mesurer les performances du modèle sur un ensemble de test indépendant.
Prérequis et installation
- Python installé avec la librairie Scikit-learn.
- Bibliothèque numpy pour les calculs statistiques (variance, covariance).
- Connaissances de base en régression linéaire et en programmation Python.
- Un environnement de développement ou un notebook Python pour exécuter les commandes.
Évaluation du modèle
Pour évaluer un modèle de régression linéaire, il faut définir une fonction de perte appelée fonction de coût. Ici, la différence entre la valeur réelle (prix réel des pizzas) et la valeur prédite par le modèle est appelée erreur résiduelle. Lorsque cette erreur est calculée sur un ensemble de test indépendant, elle s’appelle erreur de prédiction.
La somme des carrés des erreurs résiduelles, appelée Residual Sum of Squares (RSS), est utilisée pour mesurer la qualité du modèle. Minimiser cette somme permet d’obtenir le meilleur ajustement possible.
La fonction de coût est définie par :
RSS = ∑ (yi - f(xi))^2
avec yi la valeur observée et f(xi) la valeur prédite par le modèle.
En Python, on peut calculer cette erreur avec la commande suivante (exemple) :
from sklearn.metrics import mean_squared_error
rss = mean_squared_error(y_true, y_pred) * len(y_true)
print("Residual sum of squares :", rss)
Le résultat attendu est une RSS égale à 1.75 pour l’exemple donné.
Étude théorique du problème de régression
Le modèle de régression linéaire est défini par l’équation :
y = αx + β
Nous cherchons à déterminer les paramètres α et β qui minimisent la fonction de coût (RSS).
Calcul de la variance
La variance mesure la dispersion des données autour de leur moyenne. Elle est calculée par :
Var(x) = (1 / (n - 1)) * ∑ (xi - x̄)^2
avec x̄ la moyenne des x, xi chaque valeur de l’échantillon, et n le nombre d’exemples.
En Python, on peut calculer la variance avec :
import numpy as np
variance_x = np.var(x, ddof=1)
Calcul de la covariance
La covariance mesure la manière dont deux variables varient ensemble :
- Positive si elles augmentent ou diminuent ensemble.
- Négative si l’une augmente quand l’autre diminue.
- Nulle s’il n’y a pas de relation linéaire.
La covariance est calculée par :
Cov(x, y) = (1 / (n - 1)) * ∑ (xi - x̄)(yi - ȳ)
avec yi la valeur observée, ȳ la moyenne des y, et xi, x̄ définis précédemment.
En Python, on peut calculer la covariance avec :
covariance_xy = np.cov(x, y)[0][1]
Calcul des paramètres α et β
Le paramètre α est donné par :
α = covariance_xy / variance_x
Le paramètre β est calculé pour que la droite passe par le centroïde (x̄, ȳ) :
β = ȳ - α * x̄
Calculez ces paramètres en Python en utilisant les fonctions numpy précédentes.
Évaluation sur un ensemble de test
Pour éviter le surapprentissage, il est important d’évaluer le modèle sur un ensemble de test indépendant. Voici un exemple d’ensemble de test :
| Exemple | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| Taille | 8 | 9 | 11 | 16 | 12 |
| Prix | 11 | 8.5 | 15 | 18 | 11 |
Nous utilisons la mesure R-squared (coefficient de détermination) pour évaluer la qualité du modèle :
R² = 1 - (RSS / TSS)
où TSS est la somme totale des carrés :
TSS = ∑ (yi - ȳ)^2
avec yi la valeur observée et ȳ la moyenne des valeurs observées.
En Scikit-learn, on peut calculer directement R² avec la méthode score :
r_squared = model.score(X_test, y_test)
print("R-squared :", r_squared)
Le résultat attendu est un R² d’environ 0.66.
Résultats attendus
- Une somme résiduelle des carrés (RSS) d’environ 1.75 sur l’ensemble d’apprentissage.
- Des valeurs de α et β calculées analytiquement à partir de la variance et covariance des données.
- Un coefficient de détermination R² proche de 0.66 sur l’ensemble de test, indiquant une bonne qualité d’ajustement.
Pièges courants
- Confondre l’erreur résiduelle (sur l’ensemble d’apprentissage) avec l’erreur de prédiction (sur l’ensemble de test).
- Oublier de centrer les données (calculer les moyennes x̄ et ȳ) avant de calculer variance, covariance et paramètres.
- Ne pas utiliser le paramètre
ddof=1dansnp.varpour obtenir la variance corrigée. - Ne pas séparer correctement les ensembles d’apprentissage et de test, ce qui fausse l’évaluation du modèle.
- Interpréter un R² trop faible comme un échec sans vérifier la qualité des données et la pertinence du modèle.
Commentaires
Aucun commentaire pour le moment. Posez la première question.