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.

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.

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.

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

Resumen

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

✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar