Tutorial para scipy.cluster.hierarchy

Estoy tratando de entender cómo manipular un grupo jerárquico, pero la documentación es demasiado … ¿técnica? … y no puedo entender cómo funciona.

¿Hay algún tutorial que pueda ayudarme a comenzar, explicando paso a paso algunas tareas simples?

Digamos que tengo el siguiente conjunto de datos:

a = np.array([[0, 0 ], [1, 0 ], [0, 1 ], [1, 1 ], [0.5, 0 ], [0, 0.5], [0.5, 0.5], [2, 2 ], [2, 3 ], [3, 2 ], [3, 3 ]]) 

Puedo hacer fácilmente el clúster de jerarquía y trazar el dendrogtwig:

 z = linkage(a) d = dendrogram(z) 
  • Ahora, ¿cómo puedo recuperar un cluster específico? Digamos que uno con elementos [0,1,2,4,5,6] en el dendrogtwig?
  • ¿Cómo puedo recuperar los valores de esos elementos?

Hay tres pasos en el agrupamiento jerárquico aglomerado (HAC):

  1. Cuantificar datos (argumento metric )
  2. Datos de cluster (argumento del method )
  3. Elija el número de grupos

Obra

 z = linkage(a) 

Cumplirá los dos primeros pasos. Como no ha especificado ningún parámetro, utiliza los valores estándar.

  1. metric = 'euclidean'
  2. method = 'single'

Por lo tanto, z = linkage(a) le dará un solo agrupamiento aglomerativo jerárquico vinculado de a . Este agrupamiento es una especie de jerarquía de soluciones. De esta jerarquía obtiene información sobre la estructura de sus datos. Lo que podrías hacer ahora es:

  • Compruebe qué metric es apropiada, por ejemplo, cityblock o chebychev cuantificará sus datos de manera diferente ( cityblock , euclidean y chebychev corresponden a las chebychev L1 , L2 y L_inf )
  • Verifique las diferentes propiedades / comportamientos de los methdos (p. Ej., single , complete y average )
  • Verifique cómo determinar la cantidad de grupos, por ejemplo, leyendo la wiki al respecto
  • Calcule los índices de las soluciones encontradas (agrupaciones), como el coeficiente de silueta (con este coeficiente, obtendrá una retroalimentación sobre la calidad de la forma en que un punto / observación se ajusta al agrupamiento al que está asignada por la agrupación). Los diferentes índices utilizan diferentes criterios para calificar un agrupamiento.

Aquí hay algo para empezar

 import numpy as np import scipy.cluster.hierarchy as hac import matplotlib.pyplot as plt a = np.array([[0.1, 2.5], [1.5, .4 ], [0.3, 1 ], [1 , .8 ], [0.5, 0 ], [0 , 0.5], [0.5, 0.5], [2.7, 2 ], [2.2, 3.1], [3 , 2 ], [3.2, 1.3]]) fig, axes23 = plt.subplots(2, 3) for method, axes in zip(['single', 'complete'], axes23): z = hac.linkage(a, method=method) # Plotting axes[0].plot(range(1, len(z)+1), z[::-1, 2]) knee = np.diff(z[::-1, 2], 2) axes[0].plot(range(2, len(z)), knee) num_clust1 = knee.argmax() + 2 knee[knee.argmax()] = 0 num_clust2 = knee.argmax() + 2 axes[0].text(num_clust1, z[::-1, 2][num_clust1-1], 'possible\n<- knee point') part1 = hac.fcluster(z, num_clust1, 'maxclust') part2 = hac.fcluster(z, num_clust2, 'maxclust') clr = ['#2200CC' ,'#D9007E' ,'#FF6600' ,'#FFCC00' ,'#ACE600' ,'#0099CC' , '#8900CC' ,'#FF0000' ,'#FF9900' ,'#FFFF00' ,'#00CC01' ,'#0055CC'] for part, ax in zip([part1, part2], axes[1:]): for cluster in set(part): ax.scatter(a[part == cluster, 0], a[part == cluster, 1], color=clr[cluster]) m = '\n(method: {})'.format(method) plt.setp(axes[0], title='Screeplot{}'.format(m), xlabel='partition', ylabel='{}\ncluster distance'.format(m)) plt.setp(axes[1], title='{} Clusters'.format(num_clust1)) plt.setp(axes[2], title='{} Clusters'.format(num_clust2)) plt.tight_layout() plt.show() 

Da introduzca la descripción de la imagen aquí