Exercices Machine Learning Cross-validation avec cross_val_score
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Cross-validation avec cross_val_score

Tu entraines ton modele, tu obtiens 92% d'accuracy. Tu changes le random_state, tu obtiens 85%. Le probleme avec un seul split train/test, c'est que le resultat depend du hasard du decoupage. La cross-validation resout ca en faisant plusieurs decoupages differents.

La cross-validation resout ce problème. Au lieu d'un seul split, on decoupe les données en k parties (folds). On entraine k fois le modèle, a chaque fois en utilisant k-1 parties pour l'entrainement et 1 partie pour le test. On obtient k scores, et on prend la moyenne.

Avec k=5 (le plus courant), chaque observation est utilisee exactement une fois pour le test. Ca donne une estimation beaucoup plus fiable des performances.

from sklearn.model_selection import cross_val_score
scores = cross_val_score(modèle, X, y, cv=5, scoring='accuracy')
# scores est un array de 5 valeurs
scores.mean() # la moyenne
scores.std() # l'ecart-type (mesure la stabilite)

Écris une fonction cross_validate_modele(modèle, X, y, cv=5) qui fait la cross-validation et renvoie :
'scores' : la liste des scores par fold
'moyenne' : la moyenne des scores
'ecart_type' : l'ecart-type des scores

Tests (4/4)

5 scores par défaut
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, random_state=42)
model = LogisticRegression(max_iter=1000, random_state=42)
result = cross_validate_modele(model, X, y)
assert len(result['scores']) == 5
Moyenne entre 0 et 1
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, random_state=42)
model = LogisticRegression(max_iter=1000, random_state=42)
result = cross_validate_modele(model, X, y)
assert 0 <= result['moyenne'] <= 1
Ecart-type positif
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, random_state=42)
model = LogisticRegression(max_iter=1000, random_state=42)
result = cross_validate_modele(model, X, y)
assert result['ecart_type'] >= 0
CV=3 donne 3 scores
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, random_state=42)
model = LogisticRegression(max_iter=1000, random_state=42)
result = cross_validate_modele(model, X, y, cv=3)
assert len(result['scores']) == 3

Indices (3 disponibles)

solution.py