Saltar al contenido

# machine-learning-clasico-con-python

Machine Learning con scikit-learn y XGBoost

Volver a la portada del curso
Lectura (Markdown)

Análisis de componentes principales (PCA) en la práctica

Sección 4 · Aprendizaje no supervisado

Análisis de componentes principales (PCA) en la práctica

El video presentó la intuición de PCA: girar los ejes para que el primero recoja la mayor variación posible. Esta lectura lo lleva a la práctica con las 9 columnas numéricas de PyRitmo: cuántas componentes conservar, cómo leer qué significa cada una, cómo se ven los estilos de K-Means en dos dimensiones y cómo usar PCA dentro de un pipeline. El notebook pca-en-la-practica reproduce todas las cifras.

Varianza explicada y cuántas componentes conservar

PCA se aplica a las columnas escaladas. explained_variance_ratio_ dice qué fracción de la varianza total recoge cada componente; su suma acumulada, cuánto se conserva al quedarse con las primeras $k$.

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

Z = StandardScaler().fit_transform(df[NUMERICAS])
pca = PCA().fit(Z)
print(pca.explained_variance_ratio_.round(3))
print(pca.explained_variance_ratio_.cumsum().round(3))

PC1 explica el 30.5 % y PC2 el 18.3 %: juntas, 48.7 %. Para el 80 % hacen falta 5 componentes y para el 90 %, 6 (91.3 %). No hay un codo nítido: las componentes 3 a 6 explican entre 9.6 % y 11.5 % cada una, porque varias columnas (seguidores, en_playlist, explicita) casi no se correlacionan con el resto.

Dos criterios habituales: fijar un porcentaje (80 % o 90 %), que en scikit-learn se escribe PCA(n_components=0.9), o, si el objetivo es predecir, elegir $k$ con validación cruzada.

Leer components_

Cada fila de components_ son los pesos (cargas) con que una componente combina las columnas originales:

  • PC1: energía (+0.57), tempo (+0.41) y bailabilidad (+0.36) contra acústica (−0.55). Es el eje «enérgica y rápida frente a acústica y tranquila». Seguidores y en_playlist pesan casi cero.
  • PC2: duración (+0.55) y tempo (+0.51) contra bailabilidad (−0.50) y colaboración (−0.41). Separa las canciones largas y rápidas de las bailables con colaboración.

El signo es arbitrario (invertir toda la fila describe el mismo eje): importa qué columnas pesan juntas y cuáles en contra.

Proyección 2D coloreada por cluster

Con K-Means (k=4) sobre los 5 rasgos de audio escalados y las canciones proyectadas en PC1 y PC2, cada estilo ocupa su zona: las acústicas a la izquierda de PC1 (media −2.35), las enérgicas a la derecha (1.51), las largas y ambientales arriba en PC2 (1.92) y las bailables abajo (−1.20). Dos componentes recogen menos de la mitad de la varianza, pero es la mitad que separa los estilos: la proyección sirve para ver los grupos, no para reemplazar las 9 columnas en un modelo.

PCA dentro de un pipeline

from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

pipe = make_pipeline(StandardScaler(), PCA(n_components=6), LogisticRegression(max_iter=2000))
auc = cross_val_score(pipe, X_tr, y_tr, cv=cv, scoring="roc_auc").mean()

Dentro del pipeline, el escalador y PCA se ajustan solo con train en cada pliegue. Para predecir top50, la logística logra AUC de validación cruzada 0.774 con 2 componentes, 0.804 con 4, 0.822 con 6 y 0.823 con las 9. Aquí PCA no mejora el modelo porque 9 columnas ya son pocas; conviene cuando hay muchas columnas correlacionadas, para quitar ruido o acelerar el entrenamiento.

Errores comunes

  • No escalar. Sin escalar, PC1 explica el 98.8 % de la varianza y es casi solo seguidores_miles, que va de 1.6 a 19863. Las unidades deciden el resultado.
  • Interpretar una componente como una columna original. PC1 no es «la energía»: es una mezcla de cuatro columnas.
  • Ajustar PCA con test. Las componentes se aprenden de los datos; si se ajustan con todo el dataset antes de validar, el test se cuela en el modelo.

Comprueba lo que aprendiste

  1. ¿Cuántas componentes necesitas para conservar el 90 % de la varianza de las 9 numéricas escaladas? Seis: la suma acumulada llega a 0.913 en PC6 y a 0.817 en PC5.
  2. Una canción tiene un valor alto de PC1. ¿Qué puedes decir de ella? Que tiende a ser enérgica, rápida y poco acústica, porque energía, tempo y bailabilidad tienen cargas positivas en PC1 y acústica una negativa.
  3. ¿Por qué se pone PCA dentro del pipeline y no se aplica antes de partir? Porque PCA aprende medias, escalas y direcciones de los datos; dentro del pipeline se ajusta solo con train en cada pliegue y el test no influye en las componentes.

Recursos