single pdist example dendrograma clustering cluster python scipy hierarchical-clustering

python - pdist - scipy cluster hierarchy linkage



Tutorial para scipy.cluster.hierarchy (1)

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

  1. Cuantificar datos (argumento metric )
  2. Datos del cluster (argumento del method )
  3. Elija la cantidad de clusters

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''

Entonces, z = linkage(a) le dará un agrupamiento aglomerativo jerárquico único 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 adecuada, por ejemplo, cityblock o chebychev cuantificarán sus datos de manera diferente ( cityblock , euclidean y chebychev corresponden a L1 , L2 y L_inf )
  • Verifique las diferentes propiedades / comportamientos de los methdos (p. Ej., single , complete y average )
  • Compruebe cómo determinar el número de clústeres, por ejemplo, leyendo el wiki al respecto
  • Calcule los índices de las soluciones encontradas (agrupamientos) como el coeficiente de silueta (con este coeficiente obtiene un feedback sobre la calidad de la calidad de un punto / observación que se ajusta al clúster al que está asignado el clúster). Los diferentes índices utilizan diferentes criterios para calificar un agrupamiento.

Aquí hay algo para comenzar

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

Estoy tratando de entender cómo manipular un clúster de jerarquía, 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 dendrograma:

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 dendrograma?
  • ¿Cómo puedo recuperar los valores de esos elementos?