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:
    1. Inicializar cada punto de datos como un clúster individual.
    2. Calcular la distancia entre todos los pares de clústeres.
    3. Fusionar los dos clústeres más cercanos.
    4. 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:
    1. Comenzar con todos los puntos de datos en un solo clúster.
    2. Dividir el clúster más heterogéneo en dos clústeres.
    3. 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

# Realizar el clustering jerárquico aglomerativo
Z = linkage(X, method='ward')

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

  1. Objetivo: Aplicar clustering jerárquico a un conjunto de datos real y visualizar los resultados.
  2. Conjunto de Datos: Utiliza el conjunto de datos Iris disponible en sklearn.datasets.

Instrucciones

  1. Carga el conjunto de datos Iris.
  2. Realiza el clustering jerárquico aglomerativo utilizando el método de enlace completo.
  3. Visualiza el dendrograma.
  4. Determina los clústeres utilizando un umbral de distancia adecuado.
  5. 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

Módulo 2: Fundamentos de Estadística y Probabilidad

Módulo 3: Preprocesamiento de Datos

Módulo 4: Algoritmos de Machine Learning Supervisado

Módulo 5: Algoritmos de Machine Learning No Supervisado

Módulo 6: Evaluación y Validación de Modelos

Módulo 7: Técnicas Avanzadas y Optimización

Módulo 8: Implementación y Despliegue de Modelos

Módulo 9: Proyectos Prácticos

Módulo 10: Recursos Adicionales

© Copyright 2024. Todos los derechos reservados