043 — Clustering y reducción de dimensionalidad

← Clase anterior · Índice de la parte · Clase siguiente →

Parte: 03 — Machine learning clásico
Nivel: intermedio · Horas estimadas: 6
Laboratorio: ml · Estado: EXECUTABLE_CORE

🎯 Propósito

Comprender clustering y reducción de dimensionalidad dentro de la evolución de la inteligencia artificial, implementar un experimento mínimo verificable y distinguir qué parte constituye evidencia frente a una afirmación todavía no comprobada.

📚 Resultados de aprendizaje

Al finalizar podrás:

  1. Explicar clustering y reducción de dimensionalidad usando los conceptos KMeans, DBSCAN, PCA, embeddings.
  2. Ejecutar el laboratorio con una semilla explícita y revisar su contrato JSON.
  3. Identificar al menos un supuesto, una limitación y un riesgo de aplicación.
  4. Comparar el enfoque con la etapa anterior de la ruta de aprendizaje.
  5. Producir una evidencia reproducible y una conclusión que no exceda los datos.

🧩 Conceptos centrales

KMeans, DBSCAN, PCA, embeddings

🗺️ Ubicación en el mapa de la IA

Esta clase abandona las etiquetas: el aprendizaje no supervisado busca estructura en los datos sin un target que corregir. K-means (Lloyd 1957/1982), el clustering jerárquico y PCA (Pearson 1901, Hotelling 1933) son las herramientas clásicas de exploración, compresión y visualización. Sus ideas — centroides, distancias, proyecciones que preservan varianza — son el vocabulario con el que después se entienden los embeddings (partes 05 y 08): un espacio vectorial donde "cerca" significa "parecido" es exactamente lo que PCA y k-means asumen y lo que las redes aprenden.

📖 Fundamentos

🎯 K-means: minimizar inercia

Dado k (número de clusters), k-means busca centroides μ₁..μ_k que minimicen la inercia (suma de cuadrados intra-cluster):

J = Σᵢ ‖xᵢ − μ_{c(i)}‖²    donde c(i) es el cluster asignado a xᵢ

Algoritmo de Lloyd:

1. Inicializar k centroides (aleatorio o k-means++)
2. Asignación: cada punto al centroide más cercano
3. Actualización: cada centroide = media de sus puntos
4. Repetir 2-3 hasta que las asignaciones no cambien

Cada paso reduce J, así que converge — pero a un óptimo local que depende de la inicialización (por eso se corre varias veces; k-means++ elige semillas separadas y mejora la esperanza). Supuestos implícitos: clusters convexos, aproximadamente esféricos y de tamaño similar, en la métrica euclidiana — escalar features es obligatorio. Elegir k: método del codo sobre J (heurístico), coeficiente de silueta s = (b−a)/max(a,b) (a = distancia media intra-cluster, b = distancia media al cluster vecino más próximo; s ∈ [−1,1], más alto mejor), o conocimiento del dominio.

🌲 Clustering jerárquico

No exige k de antemano: construye un árbol de fusiones (dendrograma). El aglomerativo parte de n clusters de un punto y fusiona repetidamente los dos más cercanos según el criterio de enlace (linkage):

Cortar el dendrograma a una altura da una partición; la altura de cada fusión informa cuán "natural" es. Costo O(n²)–O(n³): inviable para millones de puntos. Alternativa por densidad: DBSCAN agrupa puntos con ≥ minPts vecinos en radio ε y marca como ruido lo demás — encuentra formas arbitrarias y outliers, pero sufre con densidades heterogéneas.

📉 PCA: proyectar preservando varianza

PCA busca direcciones ortogonales (componentes principales) que capturan la máxima varianza. Con los datos centrados (media 0), la matriz de covarianza C = XᵀX/(n−1) se descompone en autovectores/autovalores:

C·vⱼ = λⱼ·vⱼ      λ₁ ≥ λ₂ ≥ ... ≥ λ_d ≥ 0

PCA es lineal y no supervisado: maximiza varianza, que no tiene por qué coincidir con lo discriminativo para una tarea posterior. Para visualización no lineal existen t-SNE y UMAP (preservan vecindades locales, distorsionan distancias globales: sirven para mirar, no para medir).

🧮 Ejemplo trabajado

