Cortar el dendrograma jerárquico en grupos usando SciPy en Python

En este artículo, veremos cómo dividir un dendrograma jerárquico en grupos a través de un valor de umbral usando SciPy en Python.

Un dendrograma es un tipo de diagrama de árbol que muestra un agrupamiento jerárquico, es decir, relaciones entre conjuntos de datos similares. Se utiliza para analizar la relación jerárquica entre las diferentes clases. El paquete scipy.cluster nos proporciona las herramientas necesarias para el agrupamiento jerárquico y el trazado de dendrogramas. Por lo tanto, tiene que ser importado en el medio ambiente.

Primero creemos algunos datos de muestra y grafiquémoslos normalmente. Hemos tomado un montón de puntos de datos aleatorios como nuestra entrada, estaríamos trazando su dendrograma más tarde.

Ejemplo: programa de muestra para crear y visualizar datos

Python3

# Importing the libraries
from scipy.cluster import hierarchy
from scipy.cluster.hierarchy import dendrogram
import numpy as np
import matplotlib.pyplot as plt
  
# The data points are given as list of lists
data = np.array([
    [1, 4],
    [2, 2],
    [3, 7],
    [4, 6],
    [5, 1],
    [6, 3],
    [8, 10],
    [9, 11]
])
  
# Taking transpose
x, y = data.T
  
# plot our list in X,Y coordinates
plt.scatter(x, y)
plt.show()

Producción:

Puntos de datos de entrada de muestra

El dendograma se puede trazar fácilmente utilizando la array de ligamiento. Se crea una array de vinculación a través de la función linkage(). Esta array contiene una codificación del agrupamiento jerárquico para representar como un dendrograma.

Sintaxis:

jerarquía.enlace(y, método=’único’, métrica=’euclidiana’, pedido_optimo=Falso):

Parámetros:

  • y: Array de entrada 1D/ 2D del vector de entrada 
  • método: métodos para calcular la distancia entre el grupo recién formado y otros puntos. método = ‘único’, ‘completo’, ‘promedio’, ‘centroide’
  • métrica: métrica de distancia para usar en el caso de que la entrada sea una colección de vectores de observación
  • pedido_optimo: si es verdadero, la array de vinculación se reordenará para que la distancia entre las hojas sucesivas sea mínima

Ejemplo: Creando un Dendograma para nuestros datos

Python3

# Creating Dendrogram for our data
# Z = linkage matrix
Z = hierarchy.linkage(data, method='average')
  
plt.figure()
plt.title("Dendrograms")
  
# Dendrogram plotting using linkage matrix
dendrogram = hierarchy.dendrogram(Z)

Producción:

Dendograma original sin cortes

Ahora, cortemos el dendrograma por un valor de umbral. Hemos elegido un valor de corte o umbral de 4. En este valor, también se puede dibujar una línea vertical. 

Para un valor de corte/umbral elegido, siempre podemos simplemente contar el número de intersecciones con líneas verticales del dendrograma para obtener el número de grupos formados. Digamos que elegimos un límite de max_d = 6, obtendríamos 2 grupos finales.

Ejemplo: Dendrograma de corte en el valor umbral

Python3

# Creating Dendrogram for our data
# max_d = cut-off/ Threshold value
max_d = 4
  
Z = hierarchy.linkage(data, method='average')
plt.figure()
plt.title("Dendrograms")
dendrogram = hierarchy.dendrogram(Z)
  
# Cutting the dendrogram at max_d
plt.axhline(y=max_d, c='k')

Producción:

Corte de dendrograma en un valor umbral de 4                    

Publicación traducida automáticamente

Artículo escrito por rishujamaiyar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *