Clasificador simple de reconocimiento de caracteres manuscritos

PythonBeginner
Practicar Ahora

Introducción

En este proyecto, aprenderás a construir un clasificador simple de reconocimiento de caracteres manuscritos utilizando el conjunto de datos DIGITS proporcionado por la biblioteca scikit-learn. El reconocimiento de caracteres manuscritos es un problema clásico en el aprendizaje automático, y este proyecto te guiará a través del proceso de creación de un clasificador que pueda predecir con precisión el dígito representado en una imagen de carácter manuscrito.

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo cargar el conjunto de datos DIGITS y dividirlos en conjuntos de entrenamiento y prueba
  • Cómo crear y entrenar un clasificador de Máquina de Vectores de Soporte (SVM) en los datos de entrenamiento
  • Cómo implementar una función para clasificar una sola imagen de carácter manuscrito
  • Cómo probar el clasificador con una imagen de carácter manuscrito de muestra

🏆 Logros

Después de completar este proyecto, podrás:

  • Cargar y preprocesar un conjunto de datos para tareas de aprendizaje automático
  • Crear y entrenar un clasificador SVM utilizando scikit-learn
  • Implementar una función de predicción para clasificar nuevas muestras
  • Comprender los conceptos básicos del reconocimiento de caracteres manuscritos utilizando técnicas de aprendizaje automático

Cargar el conjunto de datos DIGITS

En este paso, aprenderás a cargar el conjunto de datos DIGITS de la biblioteca scikit-learn. Sigue los pasos siguientes para completar este paso:

Abre el archivo handwritten_digit_classifier.py, importa las bibliotecas necesarias:

from sklearn import datasets
from sklearn.model_selection import train_test_split

Carga el conjunto de datos DIGITS utilizando la función datasets.load_digits():

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

La variable X contiene las imágenes de píxeles de 8x8 aplanadas, y la variable y contiene las etiquetas de dígitos correspondientes (0-9).

Divide el conjunto de datos en conjuntos de entrenamiento y prueba utilizando train_test_split():

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

Esto dividirá los datos en un 80% para entrenamiento y un 20% para prueba.

✨ Revisar Solución y Practicar

Crear y entrenar el clasificador SVM

En este paso, aprenderás a crear y entrenar un clasificador de Máquina de Vectores de Soporte (SVM) en los datos de entrenamiento. Sigue los pasos siguientes para completar este paso:

Importa la clase SVC del módulo sklearn.svm en el archivo handwritten_digit_classifier.py:

from sklearn.svm import SVC

Crea un clasificador SVM con un kernel lineal y un parámetro de regularización de 1:

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

Entrena el clasificador SVM en los datos de entrenamiento utilizando el método fit():

clf.fit(X_train, y_train)

Esto entrenará el clasificador SVM en los datos de entrenamiento.

✨ Revisar Solución y Practicar

Implementar la función de predicción

En este paso, implementarás la función predict(sample) para clasificar una sola imagen de carácter manuscrito. Sigue los pasos siguientes para completar este paso:

Importa el módulo numpy en el archivo handwritten_digit_classifier.py:

import numpy as np

Define la función predict(sample):

def predict(sample):
    """
    Parámetros:
    sample -- Una lista de valores de píxeles de una imagen de carácter manuscrito

    Devuelve:
    pred -- La etiqueta predicha para la imagen de carácter manuscrito como un entero
    """
    ## Cambia la forma de la muestra de entrada
    sample = np.array(sample).reshape(1, -1)

    ## Utiliza el clasificador entrenado para hacer una predicción
    pred = clf.predict(sample)

    return int(pred[0])

En la función predict(sample):

  • Convierte la lista de entrada sample en una matriz de NumPy y cambia su forma para tener una sola muestra con el mismo formato que los datos de entrenamiento.
  • Utiliza el clasificador entrenado clf para predecir la etiqueta de la muestra de entrada con la forma cambiada utilizando el método predict().
  • Devuelve la etiqueta predicha como un entero.
✨ Revisar Solución y Practicar

Probar el clasificador

Ahora puedes probar la función predict(sample) con una imagen de carácter manuscrito de muestra. Aquí hay un ejemplo en el archivo 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("Predicted Label:", result)

Esto debería mostrar la etiqueta predicha para la imagen de carácter manuscrito dada.

Ejecuta el archivo handwritten_digit_classifier.py para ejecutar el ejemplo:

python handwritten_digit_classifier.py
## Predicted Label: 9
✨ Revisar Solución y Practicar

Resumen

¡Felicidades! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.