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.
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.
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
samplein 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 Methodepredict()vorherzusagen. - Gebe das vorhergesagte Label als Ganzzahl zurück.
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
Zusammenfassung
Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Labs absolvieren, um deine Fähigkeiten zu verbessern.



