Einfacher Klassifizierer für die Erkennung handschriftlicher Zeichen

PythonBeginner
Jetzt üben

Einführung

In diesem Projekt lernst du, wie du einen einfachen Klassifizierer für die Erkennung von handschriftlichen Zeichen mit dem von der scikit-learn-Bibliothek bereitgestellten DIGITS-Datensatz aufbaust. Die Erkennung von handschriftlichen Zeichen ist ein klassisches Problem in der Maschinellen Lernen, und dieses Projekt wird dich durch den Prozess führen, einen Klassifizierer zu erstellen, der die in einem handschriftlichen Zeichenbild dargestellte Ziffer genau vorherzusagen vermag.

🎯 Aufgaben

In diesem Projekt wirst du lernen:

  • Wie du den DIGITS-Datensatz lädst und in Trainings- und Testsets aufteilst
  • Wie du einen Support Vector Machine (SVM)-Klassifizierer auf den Trainingsdaten erstellst und trainst
  • Wie du eine Funktion implementierst, um ein einzelnes handschriftliches Zeichenbild zu klassifizieren
  • Wie du den Klassifizierer mit einem Beispielhandschriftlichen Zeichenbild testest

🏆 Errungenschaften

Nach Abschluss dieses Projekts wirst du in der Lage sein:

  • Ein Datensatz für maschinelle Lernaufgaben zu laden und vorzubereiten
  • Einen SVM-Klassifizierer mit scikit-learn zu erstellen und zu trainieren
  • Eine Vorhersagefunktion zu implementieren, um neue Proben zu klassifizieren
  • Die Grundlagen der Erkennung von handschriftlichen Zeichen mit maschinellen Lerntechniken zu verstehen

Lade den Digits-Datensatz

In diesem Schritt lernst du, wie du den DIGITS-Datensatz aus der scikit-learn-Bibliothek lädst. Folge den Schritten unten, um diesen Schritt abzuschließen:

Öffne die Datei handwritten_digit_classifier.py und importiere die erforderlichen Bibliotheken:

from sklearn import datasets
from sklearn.model_selection import train_test_split

Lade den DIGITS-Datensatz mit der Funktion datasets.load_digits():

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

Die Variable X enthält die abgeflachten 8x8-Pixel-Bilder, und die Variable y enthält die entsprechenden Ziffernbezeichnungen (0-9).

Teile den Datensatz in Trainings- und Testsets mit train_test_split() auf:

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

Dies wird die Daten in 80% Trainings- und 20% Testsets aufteilen.

✨ Lösung prüfen und üben

Erstelle und trainiere den SVM-Klassifizierer

In diesem Schritt lernst du, wie du einen Support Vector Machine (SVM)-Klassifizierer auf den Trainingsdaten erstellst und trainierst. Folge den Schritten unten, um diesen Schritt abzuschließen:

Importiere die Klasse SVC aus dem Modul sklearn.svm in der Datei handwritten_digit_classifier.py:

from sklearn.svm import SVC

Erstelle einen SVM-Klassifizierer mit einem linearen Kernel und einem Regularisierungsparameter von 1:

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

Trainiere den SVM-Klassifizierer auf den Trainingsdaten mit der Methode fit():

clf.fit(X_train, y_train)

Dies wird den SVM-Klassifizierer auf den Trainingsdaten trainieren.

✨ Lösung prüfen und üben

Implementiere die Vorhersagefunktion

In diesem Schritt wirst du die Funktion predict(sample) implementieren, um ein einzelnes handschriftliches Zeichenbild zu klassifizieren. Folge den Schritten unten, um diesen Schritt abzuschließen:

Importiere das Modul numpy in der Datei handwritten_digit_classifier.py:

import numpy as np

Definiere die Funktion predict(sample):

def predict(sample):
    """
    Parameter:
    sample -- Eine Liste von Pixelwerten eines handschriftlichen Zeichenbilds

    Rückgabe:
    pred -- Das vorhergesagte Label für das handschriftliche Zeichenbild als Ganzzahl
    """
    ## Formatiere die Eingabesample um
    sample = np.array(sample).reshape(1, -1)

    ## Verwende den trainierten Klassifizierer, um eine Vorhersage zu machen
    pred = clf.predict(sample)

    return int(pred[0])

In der Funktion predict(sample):

  • Konvertiere die Eingabeliste sample in ein NumPy-Array und formatiere es, um ein einzelnes Sample mit dem gleichen Format wie die Trainingsdaten zu erhalten.
  • Verwende den trainierten Klassifizierer clf, um das Label für das formatierten Eingabesample mithilfe der Methode predict() vorherzusagen.
  • Gebe das vorhergesagte Label als Ganzzahl zurück.
✨ Lösung prüfen und üben

Teste den Klassifizierer

Du kannst jetzt die Funktion predict(sample) mit einem Beispielhandschriftlichen Zeichenbild testen. Hier ist ein Beispiel in der Datei 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("Vorhergesagtes Label:", result)

Dies sollte das vorhergesagte Label für das gegebene handschriftliche Zeichenbild ausgeben.

Führe die Datei handwritten_digit_classifier.py aus, um das Beispiel auszuführen:

python handwritten_digit_classifier.py
## Vorhergesagtes Label: 9
✨ Lösung prüfen und üben

Zusammenfassung

Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Labs absolvieren, um deine Fähigkeiten zu verbessern.