Leave-One-Out (LOO)
Fonctions :
-
LeaveOneOut()
La fonction LeaveOneOut() (LOO) de sklearn.model_selection est une méthode de validation croisée où chaque observation du jeu de données sert tour à tour de jeu de test, tandis que toutes les autres observations servent de jeu d'entraînement. Cela signifie que le modèle est formé sur toutes les données sauf une, et testé sur cette donnée unique. Cette approche permet une évaluation de modèle très précise, mais peut être coûteuse en termes de calcul, surtout pour de grands jeux de données.
Importation :
from sklearn.model_selection import LeaveOneOut
Attributs :
Paramètre
Description
n_splits
Le nombre de splits. Par défaut, c'est égal au nombre d'échantillons dans le jeu de données. Il est généralement omis car il est implicitement défini par la taille des données. shuffle
Si True
, les données sont mélangées avant d'être divisées. Par défaut,False
.random_state
Permet de fixer la graine pour la génération aléatoire des folds lorsque shuffle=True
.Exemple de code :
import numpy as np from sklearn.model_selection import LeaveOneOut 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 LeaveOneOut loo = LeaveOneOut() # Liste pour stocker les scores de chaque itération loo_accuracies = [] # Création du modèle model = LogisticRegression(max_iter=200) # Validation croisée Leave-One-Out for train_index, test_index in loo.split(X): # Séparation des données en train et test pour ce split 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) loo_accuracies.append(accuracy) # Affichage de la moyenne des accuracies print(f'Mean accuracy: {np.mean(loo_accuracies):.4f}')
Explication du code :
-
Chargement des données :
-
Le jeu de données Iris est chargé via
load_iris()
, qui contient des informations sur les fleurs d'iris avec quatre caractéristiques par échantillon et une variable cible représentant la classe de l'iris.
-
-
Initialisation de LeaveOneOut :
-
LeaveOneOut()
est initialisé sans argument den_splits
, car cela est déterminé automatiquement par le nombre d'échantillons dansX
. Dans le cas de l'iris, cela signifie qu'il y aura 150 splits (un par échantillon).
-
-
Boucle de validation croisée Leave-One-Out :
-
Nous utilisons
loo.split(X)
pour obtenir les indices de chaque division entre l'ensemble d'entraînement et l'échantillon de test. Pour chaque itération, un modèle de régression logistique est entraîné sur tous les échantillons sauf un, et testé sur cet échantillon unique.
-
-
Entraînement et évaluation :
-
Le modèle est entraîné sur l'ensemble d'entraînement et évalué sur l'échantillon de test. La précision de la prédiction est calculée à chaque itération et ajoutée à la liste
loo_accuracies
.
-
-
Calcul de la précision moyenne :
-
À la fin de la validation croisée, la moyenne des précisions obtenues lors de chaque itération est calculée et affichée.
-
Points importants :
-
Coût computationnel élevé :
LeaveOneOut()
nécessite d'entraîner un modèle pour chaque échantillon du jeu de données. Cela peut être très coûteux en calcul, en particulier pour de grands ensembles de données. -
Aucune donnée de test laissée de côté : Contrairement à des méthodes comme
KFold
, chaque échantillon est utilisé comme donnée de test au moins une fois, ce qui peut donner une estimation de performance très précise du modèle. -
Surapprentissage potentiel : Étant donné que chaque modèle est testé sur un seul échantillon, le modèle peut s'adapter spécifiquement à cet échantillon, ce qui peut entraîner un surapprentissage (overfitting) si les données sont bruitées.
Applications courantes :
-
Petits jeux de données : L'approche LOO est particulièrement utile pour les petits jeux de données où chaque observation compte et où une évaluation précise est nécessaire.
-
Estimation de performance du modèle : C'est une méthode idéale pour obtenir une estimation de la performance d'un modèle sur chaque échantillon du jeu de données.
-