0% ont trouvé ce document utile (0 vote)
7 vues6 pages

Classification de maladies cardiaques avec Python

Ce document présente un TP sur l'apprentissage supervisé utilisant le dataset de maladies cardiaques. Les objectifs incluent la compréhension de la formalisation d'un problème de classification, l'implémentation d'un modèle de régression logistique, et l'analyse des erreurs d'entraînement et de test. Le TP se compose de plusieurs parties, allant de la préparation des données à la visualisation des résultats et à l'analyse réflexive sur le biais et la variance des modèles.

Transféré par

MOHAMMED CHBOUBA
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues6 pages

Classification de maladies cardiaques avec Python

Ce document présente un TP sur l'apprentissage supervisé utilisant le dataset de maladies cardiaques. Les objectifs incluent la compréhension de la formalisation d'un problème de classification, l'implémentation d'un modèle de régression logistique, et l'analyse des erreurs d'entraînement et de test. Le TP se compose de plusieurs parties, allant de la préparation des données à la visualisation des résultats et à l'analyse réflexive sur le biais et la variance des modèles.

Transféré par

MOHAMMED CHBOUBA
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TP2 – Apprentissage Supervisé (Heart

Disease Dataset)
🎯 Objectifs pédagogiques
• Comprendre la formalisation d’un problème supervisé
• Implémenter un modèle simple de classification (régression logistique)
• Calculer le risque empirique et manipuler différentes fonctions de coût
• Visualiser les effets de la complexité du modèle sur la généralisation
• Illustrer le compromis biais/variance à travers des exemples concrets

📁 Dataset utilisé
Vous utiliserez le fichier [Link], contenant des données médicales de patients :
- Exemples de variables : âge, cholestérol, tension, fréquence cardiaque, etc.
- Objectif : prédire la présence d’une maladie cardiaque (1 = oui, 0 = non).
Ce dataset est adapté à une tâche de classification binaire supervisée.

🔧 Partie 1 – Chargement et préparation des données


• • Charger les données dans un DataFrame avec pandas.

👉 Indication : Utilisez pd.read_csv() pour charger les données.


Affichez les premières lignes avec .head().

• • Vérifier les valeurs manquantes et les gérer.

👉 Indication : Utilisez .isnull().sum() et remplacez ou supprimez si


nécessaire.

• • Isoler la variable cible `target` et les variables explicatives.

👉 Indication : `X = [Link]('target', axis=1)` et `y = df['target']`.

🧠 Partie 2 – Formalisation du problème


• • Identifier les entrées X et la sortie y.
• • Quel est le type du problème ?
• • Exprimer l’objectif du modèle comme une fonction f : X → Y.
⚙️ Partie 3 – Modèle et entraînement
• • Séparer les données en jeu d’entraînement et de test.

👉 Indication : Utilisez train_test_split() avec test_size=0.2.

• • Entraîner un modèle de régression logistique.

👉 Indication : Utilisez :

model = LogisticRegression(max_iter=1000)

[Link](X_train, y_train)

• • Prédire les classes sur le jeu de test.

👉 Indication : Utilisez y_pred =[Link]( X_test).

📉 Partie 4 – Risque empirique et fonctions de coût


• • Calculer l’erreur d’entraînement (risque empirique).

👉 Indication : Utilisez

empirical_risk_train = zero_one_loss(y_train, y_train_pred)

• • Calculer l’erreur sur le test.

👉 Indication : Même fonction, mais avec y_test et y_pred .

• • Calculer la log-loss (entropie croisée).

👉 Indication : Utilisez :

probas = model.predict_proba(X_test)

logloss = log_loss(y_test, probas)

• • Calculer l’erreur quadratique moyenne (MSE).

👉 Indication : Utilisez mse = mean_squared_error(y_test, y_pred).

📊 Partie 5 – Visualisation : sur-apprentissage


• • Créer un modèle simple avec une seule variable (ex : age).
👉 Indication : Entraînez la régression logistique sur une seule
colonne.
X_train_age = X_train[['age']]

X_test_age = X_test[['age']]

• • Créer un modèle plus complexe avec un polynôme de degré élevé.

