El clustering jerárquico es un método de agrupamiento que busca construir una jerarquía de clusters. Los algoritmos de clustering jerárquico dividen los datos en grupos anidados o jerárquicos, lo que permite representar las relaciones de similitud entre los datos de una manera estructurada.
En Python, podemos utilizar la biblioteca scipy para realizar clustering jerárquico. El proceso general para realizar clustering jerárquico en Python es el siguiente:
- Importar las bibliotecas necesarias: scipy para el clustering jerárquico y matplotlib para visualización de resultados.
- Preparar los datos: Cargar o generar los datos que se utilizarán para el clustering.
- Calcular la matriz de distancia: Calcular la matriz de distancia o similaridad entre los datos.
- Realizar el clustering: Utilizar la función linkage de scipy para realizar el clustering jerárquico en base a la matriz de distancia.
- Visualizar los resultados: Utilizar dendrogram de scipy o matplotlib para visualizar el dendrograma resultante.
import numpy as np from scipy.cluster.hierarchy import dendrogram, linkage import matplotlib.pyplot as plt # Datos de ejemplo data = np.array([[1, 2], [2.5, 3], [4, 2], [8, 9], [10, 8]]) # Calcular la matriz de distancia dist_matrix = linkage(data, method='ward') # Visualizar el dendrograma plt.figure(figsize=(10, 5)) dendrogram(dist_matrix) plt.title('Dendrograma') plt.xlabel('Índices de datos') plt.ylabel('Distancia') plt.show()
En este ejemplo, hemos utilizado una matriz de datos de ejemplo data con 5 puntos. Luego, calculamos la matriz de distancia utilizando el método ward, que es uno de los métodos de linkage utilizados comúnmente. Finalmente, visualizamos el dendrograma utilizando plt.show().
El dendrograma muestra cómo se agrupan los datos en clusters a lo largo de la jerarquía. Cada hoja del dendrograma representa un punto de datos, y las ramas que se unen representan la agrupación de los puntos en clusters. La altura de las uniones en el dendrograma representa la distancia entre los clusters.
Importar las bibliotecas necesarias
Primero, importamos las bibliotecas necesarias, que incluyen numpy para manipulación de datos y matplotlib para visualización, además de las funciones de clustering jerárquico de scikit-learn.
El clustering jerárquico es útil para explorar la estructura de los datos y encontrar agrupaciones naturales en los datos. Sin embargo, dependiendo del tamaño de los datos, podría volverse computacionalmente costoso para conjuntos de datos grandes.
import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import AgglomerativeClustering from scipy.cluster.hierarchy import dendrogram, linkage
Crear datos de ejemplo
Generemos datos de ejemplo para realizar el clustering. En este ejemplo, crearemos un conjunto de datos bidimensional aleatorio.
# Generar datos de ejemplo import numpy as np np.random.seed(0) X = np.random.randn(10, 2)
Realizar el clustering jerárquico
Utilizaremos el método AgglomerativeClustering de scikit-learn para realizar el clustering aglomerativo. Puedes especificar el número de clústeres que deseas obtener. En este caso, configuraremos n_clusters en 3.
# Realizar clustering jerárquico agglomerative_cluster = AgglomerativeClustering(n_clusters=3) cluster_labels = agglomerative_cluster.fit_predict(X)
Visualizar los resultados
Para visualizar los resultados del clustering jerárquico, puedes usar un dendrograma para representar la jerarquía de los clústeres. La biblioteca scipy es útil para crear el dendrograma.
# Crear el dendrograma linkage_matrix = linkage(X, method='ward') dendrogram(linkage_matrix) plt.title("Dendrograma de Clustering Jerárquico") plt.show()
También puedes visualizar los puntos y sus asignaciones de clústeres en un gráfico de dispersión para tener una mejor comprensión.
# Visualizar los puntos y sus asignaciones de clústeres plt.scatter(X[:, 0], X[:, 1], c=cluster_labels, cmap='rainbow') plt.title("Clustering Jerárquico") plt.xlabel("Característica 1") plt.ylabel("Característica 2") plt.show()
Interpretar los resultados
En el dendrograma, puedes observar la estructura jerárquica de los clústeres y cómo se fusionaron. En el gráfico de dispersión, los puntos están coloreados según su asignación a clústeres.
Este es un ejemplo simple de cómo realizar clustering jerárquico en Python. Puedes ajustar el número de clústeres, las métricas de distancia y otros parámetros según tus necesidades y el conjunto de datos que estés utilizando.