Saltar al contenido

Clustering Jerárquico

El clustering jerárquico es una técnica de aprendizaje automático utilizada para agrupar puntos de datos en clústeres basándose en sus similitudes. Es un algoritmo potente que puede ayudar a descubrir patrones y estructuras ocultas dentro de un conjunto de datos. En este artículo, exploraremos el concepto de clustering jerárquico, sus tipos y cómo se puede implementar en Python.

¿Qué es el Clustering Jerárquico?

El clustering jerárquico es una técnica utilizada para agrupar objetos similares en clústeres. Se basa en el principio de agrupar objetos similares y luego fusionarlos gradualmente en clústeres cada vez más grandes hasta que todos los objetos estén en un solo clúster. La salida del algoritmo de clustering jerárquico es un dendrograma, que es un diagrama similar a un árbol que muestra las relaciones jerárquicas entre los clústeres.

Tipos de Clustering Jerárquico

Existen dos tipos principales de clustering jerárquico:

  1. Clustering aglomerativo: Este es un enfoque de abajo hacia arriba donde cada punto de datos se trata como un clúster separado y luego se fusionan para formar clústeres más grandes.
  2. Clustering divisivo: Este es un enfoque de arriba hacia abajo donde todos los puntos de datos se tratan como un solo clúster y luego se dividen recursivamente en clústeres más pequeños.

¿Cómo funciona el Clustering Jerárquico?

El clustering jerárquico funciona calculando la distancia entre todos los pares de puntos de datos y luego fusionando iterativamente el par de clústeres más cercanos hasta que todos los puntos de datos pertenezcan a un solo clúster. La distancia entre dos clústeres se puede calcular utilizando varias métricas de distancia, como la distancia euclidiana, la distancia de Manhattan y la similitud coseno.

Implementación del Clustering Jerárquico en Python

Python proporciona varias bibliotecas para implementar clustering jerárquico, como Scikit-learn, SciPy y PyClustering. Aquí, utilizaremos la biblioteca Scikit-learn para implementar el clustering jerárquico.

Paso 1: Importar bibliotecas y cargar datos

Carga de datos para clustering jerárquico en Python

python
import pandas as pd
import numpy as np
from sklearn.cluster import AgglomerativeClustering
from sklearn.preprocessing import StandardScaler

# Load data
data = pd.read_csv('data.csv')
X = data.iloc[:, [0, 1, 2]].values

Paso 2: Preprocesamiento de datos

Antes de aplicar el clustering jerárquico, necesitamos preprocesar los datos escalándolos para que tengan media cero y varianza unitaria. Esto se hace para garantizar que todas las variables contribuyan por igual al proceso de agrupamiento.

Preprocesamiento de datos para clustering jerárquico en Python

python
# Scale data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

Paso 3: Aplicación del clustering jerárquico

Utilizaremos la clase AgglomerativeClustering de Scikit-learn para aplicar clustering jerárquico a nuestro conjunto de datos. Estableceremos el número de clústeres en 3 y utilizaremos el método de enlace de Ward, que minimiza la varianza de los clústeres que se fusionan.

Aplicación de clustering jerárquico a nuestro conjunto de datos en Python

python
# Apply hierarchical clustering
hc = AgglomerativeClustering(n_clusters=3, linkage='ward')
y_hc = hc.fit_predict(X_scaled)

Paso 4: Visualización de clústeres

Podemos visualizar los clústeres trazando un gráfico de dispersión de los puntos de datos con diferentes colores que representan los distintos clústeres.

Visualización de los clústeres mediante un gráfico de dispersión de los puntos de datos con diferentes colores que representan los distintos clústeres en Python

python
import matplotlib.pyplot as plt

# Create scatter plot
plt.scatter(X_scaled[y_hc == 0, 0], X_scaled[y_hc == 0, 1], s=100, c='red', label='Cluster 1')
plt.scatter(X_scaled[y_hc == 1, 0], X_scaled[y_hc == 1, 1], s=100, c='blue', label='Cluster 2')
plt.scatter(X_scaled[y_hc == 2, 0], X_scaled[y_hc == 2, 1], s=100, c='green', label='Cluster 3')

# Add labels and title
plt.title('Hierarchical Clustering')
plt.xlabel('X')
plt.ylabel('Y')

# Add legend
plt.legend()

# Show plot
plt.show()

En el código anterior, utilizamos indexación booleana para seleccionar los puntos de datos pertenecientes a cada clúster y los graficamos con un color diferente. También agregamos etiquetas a los ejes, un título al gráfico y una leyenda para identificar los distintos clústeres. Finalmente, mostramos el gráfico utilizando la función show().

Conclusión

El clustering jerárquico es una técnica potente que puede ayudar a descubrir estructuras ocultas dentro de un conjunto de datos. Es un algoritmo simple e intuitivo que se puede aplicar a una amplia gama de tipos y tamaños de datos. En este artículo, hemos explorado el concepto de clustering jerárquico, sus tipos y cómo se puede implementar en Python utilizando la biblioteca Scikit-learn.

Siguiendo los pasos descritos en este artículo, puedes aplicar clustering jerárquico a tu propio conjunto de datos y visualizar los clústeres resultantes. Esto puede ayudar a identificar patrones y relaciones dentro de los datos que podrían ser útiles para un análisis posterior o la toma de decisiones.

Si deseas aprender más sobre clustering jerárquico u otras técnicas de aprendizaje automático, hay muchos recursos disponibles en línea, incluidos tutoriales, cursos y libros. Al continuar aprendiendo y explorando nuevas técnicas, puedes mantenerte a la vanguardia y convertirte en un científico de datos más competente.

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.