K-means a mano con 6 puntos en 1D: x = [1, 2, 3, 8, 9, 10], k = 2, centroides iniciales μ₁ = 2, μ₂ = 3 (mala inicialización a propósito).

Iteración 1 — asignación: {1,2 → μ₁}, {3,8,9,10 → μ₂}
             actualización: μ₁ = 1.5, μ₂ = 7.5
Iteración 2 — asignación: |3−1.5|=1.5 < |3−7.5|=4.5 → {1,2,3 → μ₁}, {8,9,10 → μ₂}
             actualización: μ₁ = 2, μ₂ = 9
Iteración 3 — asignaciones no cambian → convergencia
J final = (1+0+1) + (1+0+1) = 4

Pese a la mala semilla, aquí converge al óptimo natural. PCA en 2D: puntos (2,1), (4,2), (6,3): perfectamente alineados en la dirección (2,1)/√5. λ₁ captura el 100 % de la varianza; el segundo autovalor es 0. Proyectar a 1D no pierde nada: los datos eran intrínsecamente unidimensionales.

📊 Propiedades y comparación

Método k a priori Forma de clusters Outliers Costo Determinista
k-means (Lloyd) Convexos, esféricos Los absorbe (distorsionan μ) O(n·k·iter) No (semilla)
Jerárquico (Ward) No (dendrograma) Compactos Sensible O(n²)–O(n³)
DBSCAN No (ε, minPts) Arbitraria Los marca como ruido O(n log n)
PCA m componentes — (proyección) Sensible (varianza) O(min(n²d, nd²))
t-SNE/UMAP — (visualización) Alto No
flowchart TD
    X["Datos sin etiquetas<br/>(escalados)"] --> Q{"¿Objetivo?"}
    Q -- "Agrupar" --> K{"¿Se conoce k y<br/>clusters compactos?"}
    K -- "Sí" --> KM["k-means (k-means++, varias corridas)<br/>validar con silueta"]
    K -- "No, formas raras<br/>o ruido" --> DB["DBSCAN (ε, minPts)"]
    K -- "No, quiero jerarquía" --> HC["Aglomerativo + dendrograma<br/>(linkage Ward)"]
    Q -- "Comprimir /<br/>visualizar" --> P["PCA: centrar → autovectores<br/>de la covarianza"]
    P --> VE["Elegir m por varianza<br/>explicada (90-95 %)"]
    VE --> USO["Features comprimidas para<br/>modelos posteriores o gráfico 2D"]
    KM --> INT["Interpretar clusters con<br/>estadísticas por grupo"]
    DB --> INT
    HC --> INT

⚠️ Errores conceptuales frecuentes

  1. "K-means encontró LOS grupos reales." K-means siempre devuelve k grupos, haya o no estructura: partirá en k pedazos hasta un gas uniforme. La existencia de clusters se valida (silueta, estabilidad ante re-muestreo), no se asume.
  2. "El codo dice k=4, entonces hay 4 grupos." La inercia J decrece SIEMPRE con k; el "codo" es una heurística visual frecuentemente ambigua. Contrastar con silueta y con sentido del dominio.
  3. "PCA elige las features importantes." PCA no elige features: construye combinaciones lineales de todas, ordenadas por varianza — que puede ser ruido de medición. Máxima varianza ≠ máxima relevancia para una tarea supervisada.
  4. "Las distancias del mapa t-SNE se pueden medir." t-SNE/UMAP preservan vecindades locales y distorsionan lo global: tamaños y separaciones entre islas del gráfico no son evidencia. Para geometría global, PCA.
  5. "No escalé, pero el clustering salió bien." Sin escalar, la feature de mayor rango domina la distancia euclidiana: el resultado es un clustering de esa feature con ruido del resto — puede "verse bien" y ser un artefacto de unidades.

🚀 Del aprendizaje a la operación

Usar clustering en producción exige: pipeline de escalado idéntico en entrenamiento y scoring, criterio de asignación para puntos nuevos (¿centroide más cercano? ¿re-clustering periódico?), validación de estabilidad (correr con re-muestreos y medir si los grupos persisten — un segmento de clientes que cambia con la semilla no es un segmento), etiquetado humano de los clusters con estadísticas por grupo antes de tomar decisiones, y para PCA, guardar media y componentes exactos del ajuste para transformar el tráfico futuro sin re-ajustar (si no, el espacio cambia bajo el modelo que lo consume).

