K-fold cross-validation
Fonctions :
-
KFold()
La fonction KFold() de la bibliothèque sklearn.model_selection permet de diviser un jeu de données en plusieurs sous-ensembles (ou "folds") pour effectuer une validation croisée. Cela permet d'évaluer la performance d'un modèle en utilisant différentes portions de l'ensemble de données pour l'entraînement et la validation, réduisant ainsi le biais du modèle.
Importation :
from sklearn.model_selection import KFoldAttributs :
Paramètre
Description
n_splitsLe nombre de "folds" (divisions) à réaliser. Par défaut, il est égal à 5. shuffleSi True, les données sont mélangées avant la division. Par défaut, c'estFalse.random_statePermet de fixer la graine pour la génération aléatoire des folds si shuffle=True.max_train_sizeNombre maximum d'échantillons à inclure dans les données d'entraînement pour chaque fold. Si None, il n'y a pas de limite. Exemple de code :
import numpy as np from sklearn.model_selection import KFold from sklearn.linear_model import LogisticRegression from sklearn.datasets import load_iris from sklearn.metrics import accuracy_score # Chargement du jeu de données Iris data = load_iris() X = data.data y = data.target # Initialisation du KFold avec 5 folds kf = KFold(n_splits=5, shuffle=True, random_state=42) # Liste pour stocker les scores de chaque fold fold_accuracies = [] # Création du modèle model = LogisticRegression(max_iter=200) # Validation croisée for train_index, test_index in kf.split(X): # Séparation des données en train et test pour ce fold X_train, X_test = X[train_index], X[test_index] y_train, y_test = y[train_index], y[test_index] # Entraînement du modèle model.fit(X_train, y_train) # Prédiction et évaluation y_pred = model.predict(X_test) accuracy = accuracy_score(y_test, y_pred) fold_accuracies.append(accuracy) # Affichage de la moyenne des accuracies sur tous les folds print(f'Mean accuracy: {np.mean(fold_accuracies):.4f}')Explication du code :
-
Chargement des données :
-
Nous chargeons le jeu de données Iris avec
load_iris()depuissklearn.datasets.
-
-
Initialisation de KFold :
-
Nous créons une instance de
KFoldavec 5 splits,shuffle=Truepour mélanger les données, et une graine aléatoire fixée à 42.
-
-
Boucle de validation croisée :
-
Nous utilisons
kf.split(X)pour diviser les données en indices de training et de test. Cela va itérer 5 fois (puisque nous avons spécifién_splits=5), et pour chaque itération, les données d'entraînement et de test sont créées.
-
-
Entraînement et évaluation :
-
À chaque itération, nous entraînons un modèle de régression logistique sur les données d'entraînement et évaluons la précision sur les données de test.
-
-
Calcul des résultats :
-
Les résultats de chaque fold sont stockés dans la liste
fold_accuracies, et à la fin, nous affichons la moyenne des précisions sur tous les folds.
-
Points importants :
-
Validation croisée : Le but de la validation croisée avec
KFoldest de réduire le biais dans l'évaluation du modèle en s'assurant que le modèle est testé sur différents sous-ensembles de données. -
Mélange des données : Le paramètre
shuffle=Trueest utile pour mélanger les données avant de les diviser. Cela peut être particulièrement utile si les données sont ordonnées d'une manière qui pourrait introduire un biais (par exemple, si elles sont triées par classe). -
Répétabilité : Fixer un
random_statepermet de rendre les résultats reproductibles, c'est-à-dire que les mêmes données seront utilisées à chaque exécution du code.
Applications courantes :
-
Évaluation de modèle : Utilisé dans les tâches de validation croisée pour évaluer la performance des modèles sans les surajuster à un sous-ensemble particulier de données.
-
Hyperparameter tuning :
KFoldest également souvent utilisé lors de la recherche des meilleurs hyperparamètres pour un modèle, en s'assurant que les performances ne dépendent pas d'un seul ensemble de données.
-
-
cross_val_score()