Python Tutorial

Apprentissage automatique Python – Validation croisée


Sur cette page, Infodewi.com collabore avec
Académie des sciences des données de NYC
pour délivrer des contenus de formation numériques à nos étudiants.


Validation croisée

Lors de l’ajustement des modèles, nous visons à augmenter les performances globales du modèle sur des données invisibles. Le réglage des hyperparamètres peut conduire à de bien meilleures performances sur les ensembles de test. Cependant, l’optimisation des paramètres de l’ensemble de test peut entraîner une fuite d’informations, ce qui entraîne une détérioration du modèle sur des données invisibles. Pour corriger cela, nous pouvons effectuer une validation croisée.

Pour mieux comprendre le CV, nous appliquerons différentes méthodes sur l’ensemble de données de l’iris. Commençons par charger et séparer les données.

from sklearn import datasets

X, y = datasets.load_iris(return_X_y=True)

Il existe de nombreuses méthodes de validation croisée, nous commencerons par examiner la validation croisée k-fold.


K-Pli

Les données d’apprentissage utilisées dans le modèle sont divisées en un nombre k d’ensembles plus petits, à utiliser pour valider le modèle. Le modèle est ensuite entraîné sur k-1 plis de l’ensemble d’entraînement. Le pli restant est ensuite utilisé comme ensemble de validation pour évaluer le modèle.

Comme nous allons essayer de classer différentes espèces de fleurs d’iris, nous devrons importer un modèle de classificateur. Pour cet exercice, nous utiliserons un DecisionTreeClassifier. Nous devrons également importer des modules de CV à partir de sklearn.

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import KFold, cross_val_score

Avec les données chargées, nous pouvons maintenant créer et ajuster un modèle pour l’évaluation.

clf = DecisionTreeClassifier(random_state=42)

Évaluons maintenant notre modèle et voyons comment il fonctionne sur chaque k-pli.

k_folds = KFold(n_splits = 5)

scores = cross_val_score(clf, X, y, cv = k_folds)

Il est également recommandé de voir comment CV s’est comporté globalement en faisant la moyenne des scores pour tous les plis.

Exemple

Exécutez le CV k-fold :

à partir d’ensembles de données d’importation sklearn
depuis sklearn.tree importer DecisionTreeClassifier
de sklearn.model_selection importer KFold, cross_val_score

X, y = datasets.load_iris(return_X_y=True)

clf = DecisionTreeClassifier(random_state=42)

k_folds = KFold(n_splits = 5)

scores = cross_val_score(clf, X, y, cv = k_folds)

print(“Scores de validation croisée : “, scores)
print(“Score CV moyen : “, scores.mean())
print(“Nombre de scores de CV utilisés en moyenne : “, len(scores))

Exemple d’exécution »


PUBLICITÉ


Pliage en K stratifié

Dans les cas où les classes sont déséquilibrées, nous avons besoin d’un moyen de tenir compte du déséquilibre dans les ensembles de train et de validation. Pour ce faire, nous pouvons stratifier les classes cibles, ce qui signifie que les deux ensembles auront une proportion égale de toutes les classes.

Exemple

à partir d’ensembles de données d’importation sklearn
depuis sklearn.tree importer DecisionTreeClassifier
de sklearn.model_selection importer StratifiedKFold, cross_val_score

X, y = datasets.load_iris(return_X_y=True)

clf = DecisionTreeClassifier(random_state=42)

sk_folds = StratifiedKFold(n_splits = 5)

scores = cross_val_score(clf, X, y, cv = sk_folds)

print(“Scores de validation croisée : “, scores)
print(“Score CV moyen : “, scores.mean())
print(“Nombre de scores de CV utilisés en moyenne : “, len(scores))

Exemple d’exécution »

Alors que le nombre de plis est le même, le CV moyen augmente à partir du k-pli de base en s’assurant qu’il y a des classes stratifiées.


Leave-One-Out (LOO)

Au lieu de sélectionner le nombre de fractionnements dans l’ensemble de données d’entraînement comme K-fold LeaveOneOut, utilisez 1 observation pour valider et n-1 observations pour l’entraînement. Cette méthode est une technique exhaustive.

Exemple

Exécutez LOO CV :

à partir d’ensembles de données d’importation sklearn
depuis sklearn.tree importer DecisionTreeClassifier
de sklearn.model_selection importer LeaveOneOut, cross_val_score

X, y = datasets.load_iris(return_X_y=True)

clf = DecisionTreeClassifier(random_state=42)

loo = LeaveOneOut()

scores = cross_val_score(clf, X, y, cv = loo)

print(“Scores de validation croisée : “, scores)
print(“Score CV moyen : “, scores.mean())
print(“Nombre de scores de CV utilisés en moyenne : “, len(scores))

Exemple d’exécution »

Nous pouvons observer que le nombre de scores de validation croisée effectués est égal au nombre d’observations dans l’ensemble de données. Dans ce cas, il y a 150 observations dans le jeu de données de l’iris.

Le score CV moyen est de 94 %.


Sans sortie (LPO)

Leave-P-Out est simplement une différence nuancée par rapport à l’idée Leave-One-Out, en ce sens que nous pouvons sélectionner le nombre de p à utiliser dans notre ensemble de validation.

Exemple

Exécutez le CV LPO :

à partir d’ensembles de données d’importation sklearn
depuis sklearn.tree importer DecisionTreeClassifier
de sklearn.model_selection importer LeavePOut, cross_val_score

X, y = datasets.load_iris(return_X_y=True)

clf = DecisionTreeClassifier(random_state=42)

lpo = QuitterPOut(p=2)

scores = cross_val_score(clf, X, y, cv = lpo)

print(“Scores de validation croisée : “, scores)
print(“Score CV moyen : “, scores.mean())
print(“Nombre de scores de CV utilisés en moyenne : “, len(scores))

Exemple d’exécution »

Comme nous pouvons le voir, il s’agit d’une méthode exhaustive, nous calculons beaucoup plus de scores que Leave-One-Out, même avec ap = 2, mais elle atteint à peu près le même score CV moyen.


Fractionnement aléatoire

Contrairement à KFold, ShuffleSplit laisse de côté un pourcentage des données, à ne pas utiliser dans les ensembles d’apprentissage ou de validation. Pour ce faire, nous devons décider de la taille des trains et des tests, ainsi que du nombre de fractionnements.

Exemple

Exécutez Shuffle Split CV :

à partir d’ensembles de données d’importation sklearn
depuis sklearn.tree importer DecisionTreeClassifier
de sklearn.model_selection importer ShuffleSplit, cross_val_score

X, y = datasets.load_iris(return_X_y=True)

clf = DecisionTreeClassifier(random_state=42)

ss = ShuffleSplit(train_size=0.6, test_size=0.3, n_splits = 5)

scores = cross_val_score(clf, X, y, cv = ss)

print(“Scores de validation croisée : “, scores)
print(“Score CV moyen : “, scores.mean())
print(“Nombre de scores de CV utilisés en moyenne : “, len(scores))

Exemple d’exécution »


Notes de fin

Ce ne sont que quelques-unes des méthodes CV qui peuvent être appliquées aux modèles. Il existe de nombreuses autres classes de validation croisée, la plupart des modèles ayant leur propre classe. Consultez la validation croisée de sklearns pour plus d’options de CV.


#Apprentissage #automatique #Python #Validation #croisée

Related Articles

Back to top button