Classifieur de reconnaissance de caractères manuscrits simples

PythonPythonBeginner
Pratiquer maintenant

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

Introduction

Dans ce projet, vous allez apprendre à construire un classifieur de reconnaissance de caractères manuscrits simple à l'aide de l'ensemble de données DIGITS fourni par la bibliothèque scikit-learn. La reconnaissance de caractères manuscrits est un problème classique en apprentissage automatique, et ce projet vous guidera tout au long du processus de création d'un classifieur capable de prédire avec précision le chiffre représenté dans une image de caractère manuscrit.

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Comment charger l'ensemble de données DIGITS et le diviser en ensembles d'entraînement et de test
  • Comment créer et entraîner un classifieur Machine à Vecteurs de Support (SVM) sur les données d'entraînement
  • Comment implémenter une fonction pour classifier une seule image de caractère manuscrit
  • Comment tester le classifieur avec une image d'un caractère manuscrit d'échantillonnage

🏆 Réalisations

Après avoir terminé ce projet, vous serez capable de :

  • Charger et prétraiter un ensemble de données pour des tâches d'apprentissage automatique
  • Créer et entraîner un classifieur SVM à l'aide de scikit-learn
  • Implémenter une fonction de prédiction pour classifier de nouveaux échantillons
  • Comprendre les bases de la reconnaissance de caractères manuscrits à l'aide de techniques d'apprentissage automatique

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python/FunctionsGroup -.-> python/function_definition("Function Definition") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/using_packages("Using Packages") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/DataScienceandMachineLearningGroup -.-> python/numerical_computing("Numerical Computing") python/DataScienceandMachineLearningGroup -.-> python/data_analysis("Data Analysis") python/DataScienceandMachineLearningGroup -.-> python/machine_learning("Machine Learning") subgraph Lab Skills python/function_definition -.-> lab-300258{{"Classifieur de reconnaissance de caractères manuscrits simples"}} python/importing_modules -.-> lab-300258{{"Classifieur de reconnaissance de caractères manuscrits simples"}} python/using_packages -.-> lab-300258{{"Classifieur de reconnaissance de caractères manuscrits simples"}} python/classes_objects -.-> lab-300258{{"Classifieur de reconnaissance de caractères manuscrits simples"}} python/numerical_computing -.-> lab-300258{{"Classifieur de reconnaissance de caractères manuscrits simples"}} python/data_analysis -.-> lab-300258{{"Classifieur de reconnaissance de caractères manuscrits simples"}} python/machine_learning -.-> lab-300258{{"Classifieur de reconnaissance de caractères manuscrits simples"}} end

Charger l'ensemble de données Digits

Dans cette étape, vous allez apprendre à charger l'ensemble de données DIGITS à partir de la bibliothèque scikit-learn. Suivez les étapes ci-dessous pour compléter cette étape :

Ouvrez le fichier handwritten_digit_classifier.py, importez les bibliothèques nécessaires :

from sklearn import datasets
from sklearn.model_selection import train_test_split

Chargez l'ensemble de données DIGITS à l'aide de la fonction datasets.load_digits() :

digits = datasets.load_digits()
X, y = digits.data, digits.target

La variable X contient les images aplaties de 8x8 pixels, et la variable y contient les étiquettes de chiffres correspondants (0-9).

Divisez l'ensemble de données en ensembles d'entraînement et de test à l'aide de train_test_split() :

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

Cela divisera les données en un ensemble d'entraînement de 80 % et un ensemble de test de 20 %.

✨ Vérifier la solution et pratiquer

Créer et entraîner le classifieur SVM

Dans cette étape, vous allez apprendre à créer et à entraîner un classifieur Machine à Vecteurs de Support (SVM) sur les données d'entraînement. Suivez les étapes ci-dessous pour compléter cette étape :

Importez la classe SVC du module sklearn.svm dans le fichier handwritten_digit_classifier.py :

from sklearn.svm import SVC

Créez un classifieur SVM avec un noyau linéaire et un paramètre de régularisation de 1 :

clf = SVC(kernel="linear", C=1)

Entraînez le classifieur SVM sur les données d'entraînement à l'aide de la méthode fit() :

clf.fit(X_train, y_train)

Cela entraînera le classifieur SVM sur les données d'entraînement.

✨ Vérifier la solution et pratiquer

Implémenter la fonction de prédiction

Dans cette étape, vous allez implémenter la fonction predict(sample) pour classifier une seule image de caractère manuscrit. Suivez les étapes ci-dessous pour compléter cette étape :

Importez le module numpy dans le fichier handwritten_digit_classifier.py :

import numpy as np

Définissez la fonction predict(sample) :

def predict(sample):
    """
    Paramètres :
    sample -- Une liste de valeurs de pixels d'une image de caractère manuscrit

    Retourne :
    pred -- L'étiquette prédite pour l'image de caractère manuscrit sous forme d'un entier
    """
    ## Redimensionnez l'échantillon d'entrée
    sample = np.array(sample).reshape(1, -1)

    ## Utilisez le classifieur entraîné pour effectuer une prédiction
    pred = clf.predict(sample)

    return int(pred[0])

Dans la fonction predict(sample) :

  • Convertissez la liste d'entrée sample en un tableau NumPy et redimensionnez-le pour avoir un seul échantillon avec le même format que les données d'entraînement.
  • Utilisez le classifieur entraîné clf pour prédire l'étiquette pour l'échantillon d'entrée redimensionné à l'aide de la méthode predict().
  • Retournez l'étiquette prédite sous forme d'un entier.
✨ Vérifier la solution et pratiquer

Tester le classifieur

Vous pouvez maintenant tester la fonction predict(sample) avec une image d'un caractère manuscrit d'échantillonnage. Voici un exemple dans le fichier handwritten_digit_classifier.py :

sample = [
    0.0, 0.0, 6.0, 14.0, 4.0, 0.0, 0.0, 0.0,
    0.0, 0.0, 11.0, 16.0, 10.0, 0.0, 0.0, 0.0,
    0.0, 0.0, 8.0, 14.0, 16.0, 2.0, 0.0, 0.0,
    0.0, 0.0, 1.0, 12.0, 12.0, 11.0, 0.0, 0.0,
    0.0, 0.0, 0.0, 0.0, 11.0, 3.0, 0.0, 0.0,
    0.0, 0.0, 0.0, 0.0, 5.0, 11.0, 0.0, 0.0,
    0.0, 1.0, 4.0, 4.0, 7.0, 16.0, 2.0, 0.0,
    0.0, 7.0, 16.0, 16.0, 13.0, 11.0, 1.0, 0.0
]

result = predict(sample)
print("Prédiction de l'étiquette :", result)

Cela devrait afficher l'étiquette prédite pour l'image de caractère manuscrit donnée.

Exécutez le fichier handwritten_digit_classifier.py pour exécuter l'exemple :

python handwritten_digit_classifier.py
## Prédiction de l'étiquette : 9
✨ Vérifier la solution et pratiquer

Sommaire

Félicitations ! Vous avez terminé ce projet. Vous pouvez pratiquer plus de laboratoires dans LabEx pour améliorer vos compétences.