0Pricing
Learn AI with Python · Leçon

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 here

Validation 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
    pass

Raccourci 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

  1. Stratégies de validation croisée
  2. Analyse approfondie des métriques de classification
  3. Recherche sur grille et recherche aléatoire
  4. Optimisation bayésienne avec Optuna
← Retour à Learn AI with Python