# ML Model Generalization Lab ## Objectif du Lab Ce lab démontre les techniques essentielles pour améliorer la **généralisation** d'un modèle de Machine Learning et éviter l'**overfitting** (surapprentissage). ## Concepts Clés ### 1. Split des Données (Train/Validation/Test) ``` Total: 2000 échantillons ├── Train: 64% (1280 échantillons) - entraînement du modèle ├── Validation: 16% (320 échantillons) - ajustement des hyperparamètres └── Test: 20% (400 échantillons) - évaluation finale ``` **Pourquoi 3 splits ?** - **Train** : apprend les patterns - **Validation** : détecte l'overfitting pendant l'entraînement - **Test** : mesure la performance réelle sur des données jamais vues ### 2. Early Stopping ```python EarlyStopping( monitor='val_loss', patience=3, min_delta=0.01, restore_best_weights=True ) ``` **Rôle** : Arrête l'entraînement quand la `val_loss` ne s'améliore plus - Évite l'overfitting en stoppant avant que le modèle ne "mémorise" les données - Restaure les meilleurs poids (epoch 7 dans notre cas) ### 3. Learning Rate Scheduler ```python ReduceLROnPlateau( monitor='val_loss', factor=0.5, patience=2, min_lr=1e-5 ) ``` **Rôle** : Réduit le learning rate quand l'apprentissage stagne - Learning rate initial : 0.05 - Réduction par 2 après 2 epochs sans amélioration - Permet une convergence plus fine vers l'optimum ### 4. Architecture du Réseau ``` Input (20 features) ↓ Dense(64, relu) ↓ Dense(32, relu) ↓ Dense(1, sigmoid) → Probabilité binaire ``` Architecture simple mais efficace pour la classification binaire. ## Résultats Obtenus ### Métriques de Performance | Métrique | Valeur | |----------|--------| | Accuracy | 97% | | Precision (classe 0) | 95% | | Precision (classe 1) | 99% | | Recall (classe 0) | 99% | | Recall (classe 1) | 95% | ### Matrice de Confusion ``` Prédictions 0 1 Réel 0 [205 2] 1 [ 10 183] ``` - **Vrais positifs** : 183 + 205 = 388 - **Faux positifs** : 2 + 10 = 12 - **Taux d'erreur** : 3% seulement ## Ce qu'il faut Retenir ### ✅ Bonnes Pratiques Appliquées 1. **Toujours séparer les données** en 3 ensembles distincts 2. **Utiliser la validation** pour monitorer l'overfitting en temps réel 3. **Early stopping** est crucial pour éviter le surapprentissage 4. **Learning rate adaptatif** améliore la convergence 5. **Normalisation** des features avec StandardScaler pour stabiliser l'apprentissage ### 📊 Signes d'une Bonne Généralisation - ✅ Performance similaire sur train et test - ✅ Val_loss se stabilise sans diverger - ✅ Le modèle s'arrête avant de surapprendre (epoch 10/100) - ✅ Métriques équilibrées entre les classes ### ⚠️ Signes d'Overfitting (absents ici) - ❌ Train accuracy >> Test accuracy - ❌ Val_loss augmente alors que train_loss diminue - ❌ Performance dégradée sur nouvelles données ## Exécution ```bash # Activer l'environnement virtuel source venv/bin/activate # Lancer Jupyter jupyter notebook lab.ipynb ``` ## Technologies Utilisées - **TensorFlow/Keras** : construction et entraînement du réseau de neurones - **Scikit-learn** : génération de données, preprocessing, métriques - **Python 3.12** : langage de programmation ## Conclusion Ce lab illustre qu'un modèle bien régularisé avec early stopping et learning rate scheduling peut atteindre d'excellentes performances (97%) tout en généralisant correctement sur des données non vues. **Principe fondamental** : Un bon modèle ne mémorise pas les données, il apprend les patterns généraux.