No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Reducción de Dimensiones en Imágenes con PCA

17/18
Recursos

¿Cómo aplicar PCA para reducir la dimensionalidad de imágenes?

La reducción de dimensionalidad es una técnica crucial cuando trabajamos con conjuntos de datos grandes, y en el caso de imágenes, el uso de PCA (Análisis de Componentes Principales) es especialmente útil. Aquí te mostraré cómo hacerlo paso a paso utilizando Python.

¿Qué es PCA y cómo podemos usarlo?

PCA es un método estadístico que permite reducir la dimensionalidad de un conjunto de datos, manteniendo la mayor parte de la variabilidad presente en él. Esto se logra mediante la transformación de las variables originales en un nuevo conjunto de variables, llamadas componentes principales. He aquí cómo puedes implementarlo:

from sklearn.decomposition import PCA

# Instanciamos PCA para capturar el 50% de la varianza de los datos
caras_pca = PCA(n_components=0.5)

# Ajustamos y transformamos nuestro conjunto de imágenes
componentes = caras_pca.fit_transform(imagenes)

¿Cómo visualizar los componentes?

Una parte importante del uso de PCA es la visualización de los componentes principales. Esto nos ayuda a entender cuántas componentes son necesarias para retener la información deseada.

import matplotlib.pyplot as plt

# Calculamos el número de filas y columnas para el gráfico
filas = 3
columnas = caras_pca.n_components_ // filas

# Definimos la figura
fig, ax = plt.subplots(filas, columnas, figsize=(12, 6))

for i, axi in enumerate(ax.flat):
    # Obtenemos la imagen correspondiente a la componente i
    componente_i = componentes[:, i].reshape(altura, ancho)
    axi.imshow(componente_i, cmap='gray')
    axi.set_title(f'Componente {i}')
    axi.axis('off')

plt.show()

¿Qué sucede al ajustar el porcentaje de varianza explicada?

Modificar el porcentaje de varianza explicada nos permite ajustar la cantidad de componentes mantenidos. Esto es crucial para balancear entre precisión y eficiencia computacional.

# Por ejemplo, para capturar el 80% de la varianza
caras_pca_80 = PCA(n_components=0.8)
componentes_80 = caras_pca_80.fit_transform(imagenes)

# Con un 80% de varianza, obtenemos más componentes:
# Requiere más tiempo de procesamiento pero mejora la calidad de la representación

¿Cómo afecta el porcentaje de información en los resultados?

Es interesante observar cómo el porcentaje de varianza afecta la cantidad de componentes y la representación de los datos. Al aumentar el porcentaje de información que queremos conservar, aumentamos el tiempo de computación y la complejidad.

caras_pca_999 = PCA(n_components=0.999)
componentes_999 = caras_pca_999.fit_transform(imagenes)

# Al graficar, notamos una representación más fiel, aunque con un costo computacional más alto

Las principales conclusiones son que con solo seis componentes puedes capturar el 50% de la información, utilizando cuarenta y cuatro componentes puedes capturar hasta el 80%, y si deseas casi el 100% de precisión, necesitas la mayoría de las imágenes como componentes. Con PCA, no solo puedes identificar patrones y rasgos clave en tus datos, sino que también mejoras la eficiencia del procesamiento, reduciendo la dimensionalidad de tus conjuntos de datos de manera efectiva.

Te animo a seguir explorando y experimentando con PCA y otras técnicas de reducción de dimensionalidad, ya que estas herramientas son fundamentales para el análisis de datos a gran escala y la comprensión de patrones complejos.

Aportes 12

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Resumen de pasos fundamentales en la aplicación de PCA a un conjunto de imágenes:

  1. Definir el porcentaje de información a obtener y aplicar el método.
caras_pca = PCA(n_components = 0.5)  # 50% de información
caras_pca.fit(caras) # ejecutar PCA
  1. Mostrar el número de elementos necesarios
print(caras_pca.n_components_)
  1. Mostrar el resultado del procesamiento y evaluar
componentes = caras_pca.transform(caras)
proyeccion = caras_pca.inverse_transform(componentes)

fig, axes = plt.subplots(5, 10, figsize=(15, 8),
                       subplot_kw = {'xticks' : [], 'yticks':[]},
                        gridspec_kw = dict(hspace = 0.01, wspace = 0.01))

for i, ax in enumerate(axes.flat):
    ax.imshow(proyeccion[i].reshape(112,92), cmap = "gray")

  • Únicamente con 44 componentes podemos recuperar el 80% de la información.

Interesante forma de utilizar PCA para imagenes. Tendré que repasar el curso, me gustó mucho

Alguien me explica, por favor, cómo funciona el método " .fit()".

Gracias!!

Para los que están el colab y tienen líos para montar las imagenes

caras = pd.DataFrame([])

for root, dirs, files in os.walk(path):  
   for file in files:
      im = imageio.imread(root+"/"+file)/255
      cara = pd.Series(im.flatten(), name=path)
      caras = caras.append(cara)
    
fig, axes = plt.subplots(5, 10, figsize=(15,8),
                       subplot_kw = {'xticks' : [], 'yticks':[]},
                        gridspec_kw = dict(hspace = 0.01, wspace = 0.01))


for i, ax in enumerate(axes.flat):
    ax.imshow(caras.iloc[i].values.reshape(112,92), cmap = "gray")
     

Deben de explicar un poco mejor cada termino del codigo. Uno no sabe si utilizar o no en otros problemas que tengamos. Además el mismo ejercicio se encuentra en internet.

También podemos explicar cada varianza

# Verificar la varianza explicada por cada componente principal
explained_variance_ratio = pca.explained_variance_ratio_
cumulative_variance = np.cumsum(explained_variance_ratio)
print("Varianza explicada por cada componente principal:")
print(explained_variance_ratio)
print("Varianza explicada acumulada:")
print(cumulative_variance)

Uff! ¡Excelente clase! El profesor Sebastián explica muy bien.

Estos son los pasos de los videos de Juan Gabriel Gomila, para comparar otras enseñanzas: Analisis de Componentes Principales - Paso a Paso \- Estandarizar los datos (para cada una de las m observaciones) \- Obtener los vectores y valores propios a partir de la matriz de covarianzas o de correlaciones o incluso la técnica de "singular vector descomposition" \- Ordenar los valores propios en orden descendente y quedarnos con los "p" que se correspondan a los "p" mayores y así disminuir el número de variables del dataset (p\
Algo interesante para analizar es la relacion de Cantidad de Componentes Vs. Porcentaje de varianza explicada, la relacion es explonencial: ![](https://static.platzi.com/media/user_upload/image-35b42794-b209-4fc6-8a01-3ef17b94fe10.jpg)

Excelente curso.