# machine-learning-clasico-con-python
Machine Learning con scikit-learn y XGBoost
Volver a la portada del cursoAná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_playlistpesan 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
- ¿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.
- 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.
- ¿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.