2012-04-24 20 views
13

Tengo una matriz de distancia con aproximadamente 5000 entradas, y uso los métodos de agrupación jerárquica de scipy para agrupar la matriz. El código que uso para esto es el siguiente fragmento:Dendrograma de poda en scipy (agrupamiento jerárquico)

Y = fastcluster.linkage(D, method='centroid') # D-distance matrix 
Z1 = sch.dendrogram(Y,truncate_mode='level', p=7,show_contracted=True) 

Desde el dendrograma se convertirá en lugar denso, con todos estos datos, utilizo el truncate_mode para podar un poco. Todo esto funciona, pero me pregunto cómo puedo descubrir cuál de las 5000 entradas originales pertenece a una rama particular en el dendrograma.

He intentado utilizar

leaves = sch.leaves_list(Y) 

para obtener una lista de las hojas, pero esto utiliza la salida del acoplamiento como INDATA, y aunque puedo ver la correspondencia entre el dendrograma podado y las hojas de vinos, lo que se convierte en una es engorroso mapear las entradas originales manualmente al dendrograma.

En resumen: ¿Hay alguna forma de enumerar todas las entradas originales en la matriz de distancia que pertenece a una rama en un dendrograma podado? ¿O hay otros métodos para hacer esto que no conozco?

Gracias

+0

tal vez no estoy entendiendo, pero ¿no podría guardar una copia antes de podar? –

+0

Veo a qué te refieres. Eso podría funcionar, pero aún requerirá un mapeo manual de las entradas, ya que la salida después de la poda es un dict con el número de miembros en cada rama, y ​​la salida antes de la poda es un dict con cada entrada tal como aparecen en el dendrograma. Uno entonces tiene que mapear estos dos juntos. – user1354607

+0

¿Qué pasa con Z1 ['ivl']? De acuerdo con la documentación, esta es "una lista de etiquetas correspondientes a los nodos hoja". Puede suministrar etiquetas personalizadas como entrada para la función de dendograma pero, por defecto, son solo índices de la observación original – Dhara

Respuesta

3

Una de las estructuras de datos del diccionario devueltos por scipy.cluster.hierarchy.dendrogram tiene la clave ivl, que el documentation describe como:

una lista de etiquetas que corresponden a la hoja nodos

Puede suministrar etiquetas personalizadas (usando labels=<array of lables>) como entrada a la función de dendograma pero, por defecto, son solo índices de la observaci en. Al comparar las etiquetas/índices originales y Z1['ivl'], puede determinar cuáles eran las entradas originales.