🧪 Laboratorio

python lab.py

El laboratorio llama a ai_evolution.labs.run_lab("ml"). Esta decisión evita 183 implementaciones divergentes: cada clase tiene un entrypoint propio, pero los motores didácticos se prueban como una biblioteca común.

🔍 Evidencia esperada

📓 Notebooks

📝 Evaluación

Criterio Peso
Comprensión conceptual 25 %
Ejecución reproducible 25 %
Interpretación basada en evidencia 25 %
Riesgos, límites y mejora propuesta 25 %

Consulta assessment.md para preguntas y criterio de aceptación.

⚠️ Errores comunes

Síntoma Causa probable Corrección
El código corre, pero no hay conclusión Se confundió ejecución con aprendizaje Explica qué demuestra y qué no demuestra
El resultado cambia sin explicación No se registró semilla o configuración Conserva semilla, versión y parámetros
Se promete uso real Se extrapoló desde una demo educativa Declara entorno, datos, límites y revisión humana
Se copia una métrica aislada No existe baseline ni costo de error Añade comparación y criterio de decisión

❓ Preguntas frecuentes

¿Debo usar una API comercial?
No. El núcleo funciona localmente. Las extensiones LIVE se documentan por separado.

¿El laboratorio representa una implementación industrial?
No por sí solo. Enseña el contrato y el patrón; producción exige integración, seguridad, observabilidad, pruebas y operación.

¿Dónde profundizo?
Revisa las especializaciones enlazadas en el README raíz y la ruta siguiente.

🔗 Referencias


📜 Papers que fundamentan esta clase

Bloque generado por python scripts/link_papers_to_classes.py. La fuente es papers/catalog/papers.json.

Paper Año Qué desbloqueó Miniatura
P53 · Sobre las líneas y planos de ajuste más próximo a sistemas de puntos en el espacio 1901 La primera respuesta al problema de resumir una nube de puntos con menos dimensiones sin privilegiar ninguna variable. notebook
P73 · Cuantización por mínimos cuadrados en PCM 1982 El algoritmo de agrupamiento más usado del mundo, con la demostración de que converge —y de que converge a un óptimo local, no al global. notebook
P83 · Visualizar datos con t-SNE 2008 Hace visibles las estructuras locales de datos de alta dimensión, y con ello se convierte en la figura por defecto de media década de artículos. notebook

Cada ficha explica el problema anterior, la matemática mínima, los límites y los errores de atribución más frecuentes. Para leerlas con método: cómo leer un paper de IA · anexos matemáticos.


📚 Bibliografía de apoyo

Bloque generado por python scripts/link_sources_to_classes.py. Cada obra lleva su localizador verificado en sources/bibliography.json.

Los papers dicen de dónde salió el mecanismo. Estas obras lo desarrollan con el espacio que una clase no tiene: teoría completa, demostraciones y ejercicios.

Obra Edición Localizador Papel en esta clase
Hastie, Trevor, Tibshirani, Robert y Friedman, Jerome — The Elements of Statistical Learning 2.ª · 2009 ISBN 9780387848570 · web de la obra citada en las referencias de esta clase · cap. 14 · obra de referencia de la parte 03
James, Gareth et al. — An Introduction to Statistical Learning 2021 ISBN 9783031387470 · web de la obra citada en las referencias de esta clase · cap. 12 · obra de referencia de la parte 03
Murphy, Kevin P. — Probabilistic Machine Learning 2022 ISBN 9780262046824 · web de la obra obra de referencia de la parte 03 · fundamentos probabilísticos del aprendizaje

⬅️ Clase anterior

042 — Ingeniería y selección de características

➡️ Siguiente clase

044 — Detección de anomalías


📝 Evaluación completa

❓ Preguntas

  1. Define clustering y reducción de dimensionalidad sin usar una marca o framework como definición.
  2. Explica la relación entre KMeans, DBSCAN, PCA, embeddings.
  3. Ejecuta lab.py dos veces con la misma semilla. ¿Qué debe conservarse?
  4. Identifica una afirmación permitida y una afirmación exagerada sobre el resultado.
  5. Propón una prueba negativa o un caso límite.

🏆 Reto verificable

Amplía el resultado del laboratorio con una clave student_extension que incluya:

✅ Criterio de aceptación