Análisis de Componentes Principales en Imágenes: Reducción Dimensional

Clase 16 de 18Curso de Álgebra Lineal Aplicada para Machine Learning

Resumen

¿Qué es el análisis de componentes principales?

El análisis de componentes principales (PCA, por sus siglas en inglés) es una técnica invaluable en el mundo del procesamiento de datos para reducir la cantidad de dimensiones con las que trabajamos. Frecuentemente, enfrentamos conjuntos de datos con muchas variables, y PCA nos ayuda a conservar el 80% de la información más relevante con menos variables. En síntesis, simplifica nuestros datos sin perder demasiada información esencial.

¿Cómo preparar datos de imágenes para PCA?

Para ilustrar cómo aplicar PCA, veamos un ejemplo con imágenes. Utilizaremos un conjunto de datos de rostros del laboratorio Olivetti, creado entre 1992 y 1994 en los laboratorios de Cambridge.

Paso 1: Importar librerías necesarias

Utilizaremos librerías de Python como numpy, matplotlib, y pandas para realizar las operaciones requeridas:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

Paso 2: Leer y normalizar las imágenes

Primero, cargamos las imágenes desde un directorio específico. Luego, normalizamos los valores de las imágenes dividiéndolos por 255, el valor máximo posible en una imagen en escala de grises.

image = np.random.rand(112, 92)  # ejemplo de una imagen
image_normalizada = image / 255.0

Paso 3: Visualización sin ejes

Para graficar estas imágenes sin mostrar los ejes cartesianos, los configuramos así:

fig, axs = plt.subplots(1, 2, figsize=(12, 12))
axs[0].imshow(image, cmap='gray')
axs[1].imshow(image_normalizada, cmap='gray')

for ax in axs:
    ax.set_xticks([])
    ax.set_yticks([])
plt.show()

¿Cómo gestionar múltiples imágenes?

Paso 1: Leer múltiples imágenes

Configuramos un DataFrame para conservar los datos de cada imagen a medida que las leemos. Esto requiere recorrer los archivos de imágenes disponibles.

from glob import glob

imagenes = glob('imagenes/*')
caras = pd.DataFrame()

for archivo in imagenes:
    img = plt.imread(archivo).flatten()  # aplanar la imagen
    caras = caras.append([img], ignore_index=True)

Paso 2: Visualización de un subconjunto de imágenes

Podemos mostrar un conjunto de imágenes seleccionando un número de individuos y el número de tomas para cada uno:

fig, axs = plt.subplots(5, 10, figsize=(15, 8))

for i, ax in enumerate(axs.flatten()):
    img = caras.iloc[i].values.reshape(112, 92)  # reconstruir la forma original
    ax.imshow(img, cmap='gray')
    ax.set_xticks([])
    ax.set_yticks([])

plt.subplots_adjust(wspace=0.1, hspace=0.01)
plt.show()

Este setup nos permite tener una vista preliminar del conjunto de datos con el que trabajaremos en PCA.

Reflexiones finales

El análisis de componentes principales se convertirá en un aliado fundamental para el análisis y procesamiento de datos, especialmente cuando se trabaja con imágenes o datasets de alta dimensionalidad. Además, el uso correcto de librerías como numpy y pandas optimiza la preparación y limpieza de datos. ¡Vamos a seguir explorando el potencial de estas herramientas y a comprender a fondo sus aplicaciones!