• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Encuestas: Tamaño de Muestra
    • Lotería: Probabilidad de Ganar
    • Reparto de Escaños (D’Hondt)
    • Tres en Raya con IA
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • Excel
  • Matlab

Cómo determinar el número de componentes en PCA usando la varianza explicada acumulada

enero 31, 2025 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 5 minutos

El análisis de componentes principales (PCA, por sus siglas en inglés) es una técnica ampliamente utilizada para reducir la dimensionalidad en conjuntos de datos. Una de las decisiones clave al aplicar PCA es determinar el número de componentes que se deben seleccionar, logrando un equilibrio entre capturar la mayor cantidad de información posible y evitar redundancias innecesarias. En esta entrada, explicaremos cómo determinar el número de componentes en PCA utilizando la varianza explicada acumulada, ilustrando el método con un caso práctico y compartiendo una función que automatiza este proceso.

Tabla de contenidos

  • 1 ¿Qué es la varianza explicada acumulada?
  • 2 Pasos para determinar el número de componentes en PCA
  • 3 Ejemplo práctico: Conjunto de datos de diabetes
    • 3.1 Paso 1: Carga y preprocesamiento de los datos
    • 3.2 Paso 2: Aplicar PCA y calcular la varianza explicada acumulada
    • 3.3 Paso 3: Seleccionar el número óptimo de componentes
    • 3.4 Paso 4: Visualizar los resultados
  • 4 Función en Python para automatizar el proceso
  • 5 Conclusiones

¿Qué es la varianza explicada acumulada?

En PCA, cada componente principal representa una dirección de máxima varianza en los datos. La varianza explicada por un componente mide cuánta información (o dispersión) de los datos originales captura.

La varianza explicada acumulada es la suma de las varianzas explicadas por los componentes seleccionados hasta cierto punto, expresada como un porcentaje del total. Este valor permite determinar qué proporción de la información total del conjunto de datos se conserva al incluir un número específico de componentes.

Publicidad


Pasos para determinar el número de componentes en PCA

Para estimar el número óptimo de componentes en PCA usando la varianza explicada acumulada, se deben seguir los siguientes pasos:

  1. Calcular los componentes principales y las varianzas explicadas: Aplicar PCA para calcular cuánta varianza explica cada componente.
  2. Sumar las varianzas explicadas: Calcular la varianza explicada acumulada para determinar qué porcentaje de información total se conserva al incluir varios componentes.
  3. Definir un umbral deseado: Elegir un porcentaje de retención de información, como el 90%, el 95% o el 99%, según los requerimientos del problema. En aplicaciones críticas, puede ser preferible un umbral más alto para conservar más información.
  4. Seleccionar el número de componentes: Identificar el menor número de componentes necesarios para superar el umbral deseado.

Ejemplo práctico: Conjunto de datos de diabetes

Para ilustrar este método, utilizaremos el conjunto de datos Diabetes. Este conjunto de datos, disponible en la biblioteca sklearn, incluye 442 observaciones de pacientes con diabetes y 10 variables numéricas que describen diferentes factores relacionados con la salud, como la presión arterial o los niveles de glucosa. El objetivo es reducir la dimensionalidad de este conjunto de datos, conservando la mayor cantidad de información posible.

Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo
En Analytics Lane
Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo

Publicidad


Paso 1: Carga y preprocesamiento de los datos

Para este ejemplo, cargamos los datos y los normalizamos antes de realizar el análisis de PCA.

import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_diabetes

# Cargar el conjunto de datos de diabetes
data = load_diabetes()
X = data.data
df = pd.DataFrame(X, columns=data.feature_names)

# Normalizar los datos
scaler = StandardScaler()
X_scaled = scaler.fit_transform(df)

Paso 2: Aplicar PCA y calcular la varianza explicada acumulada

Tras normalizar los datos, aplicamos PCA y calculamos la varianza explicada por cada componente. Este valor se puede obtener a partir de la propiedad explained_variance_ratio_ del objeto PCA que contiene la proporción de varianza explicada por cada componente, ya normalizada. Para calcular la varianza explicada acumulada, simplemente sumamos estos valores.

# Aplicar PCA
pca = PCA()
pca.fit(X_scaled)

# Calcular la varianza explicada acumulada
varianza_acumulada = np.cumsum(pca.explained_variance_ratio_)

# Imprimir resultados
for i, var in enumerate(varianza_acumulada):
    print(f"Componentes: {i+1}, Varianza explicada acumulada: {var:.2f}")
Componentes: 1, Varianza explicada acumulada: 0.40
Componentes: 2, Varianza explicada acumulada: 0.55
Componentes: 3, Varianza explicada acumulada: 0.67
Componentes: 4, Varianza explicada acumulada: 0.77
Componentes: 5, Varianza explicada acumulada: 0.83
Componentes: 6, Varianza explicada acumulada: 0.89
Componentes: 7, Varianza explicada acumulada: 0.95
Componentes: 8, Varianza explicada acumulada: 0.99
Componentes: 9, Varianza explicada acumulada: 1.00
Componentes: 10, Varianza explicada acumulada: 1.00

El resultado muestra que, para este conjunto de datos, son necesarios 7 componentes de los 10 totales para conservar el 90% de la varianza explicada. Curiosamente, como la varianza explicada por 6 componentes es del 89% y con 7 se alcanza el 95%, se necesitan los mismos 7 componentes para cumplir el umbral del 95%. Para el 99%, en cambio, son necesarios 8 componentes.

Publicidad


Paso 3: Seleccionar el número óptimo de componentes

Seleccionamos el número de componentes necesarios para alcanzar un umbral de varianza explicada, como el 90%.

umbral = 0.9  # 90% de varianza explicada
n_componentes = np.argmax(varianza_acumulada >= umbral) + 1
print(f"Número óptimo de componentes: {n_componentes}")
Número óptimo de componentes: 7

En este caso, como se ha visto en la sección anterior, el número óptimo de componentes es 7.

Paso 4: Visualizar los resultados

Para complementar el análisis, graficamos la varianza explicada acumulada. Esto permite identificar visualmente el punto en el que se alcanza el umbral deseado, aunque no es estrictamente necesario para el análisis.

import matplotlib.pyplot as plt

plt.figure(figsize=(8, 5))
plt.plot(range(1, len(varianza_acumulada) + 1), varianza_acumulada, marker='o', linestyle='--', color='b')
plt.axhline(y=umbral, color='r', linestyle='-')
plt.xlabel('Número de componentes principales')
plt.ylabel('Varianza explicada acumulada')
plt.title('Selección del número de componentes principales')
plt.grid()
plt.show()

Al ejecutar este código, se genera la siguiente gráfica, que muestra cómo evoluciona la varianza explicada acumulada en función del número de componentes. Este tipo de visualización permite identificar de forma clara el punto en el que se alcanza el porcentaje deseado de información retenida, facilitando la selección del número óptimo de componentes.

Representación de la varianza explicada frente al número de componentes para el conjunto de datos de diabetes.
Varianza explicada frente al número de componentes para el conjunto de datos de diabetes.

Publicidad


Función en Python para automatizar el proceso

Dado que esta es una tarea habitual, es útil contar con una función que automatiza el cálculo del número óptimo de componentes. Una posible implementación de esta función podría ser la que se muestra a continuación.

def seleccionar_componentes(X, umbral=0.9):
    """
    Selecciona el número óptimo de componentes principales según la varianza explicada.

    Parámetros:
        X (array-like): Datos de entrada (normalizados).
        umbral (float): Umbral de varianza explicada acumulada (por defecto 0.9).

    Devuelve:
        int: Número de componentes principales seleccionados.
    """
    # Normalizar los datos
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)

    # Aplicar PCA
    pca = PCA()
    pca.fit(X_scaled)

    # Calcular varianza acumulada
    varianza_acumulada = np.cumsum(pca.explained_variance_ratio_)

    # Encontrar el número óptimo de componentes
    n_componentes = np.argmax(varianza_acumulada >= umbral) + 1

    return n_componentes

Esta función toma un conjunto de datos como entrada y devuelve el número de componentes necesarios según el umbral de varianza explicada especificado. Una función que se puede usar fácilmente como se muestra a continuación.

n_componentes = seleccionar_componentes(df, umbral=0.9)
print(f"Número de componentes seleccionados: {n_componentes}")
Número de componentes seleccionados: 7

Conclusiones

El método de la varianza explicada acumulada es una técnica sencilla y efectiva para seleccionar el número de componentes principales en PCA, siendo un hiperparámetro clave al realizar este análisis. De esta forma, se obtiene un conjunto de datos que conserva una proporción significativa de la información original mientras se reduce su dimensionalidad. Esto no solo facilita el análisis y la visualización, sino que también puede ayudar a eliminar el ruido y mejorar el rendimiento de modelos de aprendizaje automático.

Además, en esta entrada hemos incluido una función automatizada que facilita este proceso, adaptándose a diferentes conjuntos de datos y umbrales según las necesidades del usuario.

Nota: La imagen de este artículo fue generada utilizando un modelo de inteligencia artificial.

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicidad


Publicaciones relacionadas

  • Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo
  • ¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia
  • Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia
  • Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)
  • La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento
  • Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows
  • Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte
  • Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)
  • Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

Publicado en: Ciencia de datos Etiquetado como: Machine learning, PCA

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

octubre 23, 2025 Por Daniel Rodríguez

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

octubre 21, 2025 Por Daniel Rodríguez

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

octubre 16, 2025 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Aprovecha un 40% de descuento en Coursera Plus para impulsar tus habilidades en Ciencia de Datos e Inteligencia Artificial publicado el noviembre 9, 2024 | en Noticias, Reseñas
  • Entendiendo la validación cruzada: Selección de la profundidad óptima en un árbol de decisión publicado el septiembre 13, 2024 | en Ciencia de datos
  • Diferencias entre CPU, GPU, TPU y NPU publicado el abril 19, 2023 | en Herramientas
  • El método de Muller e implementación en Python publicado el marzo 24, 2023 | en Ciencia de datos
  • Listado de contraseñas de aplicación creadas Resolver problema de credenciales en Bitbucket publicado el marzo 16, 2022 | en Herramientas

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.5 (10)

Diferencias entre var y let en JavaScript

Publicidad

Comentarios recientes

  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown
  • Daniel Rodríguez en Tutorial de Mypy para Principiantes

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2025 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto