Prueba de la clase NNClassifier v6

Ha llegado el momento de probar nuestro código con el dataset MNIST. Recordemos el código que lee el dataset:

import pandas as pd

mnist = pd.read_csv("mnist.csv", header = None)
y = mnist.pop(0)
X = mnist / 255

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 5000, random_state = 0)

Ahora no tenemos más que instanciar nuestra clase. Por ejemplo, con una capa oculta de 16 neuronas, una tasa de aprendizaje de 0.1, un tamaño del batch de 32 registros y 20 epochs:

model = NNClassifier(
    sizes = [784, 16, 10], 
    learning_rate = 0.1,
    batch_size = 32,
    epochs = 20
)

Fijemos también una semilla para el generador de números aleatorios de NumPy:

import numpy as np

np.random.seed(0)

Entrenemos entonces nuestro algoritmo:

%%time
model.fit(x_train, y_train)

Epoch 0 complete
Epoch 1 complete
Epoch 2 complete
Epoch 3 complete
Epoch 4 complete
Epoch 5 complete
Epoch 6 complete
Epoch 7 complete
Epoch 8 complete
Epoch 9 complete
Epoch 10 complete
Epoch 11 complete
Epoch 12 complete
Epoch 13 complete
Epoch 14 complete
Epoch 15 complete
Epoch 16 complete
Epoch 17 complete
Epoch 18 complete
Epoch 19 complete
Wall time: 1min 22s

Veamos cuál es la predicción para nuestro bloque de pruebas:

prediction = model.predict(x_test)
prediction

array([3., 6., 6., ..., 7., 2., 5.])

...y la exactitud:

from sklearn.metrics import accuracy_score

accuracy_score(y_test, prediction)

0.9218

Para ser nuestro primer intento no está nada mal: hemos acertado un 93% de las imágenes del dataset.