Stratégies de validation croisée
k-fold, k-fold stratifié, laisser-un-dehors et séparation de séries temporelles — quand utiliser chacune.
Stratégies de validation croisée est une leçon Learn AI with Python gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn AI with Python, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn AI with Python comprend 4 leçons au total.
Pourquoi la validation croisée
Une seule séparation entre l’entraînement et l’évaluation peut être favorable ou défavorable par hasard. La validation croisée répète l’évaluation sur différentes séparations et fait la moyenne des résultats, ce qui fournit une estimation plus fiable des performances.
Validation croisée en K volets
KFold divise les données en K parties égales. Chaque volet sert une fois d’ensemble d’évaluation, tandis que les autres servent à entraîner le modèle. Vous obtenez K résultats à moyenner.
from sklearn.model_selection import KFold
kf = KFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in kf.split(X):
Xtr, Xte = X[train_idx], X[test_idx]
ytr, yte = y[train_idx], y[test_idx]
# train and evaluate hereValidation croisée stratifiée avec StratifiedKFold
En classification, une validation en K volets ordinaire peut produire des volets dont les proportions de classes sont déséquilibrées. StratifiedKFold conserve les proportions de classes dans chaque volet.
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in skf.split(X, y):
# each fold keeps the same class balance as the full set
passRaccourci cross_val_score
cross_val_score exécute toute la boucle à votre place et renvoie un tableau de résultats pour les volets. Il utilise automatiquement StratifiedKFold pour les classifieurs.
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state=0)
scores = cross_val_score(clf, X, y, cv=5, scoring="accuracy")
print(scores)
print("Mean:", scores.mean(), "Std:", scores.std())Choisir le nombre de volets
Un plus grand nombre de volets (par exemple 10) donne une estimation moins biaisée, mais nécessite davantage de calculs. La validation à 5 volets constitue un compromis courant. Pour les très petits ensembles de données, la validation en laissant un échantillon de côté utilise N volets, chacun contenant un seul échantillon d’évaluation.
from sklearn.model_selection import LeaveOneOut, cross_val_score
loo = LeaveOneOut()
scores = cross_val_score(clf, X, y, cv=loo)
print("Mean:", scores.mean())TimeSeriesSplit pour les données temporelles
Pour les séries temporelles, vous ne devez jamais entraîner le modèle sur le futur. TimeSeriesSplit utilise toujours les données passées pour l’entraînement et le bloc suivant pour l’évaluation, en agrandissant la fenêtre d’entraînement d’un volet à l’autre.
from sklearn.model_selection import TimeSeriesSplit
tscv = TimeSeriesSplit(n_splits=5)
for train_idx, test_idx in tscv.split(X):
# train_idx always precedes test_idx in time
print(len(train_idx), len(test_idx))Pourquoi l’ordre compte dans les séries temporelles
Mélanger des données ordonnées dans le temps fait fuiter des informations futures dans l’entraînement et gonfle les résultats. TimeSeriesSplit respecte l’ordre chronologique, afin que votre évaluation reproduise les conditions réelles de prévision.
cross_validate pour plusieurs métriques
cross_validate ressemble à cross_val_score, mais renvoie plusieurs métriques à la fois et peut inclure les résultats d’entraînement ainsi que les durées d’ajustement.
from sklearn.model_selection import cross_validate
results = cross_validate(
clf, X, y, cv=5,
scoring=["accuracy", "f1_macro", "roc_auc_ovr"],
return_train_score=True,
)
print(results["test_accuracy"])
print(results["test_f1_macro"])Lire les résultats de cross_validate
Le résultat est un dictionnaire contenant des clés comme test_<metric>, train_<metric>, fit_time et score_time. La comparaison des résultats d’entraînement et d’évaluation aide à diagnostiquer le surajustement.
import numpy as np
gap = results["train_accuracy"].mean() - results["test_accuracy"].mean()
print("Overfit gap:", gap)
print("Avg fit time:", np.mean(results["fit_time"]))Validation croisée et fuite de données
Ajustez toujours le prétraitement (mise à l’échelle, encodage) à l’intérieur de la boucle de validation croisée, et non avant celle-ci. Utilisez un Pipeline afin que chaque volet effectue la mise à l’échelle uniquement avec ses données d’entraînement, ce qui évite les fuites.
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
pipe = make_pipeline(StandardScaler(), SVC())
scores = cross_val_score(pipe, X, y, cv=5)Choisir la bonne stratégie
Utilisez StratifiedKFold pour la classification, KFold ordinaire pour la régression et TimeSeriesSplit pour les données temporelles. Intégrez le prétraitement dans une chaîne de traitement et indiquez mean ainsi que l’écart-type sur l’ensemble des volets.
Vérification rapide
Testez vos connaissances sur la validation croisée.
Récapitulatif
Récapitulatif : la validation croisée fait la moyenne des performances sur plusieurs séparations. Utilisez KFold pour la régression, StratifiedKFold pour une classification équilibrée et TimeSeriesSplit pour les données temporelles. cross_val_score fournit une métrique ; cross_validate en fournit plusieurs ainsi que les durées. Effectuez toujours le prétraitement dans un Pipeline pour éviter les fuites.
Questions Fréquemment Posées
La leçon « Stratégies de validation croisée » est-elle gratuite ?
Oui — le texte complet de « Stratégies de validation croisée » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn AI with Python, passe à CoddyKit PRO. Le cours Learn AI with Python comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Stratégies de validation croisée » ?
k-fold, k-fold stratifié, laisser-un-dehors et séparation de séries temporelles — quand utiliser chacune. Tu pratiques Learn AI with Python avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Learn AI with Python ?
Aucune expérience préalable n'est requise. Learn AI with Python sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Stratégies de validation croisée » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Learn AI with Python ?
Oui. Chaque leçon Learn AI with Python inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Stratégies de validation croisée
- Analyse approfondie des métriques de classification
- Recherche sur grille et recherche aléatoire
- Optimisation bayésienne avec Optuna