18 enero, 2025
Agrupamiento Jerárquico – Scikit Learn
18 enero, 2025
Agrupamiento Jerárquico en Scikit-Learn
El agrupamiento jerárquico es una técnica de aprendizaje no supervisado que se utiliza para agrupar un conjunto de datos en una jerarquía o dendrograma. Esta técnica permite identificar grupos o clusters de datos de manera que los datos más similares queden juntos. En este artículo,exploraremos cómo implementar el agrupamiento jerárquico utilizando la biblioteca Scikit-Learn en Python,así como las diferentes técnicas y parámetros disponibles.
¿Qué es el Agrupamiento Jerárquico?
El agrupamiento jerárquico es una de las técnicas más antiguas de agrupamiento y tiene dos enfoques principales: el enfoque aglomerativo y el enfoque divisivo.
- Enfoque Aglomerativo: Inicia 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 de datos estén en un único clúster.
- Enfoque Divisivo: Comienza con todos los datos en un solo clúster y se dividen en grupos más pequeños en cada paso.
El enfoque aglomerativo es, con mucho, el más utilizado. Utiliza una medida de distancia (como la distancia euclidiana) para determinar qué clústeres deben combinarse en cada paso.
ventajas y desventajas del Agrupamiento Jerárquico
Ventajas
- No requiere un número predefinido de clústeres: A diferencia de otros métodos de agrupamiento, como el k-means, no es necesario especificar de antemano el número de clústeres.
- visualización: Produce un dendrograma que muestra la jerarquía de los clústeres, lo que permite a los usuarios entender mejor la estructura de los datos.
- Flexibilidad: Se pueden utilizar diferentes métodos para calcular la distancia entre clústeres, permitiendo un mayor control sobre el proceso de agrupamiento.
Desventajas
- computacionalmente costoso: Para conjuntos de datos grandes,el agrupamiento jerárquico puede volverse ineficiente,ya que tiene una complejidad aproximada de (O(n^3)).
- Sensibilidad a ruido: El método puede ser sensible a los outliers y podría dar lugar a agrupaciones engañosas.
Implementación de Agrupamiento Jerárquico en Scikit-learn
Scikit-Learn es una de las bibliotecas de Python más populares para el aprendizaje automático. Ofrece una implementación sencilla y efectiva de agrupamiento jerárquico.
Instalación de Scikit-Learn
Para utilizar Scikit-Learn, primero debes asegurarte de que está instalado. Puedes instalarlo a través de pip:
bash
pip install scikit-learn
Importando las Librerías Necesarias
A continuación, importamos las bibliotecas necesarias:
python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import makeblobs
from scipy.cluster.hierarchy import dendrogram, linkage
Generando un Conjunto de Datos
Para ilustrar el agrupamiento jerárquico, podemos generar un conjunto de datos sintético:
python
X, y = makeblobs(nsamples=50, centers=3, clusterstd=0.60, randomstate=0)
Visualización de los Datos
Es útil visualizar los datos antes de aplicar el agrupamiento. podemos utilizar Matplotlib para graficar los puntos:
python
plt.scatter(X[:, 0], X[:, 1], s=50)
plt.title("Datos Sintéticos")
plt.show()
Aplicando Agrupamiento Jerárquico
Para aplicar el agrupamiento jerárquico,utilizamos la función
linkage
de SciPy,que es la base para construir el dendrograma:python
Z = linkage(X,method='ward')
El método
ward
minimiza la varianza dentro de los clústeres y es uno de los métodos más utilizados.Creando el Dendrograma
Para visualizar el resultado del agrupamiento, generamos un dendrograma:
python
plt.figure(figsize=(10, 7))
dendrogram(Z)
plt.title("Dendrograma del Agrupamiento Jerárquico")
plt.xlabel("Índice de los datos")
plt.ylabel("Distancia")
plt.show()
Cortando el Dendrograma
A menudo es útil cortar el dendrograma para definir un número específico de clústeres. Podemos utilizar la función
fcluster
de scipy para hacerlo:python
from scipy.cluster.hierarchy import fcluster
maxd = 1.5 # Distancia umbral
clusters = fcluster(Z, max_d, criterion='distance')
Visualizando los Clústeres
podemos trazar los clústeres identificados en nuestros datos:
python
plt.scatter(X[:, 0], X[:, 1], c=clusters, s=50, cmap='viridis')
plt.title("Clústeres identificados")
plt.show()
conclusión
El agrupamiento jerárquico es una herramienta poderosa en el arsenal del análisis de datos. Su capacidad para crear una representación visual de la estructura de los datos a través de un dendrograma lo hace especialmente útil. Scikit-Learn y SciPy proporcionan herramientas accesibles para implementar esta técnica de manera sencilla.
Es importante ser consciente de las limitaciones de la técnica, especialmente en cuanto a la capacidad computacional y la sensibilidad al ruido. Sin embargo, cuando se utilizan adecuadamente, los métodos de agrupamiento jerárquico pueden ofrecer información valiosa sobre la estructura subyacente de los datos.
A medida que la ciencia de datos continúa evolucionando, comprender y aplicar técnicas como el agrupamiento jerárquico será esencial para extraer insights significativos de conjuntos de datos complejos. ¡Experimenta con diferentes conjuntos de datos y parámetros, y descubre el potencial del agrupamiento jerárquico en tu análisis!