Introduction
Ce laboratoire utilise la validation croisée avec une machine à vecteurs de support (SVM) sur l'ensemble de données des chiffres. Il s'agit d'un problème de classification où l'objectif est d'identifier les chiffres à partir d'images de chiffres manuscrits.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder à Jupyter Notebook pour la pratique.
Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session et nous réglerons rapidement le problème pour vous.
Charger l'ensemble de données
Tout d'abord, nous devons charger l'ensemble de données des chiffres à partir de scikit-learn et le diviser en caractéristiques et étiquettes.
import numpy as np
from sklearn import datasets
X, y = datasets.load_digits(return_X_y=True)
Créer un modèle de machine à vecteurs de support (SVM)
Ensuite, nous créons un modèle SVM avec un noyau linéaire.
from sklearn import svm
svc = svm.SVC(kernel="linear")
Définir les valeurs des hyperparamètres à tester
Nous allons tester différentes valeurs du paramètre de régularisation C, qui contrôle le compromis entre la maximisation de la marge et la minimisation de l'erreur de classification. Nous allons tester 10 valeurs espacées logarithmiquement entre 10^-10 et 1.
C_s = np.logspace(-10, 0, 10)
Effectuer la validation croisée et enregistrer les résultats
Pour chaque valeur de C, nous effectuons une validation croisée à 10 plis et enregistrons la moyenne et l'écart-type des scores.
from sklearn.model_selection import cross_val_score
scores = list()
scores_std = list()
for C in C_s:
svc.C = C
this_scores = cross_val_score(svc, X, y, n_jobs=1)
scores.append(np.mean(this_scores))
scores_std.append(np.std(this_scores))
Tracer les résultats
Enfin, nous traçons les scores moyens en fonction de C et incluons également des barre d'erreur pour visualiser l'écart-type.
import matplotlib.pyplot as plt
plt.figure()
plt.semilogx(C_s, scores)
plt.semilogx(C_s, np.array(scores) + np.array(scores_std), "b--")
plt.semilogx(C_s, np.array(scores) - np.array(scores_std), "b--")
locs, labels = plt.yticks()
plt.yticks(locs, list(map(lambda x: "%g" % x, locs)))
plt.ylabel("Score de validation croisée")
plt.xlabel("Paramètre C")
plt.ylim(0, 1.1)
plt.show()
Sommaire
Dans ce laboratoire, nous avons effectué une validation croisée à 10 plis avec un modèle SVM sur l'ensemble de données des chiffres, en testant différentes valeurs du paramètre de régularisation C. Nous avons tracé les résultats pour visualiser la relation entre C et la moyenne du score de validation croisée. Il s'agit d'une technique utile pour ajuster les hyperparamètres et évaluer les performances du modèle.