137 lines
3.6 KiB
Markdown
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.
|