Contenido del curso

- Clustering Jerárquico: Dendrogramas y Análisis Filogenético

Clustering Jerárquico: Dendrogramas y Análisis Filogenético

Odisea Algorítmica — En esta lección exploraremos una de las técnicas más intuitivas y poderosas del aprendizaje no supervisado: el clustering jerárquico. A diferencia de métodos como k-means, aquí no necesitamos predefinir el número de clusters. En lugar de eso, construimos una jerarquía de agrupaciones que puede visualizarse mediante un dendrograma. Usaremos ejemplos concretos de análisis filogenético para entender cómo se agrupan especies según sus secuencias genéticas, y codificaremos un ejemplo completo en Python con scipy.cluster.hierarchy.

1. Fundamentos: Aglomerativo vs. Divisivo

El clustering jerárquico se despliega en dos estrategias complementarias. La más común es la aglomerativa (bottom-up), que comienza tratando cada punto como un clúster individual y luego fusiona los más cercanos sucesivamente. En contraste, el enfoque divisivo (top-down) inicia con todos los puntos en un solo clúster y los subdivide recursivamente. En la práctica, el enfoque aglomerativo es más eficiente y ampliamente utilizado, especialmente en análisis biológicos.

▸ Estrategia aglomerativa: cada observación empieza siendo su propio clúster. Se fusionan los pares más similares paso a paso hasta que todo queda en un único grupo.

▸ Estrategia divisiva: se parte de un clúster global y se divide iterativamente hasta que cada punto es un clúster individual.

2. Métodos de Enlace: Simple, Completo, Promedio y Ward

El criterio para decidir qué clústeres fusionar (o dividir) se define por el método de enlace. Cada uno responde a una noción distinta de distancia entre grupos. A continuación se resumen los principales:

Método de enlaceDistancia entre clustersComportamiento típico
Simple (single)Distancia mínima entre cualquier par de puntos de dos clustersTiende a formar cadenas alargadas; sensible a ruido
Completo (complete)Distancia máxima entre cualquier par de puntosGenera clusters compactos y esféricos; más robusto
Promedio (average)Distancia promedio entre todos los pares inter-clusterBalance entre los extremos; usado ampliamente
WardMinimiza el incremento de la varianza intra-clusterProduce clusters equilibrados; muy popular en ciencias

En análisis filogenético se usa con frecuencia el enlace promedio o Ward, ya que reflejan mejor las relaciones evolutivas, aunque el enlace simple puede revelar linajes muy divergentes.

3. Dendrogramas: Construcción e Interpretación

El dendrograma es el corazón visual del clustering jerárquico. Es un diagrama en forma de árbol que muestra la secuencia de fusiones (o divisiones) y las distancias a las que ocurren. Cada hoja representa un punto o especie, y las uniones verticales indican la formación de un nuevo clúster. La altura de la unión es proporcional a la distancia entre los grupos fusionados.

  • Eje horizontal: las observaciones o grupos (sin orden intrínseco).
  • Eje vertical: la distancia o disimilitud a la que se unen los clusters.
  • Ramas: cada rama conecta dos subclústeres; mientras más alta la conexión, menos similares son los grupos.
  • Corte del dendrograma: se traza una línea horizontal a una altura determinada para definir el número de clusters. Todas las ramas que crucen esa línea forman un clúster.

i Interpretación clave: si cortamos el dendrograma a una altura de 3.0, obtendremos 4 clusters. Si cortamos más abajo (2.0), obtendremos 6 clusters. La elección depende del conocimiento del dominio y de la estructura buscada.

4. Aplicación Biológica: Análisis Filogenético de Especies

Imaginemos que tenemos secuencias genéticas de 7 especies hipotéticas. Calculamos una matriz de distancia (por ejemplo, usando distancia de Jaccard o p-distance entre secuencias). Aplicamos clustering jerárquico con enlace promedio y generamos un dendrograma. Este dendrograma es una filogenia (árbol filogenético) que sugiere relaciones evolutivas: especies cercanas en el árbol comparten un ancestro común más reciente.

Ejemplo concreto: Supongamos 7 especies (A, B, C, D, E, F, G) y sus distancias genéticas. El dendrograma podría agrupar (A, B) como hermanos, luego (C, D, E) en otro linaje, y finalmente (F, G) como grupo basal. El corte a una altura de 0.7 revelaría tres grandes grupos evolutivos.

5. Ejemplo en Python con scipy.cluster.hierarchy

A continuación se presenta un ejemplo completo que genera datos simulados de secuencias, calcula la distancia y construye el dendrograma. El código está listo para ejecutarse en un notebook o script.

import numpy as np
    from scipy.cluster.hierarchy import dendrogram, linkage, fcluster
    from scipy.spatial.distance import pdist
    import matplotlib.pyplot as plt
    
    # 1. Datos simulados: 7 especies, 50 posiciones genéticas (binarias)
    np.random.seed(42)
    especies = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
    secuencias = np.random.choice([0, 1], size=(7, 50), p=[0.3, 0.7])
    
    # 2. Matriz de distancia (distancia de Hamming)
    dist_matrix = pdist(secuencias, metric='hamming')
    
    # 3. Clustering jerárquico aglomerativo con enlace promedio
    Z = linkage(dist_matrix, method='average')
    
    # 4. Visualización del dendrograma
    plt.figure(figsize=(8, 5))
    dendrogram(Z, labels=especies, leaf_rotation=45, leaf_font_size=12)
    plt.title('Dendrograma - Análisis Filogenético (Enlace promedio)')
    plt.xlabel('Especies')
    plt.ylabel('Distancia')
    plt.tight_layout()
    plt.show()
    
    # 5. Corte del dendrograma para obtener 3 clusters
    clusters = fcluster(Z, t=0.3, criterion='distance')
    print("Cluster asignado a cada especie:", dict(zip(especies, clusters)))

El resultado de fcluster asigna cada especie a un grupo (1, 2 o 3). La altura de corte (0.3) puede ajustarse. En la práctica, el biólogo define el umbral basado en la diversidad genética esperada.

6. Corte del Dendrograma: Cómo Definir los Clusters

Una de las decisiones más importantes es dónde cortar el dendrograma. Existen criterios estadísticos como el coeficiente de silueta o la inspección visual de las distancias. En el ejemplo anterior, la línea de corte a 0.3 produce 3 clusters. Si cortamos a 0.15, obtendríamos 5 clusters, lo que podría ser excesivo. La elección siempre debe estar guiada por la pregunta científica: ¿queremos linajes principales o subespecies?

  • Corte fijo: se elige una altura basada en la estabilidad de los clusters.
  • Corte dinámico: algoritmos como cutreeDynamic (R) o fcluster con criterio 'maxclust' permiten fijar el número de clusters.

7. Conclusión y Siguientes Pasos

El clustering jerárquico combina la potencia matemática con una visualización excepcionalmente informativa. En esta lección hemos recorrido desde los conceptos básicos (aglomerativo vs. divisivo) hasta la implementación en Python con un caso filogenético real. El dominio de dendrogramas y métodos de enlace te permitirá abordar problemas de agrupación en biología, mercadotecnia, ciencias sociales y más. En la siguiente lección exploraremos cómo evaluar la calidad de los clusters con métricas internas y externas.


Odisea Algorítmica — Para consolidar el conocimiento, te invitamos a modificar el método de enlace en el código de Python a 'complete' o 'ward' y observar cómo cambia la estructura del dendrograma. La práctica es la clave del aprendizaje profundo.

Conceptos de clustering jerárquico aglomerativo vs divisivo. Enlace simple, completo, promedio y de Ward. Construcción e interpretación de dendrogramas. Corte del dendrograma para definir clusters. Aplicación biológica: análisis filogenético de especies basado en secuencias genéticas. Ejemplo en Python con scipy.cluster.hierarchy.
Calificación
0 0

No hay comentarios por ahora.