Clasificar dígitos manuscritos con MLP Classifier

Machine LearningMachine LearningBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Este tutorial te mostrará cómo crear un MLPClassifier utilizando Scikit-learn para clasificar dígitos manuscritos del conjunto de datos MNIST. También visualizaremos los pesos de la primera capa de la MLP para obtener una comprensión más profunda del comportamiento de aprendizaje.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haz clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tengas que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no puede automatizarse debido a las limitaciones de Jupyter Notebook.

Si tienes problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona retroalimentación después de la sesión y resolveremos rápidamente el problema para ti.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/neural_network("Neural Network Models") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/exceptions("Exceptions and Warnings") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/neural_network -.-> lab-49216{{"Clasificar dígitos manuscritos con MLP Classifier"}} sklearn/model_selection -.-> lab-49216{{"Clasificar dígitos manuscritos con MLP Classifier"}} sklearn/datasets -.-> lab-49216{{"Clasificar dígitos manuscritos con MLP Classifier"}} sklearn/exceptions -.-> lab-49216{{"Clasificar dígitos manuscritos con MLP Classifier"}} ml/sklearn -.-> lab-49216{{"Clasificar dígitos manuscritos con MLP Classifier"}} end

Importar bibliotecas

Comenzaremos importando las bibliotecas necesarias para este proyecto.

import warnings
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.exceptions import ConvergenceWarning
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split

Cargar datos

A continuación, cargaremos el conjunto de datos MNIST utilizando la función fetch_openml de Scikit-learn.

X, y = fetch_openml(
    "mnist_784", version=1, return_X_y=True, as_frame=False, parser="pandas"
)

Preprocesar datos

Normalizaremos los datos dividiendo cada valor de píxel entre 255.0, que es el valor máximo de píxel.

X = X / 255.0

Dividir datos

Dividiremos el conjunto de datos en un conjunto de entrenamiento y un conjunto de prueba utilizando la función train_test_split.

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0, test_size=0.7)

Entrenar MLPClassifier

Crearemos un MLPClassifier con una sola capa oculta que contiene 40 neuronas. Debido a las restricciones de recursos, entrenaremos el MLP solo durante 8 iteraciones. También capturaremos la advertencia ConvergenceWarning que se lanzará porque el modelo no convergerá dentro del número limitado de iteraciones.

mlp = MLPClassifier(
    hidden_layer_sizes=(40,),
    max_iter=8,
    alpha=1e-4,
    solver="sgd",
    verbose=10,
    random_state=1,
    learning_rate_init=0.2,
)

with warnings.catch_warnings():
    warnings.filterwarnings("ignore", category=ConvergenceWarning, module="sklearn")
    mlp.fit(X_train, y_train)

Evaluar el modelo

Evaluaremos el MLPClassifier calculando su precisión en los conjuntos de entrenamiento y prueba.

print("Training set score: %f" % mlp.score(X_train, y_train))
print("Test set score: %f" % mlp.score(X_test, y_test))

Visualizar pesos

Finalmente, visualizaremos los pesos de la primera capa de la MLP. Crearemos una cuadrícula de subtramas de 4x4 y mostraremos cada peso como una imagen en escala de grises de 28x28 píxeles.

fig, axes = plt.subplots(4, 4)
vmin, vmax = mlp.coefs_[0].min(), mlp.coefs_[0].max()
for coef, ax in zip(mlp.coefs_[0].T, axes.ravel()):
    ax.matshow(coef.reshape(28, 28), cmap=plt.cm.gray, vmin=0.5 * vmin, vmax=0.5 * vmax)
    ax.set_xticks(())
    ax.set_yticks(())

plt.show()

Resumen

En este tutorial, aprendimos cómo crear un MLPClassifier utilizando Scikit-learn para clasificar dígitos manuscritos del conjunto de datos MNIST. También visualizamos los pesos de la primera capa de la MLP para obtener una comprensión más profunda del comportamiento de aprendizaje.