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.
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.