Validation croisée sur l'ensemble de données des chiffres

Machine LearningMachine LearningBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/model_selection -.-> lab-49099{{"Validation croisée sur l'ensemble de données des chiffres"}} ml/sklearn -.-> lab-49099{{"Validation croisée sur l'ensemble de données des chiffres"}} end

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.