Clustering jerárquico en Python

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.

Ejemplo

    import numpy as np
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
# Datos de ejemplo
data
# 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.plt.title('Dendrograma')
plt.xlabel('Índices de datos')
plt.ylabel('Distancia')
plt.shoplt.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.

Ejemplo

    import <span class="package">numpy</span> as <span class="alias">np</span>
import <span class="package">matplotlib.pyplot</span> as <span class="alias">plt</span>
from <span class="package">sklearn.cluster</span> import <span class="class">AgglomerativeClustering</span>
from <span class="package">scipy.cluster.hierarchy</span> import <span class="class">dendrogram</span>, <span class="class">linkage</span>
  

Crear datos de ejemplo

Generemos datos de ejemplo para realizar el clustering. En este ejemplo, crearemos un conjunto de datos bidimensional aleatorio.

Ejemplo

    import numpy as np
from sklearn.cluster import AgglomerativeClustering

X = np.array([[1], [2], [3], [8], [9], [10]])
modelo = AgglomerativeClustering(n_clusters=2).fit(X)
print(modelo.labels_)
  

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.

Ejemplo

    import numpy as np
from sklearn.cluster import AgglomerativeClustering

X = np.array([[1], [2], [3], [8], [9], [10]])
modelo = AgglomerativeClustering(n_clusters=2).fit(X)
print(modelo.labels_)
  

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.

Ejemplo

    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.

Ejemplo

    import numpy as np

uniform_data = np.random.uniform(low=0, high=1, size=10)
print(uniform_data)
  

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.

Practica Clustering jerárquico en Python en el editor

Pon en práctica lo aprendido con nuestro editor Python interactivo. Cada ejercicio incluye el código de partida y un botón para abrirlo en una nueva pestaña, donde puedes modificarlo y ejecutarlo.

Ejercicio: Dendrograma jerárquico

Calcula linkage ward y dibuja el dendrograma.

Ejemplo

    import numpy as np
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt

data = np.array([[1, 2], [2.5, 3], [4, 2], [8, 9], [10, 8]])
dist = linkage(data, method='ward')
plt.figure(figsize=(8, 4))
dendrogram(dist)
plt.title('Dendrograma')
plt.xlabel('Índices')
plt.ylabel('Distancia')
plt.show()
  
Abrir en editor

Ejercicio: Generemos datos de ejemplo para realizar el clustering

Generemos datos de ejemplo para realizar el clustering. En este ejemplo, crearemos un conjunto de datos bidimensional aleatorio.

Ejemplo

    import numpy as np
from sklearn.cluster import AgglomerativeClustering

X = np.array([[1], [2], [3], [8], [9], [10]])
modelo = AgglomerativeClustering(n_clusters=2).fit(X)
print(modelo.labels_)
  
Abrir en editor

Ejercicio: Clustering aglomerativo

Ajusta AgglomerativeClustering y muestra las etiquetas de cada punto.

Ejemplo

    import numpy as np
from sklearn.cluster import AgglomerativeClustering

data = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
modelo = AgglomerativeClustering(n_clusters=2)
etiquetas = modelo.fit_predict(data)
print(etiquetas)
  
Abrir en editor

Ejercicio: Distribución uniforme

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.

Ejemplo

    import numpy as np

uniform_data = np.random.uniform(low=0, high=1, size=10)
print(uniform_data)
  
Abrir en editor