En este artículo haremos un ejercicio de clasificación multiclase de imágenes. En este caso vamos a utilizar la famosa base de datos de MNIST. Esta base de datos contiene:
- Training set: train-images-idx3-ubyte.gz (9.9 MB, 47 MB unzipped, 60,000 samples)
- Training set labels: train-labels-idx1-ubyte.gz (29 KB, 60 KB unzipped, 60,000 labels)
- Test set images: 110k-images-idx3-ubyte.gz (1.6 MB, 7.8 MB, 10,000 samples)
- Test set labels: t10k-labels-idx1-ubyte.gz (5 KB. 10 KB unzipped, 10,000 labels)
Ejercicio de clasificación multiclase de imágenes
Estas imágenes se pueden descargar a partir del siguiente código (previamente hay que descargarse los archivos).
#Ejercicio de clasificación multiclase de imágenes
import os
import struct
import numpy as np
import gzip
def load_mnst (path, kind = 'train"): """Load MNIST data from path"""
labels_path = os.path.join (path, '% s - labels - idx1 - ubyte.gz' % kind)
images_path = os.path.join (path, '% s - labels - idx3 - ubyte.gz' % kind)
#Ejercicio de clasificación multiclase de imágenes
with gzip.open (labels_path, 'rb') as lbpath: lbpath.read (8) buffer = lbpath.read () labels = np.frombuffer (buffer, dtype = np.uint8)
with gzip.open (images path, 'rb') as imgpath: imgpath.read (16) buffer = imgpath.read () labels = np.frombuffer (buffer, dtype = np.uint8).reshape (len (labels), 784).astype (np.float64)
return images, labels
#Esto te va a fallar si no lo tienes bajado
#Ejercicio de clasificación multiclase de imágenes
x_train, y_train = load_mnist ('/data/, kind = 'train')
print ('Rows: %d, columns: d% (X_train.shape [0], train.shape [1]))
Rows: 60000, columns: 784
#Ejercicio de clasificación multiclase de imágenes
X_test, y_test = load_mnist ('data/', kind = 't10k')
print ('Rows: %d, columns: %d' % (X_test.shape [8], X_test.shape [1]))
Rows: 60000, columns: 784
No obstante, sklearn tiene la base de datos incluida en sus datasets.
#Ejercicio de clasificación multiclase de imágenes
from sklearn.datasets import fetch_aldata
mnist = fetch_aldata ("MNIST original")
#rescale the data, use the traditional train/test split
X, y = mnist.data / 255., mnist.target
X_train, X_test = X [:60000], X[60000:]
y_train, y_test = y [:60000], y [60000:]
¡Fíjate en que el conjunto de entrenamiento son los píxeles de la imagen tal cual!
#Ejercicio de clasificación multiclase de imágenes
print ("X train shape: ", X_train.shape)
print ("y train shape: ", y_train.shape)
print ("X test shape: ", X_test.shape)
print ("y test shape: ", y_test.shape)
X train shape: (60000, 784)
y train shape: (60000,)
X test shape: (10000, 784)
y test shape: (10000,)
Representemos algunos ejemplos:
#Ejercicio de clasificación multiclase de imágenes
randomIds = np.random.randint (0,60000,10)
fig, ax = plt.subplots (nrows = 2, ncols = 5, sharex = True, sharey = True,)
ax = ax.flatten ()
for i, n in enumerate (randomIds): img = x_train [n , :].reshape (28, 28) ax [i].imshow (img, cmap = 'Greys', interpolation = 'nearest')
ax [0].set_xticks ([ ])
ax [0].set_yticks ([ ])
plt.tight_layout ()
plt.show ()
Efectivamente, vemos que el conjunto de entrenamiento son las imágenes de los píxeles.
Por si no conoces el conjunto de datos MNIST, es una serie de números manuscritos. Este es un dataset canónico, muy usado para clasificación de imágenes. Al final las imágenes son números, entonces sabemos que es una clasificación multiclases; conocemos las clases: del 0 al 9.
Es una base de datos muy estudiada y modificada. De hecho cuando alguien crea o modifica un algoritmo, casi siempre se hace con este dataset MNIST, porque ya se tiene mucho conocimiento acerca de cómo funciona este algoritmo.
Existen otros algoritmos que podemos realizar con este ejercicio, puedes realizar la tarea para practicar:
- Entrena un modelo de regresión logística con C = 10 y calcula sus prestaciones en el conjunto de test. A lo mejor te resulta de utilidad revisar la documentación de scikit learn sobre la regresión logística.
Recuerda que en la regresión logística se hace uso de la biblioteca liblinear y que la regularización se aplica de manera predeterminada.
Algunos de los parámetros que se usan en regresión logística son:
penalty: {‘l1’, ‘l2’, ‘elasticnet’, None}, default = ’l2’
- dual: bool, default = False
- dual: bool, default = False
- C: float, default = 1.0
- fit_intercept: bool, default = True
- intercept_scaling: float, default = 1
- class_weight: dict or ‘balanced’, default = None
- random_state: int, RandomState instance, default = None
- solver: {‘lbfgs’, ‘liblinear’, ‘newton – cg’, ‘newton – cholesky’, ‘sag’, ‘saga’}, default = ’lbfgs’
- max_iterint, default = 100
- multi_class: {‘auto’, ‘ovr’, ‘multinomial’}, default = ’auto’
- Calcula y representa la matriz de confusión, ¿qué conclusiones puedes sacar?
Si quieres seguir aprendiendo sobre la interesante disciplina del Big Data, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación de alta intensidad en la que aprenderás acerca de todas las temáticas necesarias para incursionar en un mercado laboral lleno de excelentes oportunidades laborales. Estarás acompañado de los mejores profesionales que guiarán tu proceso formativo en todo momento. ¡No esperes más para cambiar tu futuro y solicita más información ahora!