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 vuesObjectif : 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.
from sklearn.model_selection import train_test_splitX_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
stratify=y maintient la proportion des classes (classification déséquilibrée)
shuffle=True mélange avant split (défaut)import numpy as np
from sklearn.model_selection import train_test_splitnp.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%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)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% testAlternative plus robuste pour petits datasets : la cross validation (leçon 85).
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →