Exercice 81 / 100

ML — Train/Test Split

Divise un dataset en ensembles d'entraînement et de test

Le train/test split sépare le dataset en 2 parties :

- TRAIN : pour entraîner le modèle - TEST : pour évaluer ses performances sur des données qu'il n'a JAMAIS vues

Objectif : mesurer la généralisation, pas la mémorisation.

Si on évaluait sur les données d'entraînement, n'importe quel modèle aurait un score parfait en apprenant par cœur. Le test set sert d'arbitre indépendant.

Le jeu de données est coupé en deux avant tout apprentissage : le modèle ne voit que la part d'entraînement, et la part de test lui sert d'arbitre sur des lignes qu'il n'a jamais rencontrées

Fonction sklearn

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, # 20% en test, 80% en train random_state=42 # graine pour reproductibilité )

Paramètres clés

test_size
fraction (0.0 à 1.0) ou int (nb d'exemples)
random_state
reproductibilité — toujours le fixer
stratify=y maintient la proportion des classes (classification déséquilibrée) shuffle=True mélange avant split (défaut)

Exemple complet

import numpy as np from sklearn.model_selection import train_test_split
np.random.seed(42) X = np.random.randn(100, 3) y = (X[:, 0] + X[:, 1] > 0).astype(int)
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 )
print(f'X_train: {X_train.shape}') # (80, 3) print(f'X_test: {X_test.shape}') # (20, 3) print(f'Ratio test: {len(X_test)/len(X):.0%}') # 20%

Ratios courants

test_size=0.2 → 80/20 classique pour datasets de taille moyenne test_size=0.3 → 70/30 pour petits datasets test_size=0.1 → 90/10 pour très grands datasets (millions de lignes)

3-way split : train / val / test

Pour faire de la sélection d'hyperparamètres sans toucher au test set :

X_tv, X_test, y_tv, y_test = train_test_split(X, y, test_size=0.2) X_tr, X_val, y_tr, y_val = train_test_split(X_tv, y_tv, test_size=0.25) # → 60% train, 20% val, 20% test

Alternative plus robuste pour petits datasets : la cross validation (leçon 85).

exercise.py

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →