- 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 enlace | Distancia entre clusters | Comportamiento típico |
|---|---|---|
| Simple (single) | Distancia mínima entre cualquier par de puntos de dos clusters | Tiende a formar cadenas alargadas; sensible a ruido |
| Completo (complete) | Distancia máxima entre cualquier par de puntos | Genera clusters compactos y esféricos; más robusto |
| Promedio (average) | Distancia promedio entre todos los pares inter-cluster | Balance entre los extremos; usado ampliamente |
| Ward | Minimiza el incremento de la varianza intra-cluster | Produce 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) ofclustercon 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.
No hay comentarios por ahora.
Compartir este contenido
Compartir enlace
Compartir en redes sociales
Compartir por correo electrónico
Please iniciar sesión para compartir esto Artículo por correo electrónico.