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
:
scipypara el clustering jerárquico ymatplotlibpara 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
linkagedescipypara realizar el clustering jerárquico en base a la matriz de distancia. -
Visualizar los resultados
: Utilizar
dendrogramdescipyomatplotlibpara 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()
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_)
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)
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)