In [1]:
from sklearn.neural_network import MLPClassifier
from sklearn import datasets, metrics
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import numpy as np
In [2]:
digits = datasets.load_digits()
n_samples = len(digits.images)
data = digits.images.reshape((n_samples, -1))
# Split data into 50% train and 50% test subsets
X_train, X_test, y_train, y_test = train_test_split(
    data, digits.target, test_size=0.5, shuffle=False
)

model = MLPClassifier(solver='adam',
            activation='relu',
            hidden_layer_sizes=(5,3),
            random_state=4,
            max_iter = 600,
            learning_rate_init = 0.0013,
            batch_size = 32)
history = model.fit(X_train, y_train)

# Predict the value of the digit on the test subset
predicted = model.predict(X_test)
disp = metrics.ConfusionMatrixDisplay.from_predictions(y_test, predicted)
accu = metrics.accuracy_score(y_test, predicted)
disp.figure_.suptitle("Confusion Matrix")
print(f"Confusion matrix:\n{disp.confusion_matrix}")
print('Overall Acuracy:{:.3}'.format(accu))
#sns.set(font_scale = 1)
_, axes = plt.subplots(nrows=1, ncols=20, figsize=(20, 3))
for ax, image, prediction in zip(axes, X_test, predicted):
    ax.set_axis_off()
    image = image.reshape(8, 8)
    ax.imshow(image, cmap=plt.cm.gray_r, interpolation="nearest")
    ax.set_title(f"Pred.: {prediction}")
Confusion matrix:
[[82  0  0  0  1  0  5  0  0  0]
 [ 1 59  2  2  3  1  0  0 19  4]
 [ 0  0 62  6  0  2  0  0 15  1]
 [ 0  1  5 55  0  0  0  0 16 14]
 [ 1  1  0  0 77  2  0 10  0  1]
 [ 9  0  0  0  0 77  0  1  1  3]
 [ 0  0  0  0  4  0 83  0  4  0]
 [ 0  6  0  1  2  0  0 75  0  5]
 [ 0 12  9 15  2  0  0  3 37 10]
 [ 0  0  0  3  0 14  0  3  1 71]]
Overall Acuracy:0.754