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
sampleen 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
clfpara predecir la etiqueta de la muestra de entrada con la forma cambiada utilizando el métodopredict(). - 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.



