2025-11-12 17:34:59 +01:00

137 lines
3.6 KiB
Markdown

# 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.