Skip to main content
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.‍


  1. 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.




  1. 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 = make
blobs(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

max
d = 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!