El clustering jerárquico es una técnica de agrupamiento que busca construir una jerarquía de clústeres. A diferencia de otros métodos de clustering como K-means, el clustering jerárquico no requiere especificar el número de clústeres de antemano. Este método puede ser aglomerativo (bottom-up) o divisivo (top-down).
Tipos de Clustering Jerárquico
Clustering Jerárquico Aglomerativo (AGNES)
- Descripción: Comienza con cada punto de datos como un clúster individual y, en cada paso, fusiona los dos clústeres más cercanos hasta que todos los puntos estén en un solo clúster.
- Proceso:
- Inicializar cada punto de datos como un clúster individual.
- Calcular la distancia entre todos los pares de clústeres.
- Fusionar los dos clústeres más cercanos.
- Repetir los pasos 2 y 3 hasta que todos los puntos estén en un solo clúster.
Clustering Jerárquico Divisivo (DIANA)
- Descripción: Comienza con todos los puntos de datos en un solo clúster y, en cada paso, divide el clúster más heterogéneo hasta que cada punto de datos esté en su propio clúster.
- Proceso:
- Comenzar con todos los puntos de datos en un solo clúster.
- Dividir el clúster más heterogéneo en dos clústeres.
- Repetir el paso 2 hasta que cada punto de datos esté en su propio clúster.
Métodos de Enlace
Para determinar qué clústeres fusionar o dividir, se utilizan diferentes métodos de enlace:
- Enlace Simple: La distancia entre dos clústeres es la distancia mínima entre cualquier par de puntos en los dos clústeres.
- Enlace Completo: La distancia entre dos clústeres es la distancia máxima entre cualquier par de puntos en los dos clústeres.
- Enlace Promedio: La distancia entre dos clústeres es el promedio de todas las distancias entre pares de puntos en los dos clústeres.
- Enlace de Centroide: La distancia entre dos clústeres es la distancia entre los centroides de los dos clústeres.
Ejemplo Práctico con Python
A continuación, se presenta un ejemplo práctico de clustering jerárquico aglomerativo utilizando la biblioteca scipy
en Python.
Paso 1: Importar las Bibliotecas Necesarias
import numpy as np import matplotlib.pyplot as plt from scipy.cluster.hierarchy import dendrogram, linkage from scipy.cluster.hierarchy import fcluster
Paso 2: Crear un Conjunto de Datos de Ejemplo
# Crear un conjunto de datos de ejemplo np.random.seed(42) X = np.random.rand(10, 2) # 10 puntos de datos en 2 dimensiones
Paso 3: Realizar el Clustering Jerárquico
Paso 4: Visualizar el Dendrograma
# Visualizar el dendrograma plt.figure(figsize=(10, 7)) dendrogram(Z) plt.title('Dendrograma de Clustering Jerárquico') plt.xlabel('Índice de Puntos de Datos') plt.ylabel('Distancia') plt.show()
Paso 5: Obtener los Clústeres
# Obtener los clústeres a partir del dendrograma max_d = 0.5 # Umbral de distancia para cortar el dendrograma clusters = fcluster(Z, max_d, criterion='distance') print("Clústeres asignados a cada punto de datos:", clusters)
Ejercicio Práctico
Ejercicio 1: Aplicar Clustering Jerárquico a un Conjunto de Datos Real
- Objetivo: Aplicar clustering jerárquico a un conjunto de datos real y visualizar los resultados.
- Conjunto de Datos: Utiliza el conjunto de datos
Iris
disponible ensklearn.datasets
.
Instrucciones
- Carga el conjunto de datos
Iris
. - Realiza el clustering jerárquico aglomerativo utilizando el método de enlace completo.
- Visualiza el dendrograma.
- Determina los clústeres utilizando un umbral de distancia adecuado.
- Visualiza los clústeres en un gráfico de dispersión.
Solución
from sklearn.datasets import load_iris # Paso 1: Cargar el conjunto de datos Iris iris = load_iris() X_iris = iris.data # Paso 2: Realizar el clustering jerárquico aglomerativo Z_iris = linkage(X_iris, method='complete') # Paso 3: Visualizar el dendrograma plt.figure(figsize=(10, 7)) dendrogram(Z_iris) plt.title('Dendrograma de Clustering Jerárquico (Iris)') plt.xlabel('Índice de Puntos de Datos') plt.ylabel('Distancia') plt.show() # Paso 4: Obtener los clústeres max_d_iris = 3 # Umbral de distancia para cortar el dendrograma clusters_iris = fcluster(Z_iris, max_d_iris, criterion='distance') print("Clústeres asignados a cada punto de datos:", clusters_iris) # Paso 5: Visualizar los clústeres en un gráfico de dispersión plt.figure(figsize=(10, 7)) plt.scatter(X_iris[:, 0], X_iris[:, 1], c=clusters_iris, cmap='prism') plt.title('Clústeres de Clustering Jerárquico (Iris)') plt.xlabel('Longitud del Sépalo') plt.ylabel('Ancho del Sépalo') plt.show()
Retroalimentación sobre Errores Comunes
- Error en la Selección del Umbral de Distancia: Elegir un umbral de distancia demasiado alto o demasiado bajo puede resultar en un número inapropiado de clústeres. Es importante visualizar el dendrograma y seleccionar un umbral que capture la estructura natural de los datos.
- Interpretación Incorrecta del Dendrograma: Asegúrate de entender cómo leer un dendrograma. Las uniones más bajas representan fusiones de clústeres más similares, mientras que las uniones más altas representan fusiones de clústeres más disímiles.
Conclusión
En esta sección, hemos explorado el clustering jerárquico, sus tipos y métodos de enlace, y hemos implementado un ejemplo práctico utilizando Python. El clustering jerárquico es una herramienta poderosa para descubrir la estructura subyacente en los datos sin necesidad de especificar el número de clústeres de antemano. En el siguiente módulo, profundizaremos en otra técnica de clustering: el Análisis de Componentes Principales (PCA).
Curso de Machine Learning
Módulo 1: Introducción al Machine Learning
- ¿Qué es el Machine Learning?
- Historia y evolución del Machine Learning
- Tipos de Machine Learning
- Aplicaciones del Machine Learning
Módulo 2: Fundamentos de Estadística y Probabilidad
- Conceptos básicos de estadística
- Distribuciones de probabilidad
- Inferencia estadística
- Teorema de Bayes
Módulo 3: Preprocesamiento de Datos
Módulo 4: Algoritmos de Machine Learning Supervisado
- Regresión lineal
- Regresión logística
- Árboles de decisión
- Máquinas de soporte vectorial (SVM)
- K-Vecinos más cercanos (K-NN)
- Redes neuronales
Módulo 5: Algoritmos de Machine Learning No Supervisado
- Clustering: K-means
- Clustering jerárquico
- Análisis de componentes principales (PCA)
- Análisis de agrupamiento DBSCAN
Módulo 6: Evaluación y Validación de Modelos
Módulo 7: Técnicas Avanzadas y Optimización
- Ensemble Learning
- Gradient Boosting
- Redes neuronales profundas (Deep Learning)
- Optimización de hiperparámetros
Módulo 8: Implementación y Despliegue de Modelos
- Frameworks y bibliotecas populares
- Implementación de modelos en producción
- Mantenimiento y monitoreo de modelos
- Consideraciones éticas y de privacidad
Módulo 9: Proyectos Prácticos
- Proyecto 1: Predicción de precios de viviendas
- Proyecto 2: Clasificación de imágenes
- Proyecto 3: Análisis de sentimientos en redes sociales
- Proyecto 4: Detección de fraudes