👉 Indication : Utilisez PolynomialFeatures() de


[Link].

• • Comparer les erreurs d’apprentissage et de test pour les degrés de 1 à 9.

👉 Indication : Faites une boucle for sur les degrés et tracez les
erreurs avec matplotlib.

train_errors = []
test_errors = []
for degree in range(1, 10):
# 1. Créer un pipeline : transforme les données + applique un modèle
model = make_pipeline(
PolynomialFeatures(degree=degree),
LogisticRegression(max_iter=1000)
)

# 2. Entraînement sur X_train_age


[Link](X_train_age, y_train)

# 3. Prédictions
y_train_pred = [Link](X_train_age)
y_test_pred = [Link](X_test_age)

# 4. Calcul des erreurs 0/1


train_error = zero_one_loss(y_train, y_train_pred)
test_error = zero_one_loss(y_test, y_test_pred)

train_errors.append(train_error)
test_errors.append(test_error)

• • Tracer les courbes d’erreurs train/test en fonction du degré.

👉 Indication : Utilisez [Link]() pour tracer les deux courbes.

import [Link] as plt


[Link](range(1, 10), train_errors, label="Erreur train")
[Link](range(1, 10), test_errors, label="Erreur test")
[Link]("Degré du polynôme")
[Link]("Erreur 0/1")
[Link]()
[Link]("Biais/Variance – Régression logistique sur 'age'")
[Link](True)
[Link]()

📈 Partie 6 – Visualisation des fonctions de coût (bonus)


• • Tracer la log loss et la hinge loss.

👉 Indication : Créez une fonction x → L(y · f(x)) et affichez les


courbes sur [-3, 3].

import numpy as np

x = [Link](-3, 3, 100)
log_loss_curve = [Link](1 + [Link](-x))
hinge_loss_curve = [Link](0, 1 - x)

[Link](x, log_loss_curve, label="Log Loss")


[Link](x, hinge_loss_curve, label="Hinge Loss")
[Link]("Comparaison des fonctions de coût")
[Link]("y · f(x)")
[Link]()
[Link](True)
[Link]()

• • Comparer visuellement les punitions infligées aux erreurs.

👉 Indication : Observez comment chaque fonction traite les


mauvaises prédictions.

🧠 Partie 7 – Frontière de décision (bonus)


• • Générer des données synthétiques 2D (make_classification).

👉 Indication : Spécifiez n_features=2 et n_informative=2.

from [Link] import make_classification

X2D, y2D = make_classification(n_samples=500, n_features=2, n_informative=2,


n_redundant=0, random_state=42)
• • Entraîner un modèle de régression logistique.

👉 Indication : Même procédure que précédemment.

clf = LogisticRegression()
[Link](X2D, y2D)

• • Tracer la frontière de décision.

👉 Indication : Utilisez [Link]() et contourf() pour visualiser


le résultat.

xx, yy = [Link]([Link](X2D[:, 0].min(), X2D[:, 0].max(), 100),


[Link](X2D[:, 1].min(), X2D[:, 1].max(), 100))
Z = [Link](np.c_[[Link](), [Link]()])
Z = [Link]([Link])

[Link](xx, yy, Z, alpha=0.3)


[Link](X2D[:, 0], X2D[:, 1], c=y2D, edgecolors='k')
[Link]("Frontière de décision - Régression Logistique")
[Link]()

🧠 Partie 8 – Analyse réflexive


• • Identifier un cas de sous-apprentissage.

👉 Indication : Faible performance sur train ET test.

• • Identifier un cas de sur-apprentissage.

👉 Indication : Très bon sur train, mauvais sur test.

• • Quel modèle offre un bon compromis biais/variance ?

👉 Indication : Celui dont les erreurs train/test sont proches et


raisonnablement basses.

• • Pourquoi ne faut-il pas se contenter du risque empirique ?

👉 Indication : Car il ne reflète pas la capacité à généraliser sur de


nouvelles données.
📎 À remettre
• Un notebook `.ipynb` avec tout le code exécuté

• Les visualisations demandées

• Vos réponses aux questions réflexives

Vous aimerez peut-être aussi