Análisis de Componentes Principales en Imágenes: Reducción Dimensional
Clase 16 de 18 • Curso 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!