2012-04-24 19 views
13

Mam macierz odległości z około 5000 wpisów i stosuję hierarchiczne metody scipy do grupowania macierzy. Kod używam tego jest następujący fragment:Przycinanie dendrogram w scipy (hierarchiczne grupowanie)

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

Od dendrogramie będzie dość gęsty z wszystkich tych danych, używam truncate_mode żeby go przycinać kawałek. Wszystko to działa, ale zastanawiam się, w jaki sposób mogę dowiedzieć się, które z oryginalnych 5000 wpisów należą do konkretnej gałęzi w dendrogramie.

Próbowałem za pomocą

leaves = sch.leaves_list(Y) 

aby uzyskać listę liści, ale ten wykorzystuje moc wiążącą jak indata, a jednocześnie widzę korespondencji pomiędzy usuwane dendrogramie i liści liście, staje się nieco kłopotliwe, aby ręcznie odwzorować oryginalne wpisy na dendrogram.

Podsumowując: Czy istnieje sposób wymieniania wszystkich oryginalnych wpisów w matrycy odległości, która należy do oddziału w przycinanym dendrogramie? Czy istnieją inne metody robienia tego, czego nie jestem świadomy.

Dzięki

+0

Może nie rozumiem, ale czy nie mógłbyś zachować kopii przed przycinaniem? –

+0

Widzę, o co ci chodzi. To może zadziałać, ale nadal będzie wymagało ręcznego odwzorowania wpisów, ponieważ wyjście po przycięciu jest dyktando z liczbą członków w każdym oddziale, a wyjście przed oczyszczeniem jest dyktando z każdym wpisem, jak pojawiają się one w dendrogramie. Następnie trzeba zmapować te dwa elementy razem. – user1354607

+0

Co z Z1 ['ivl']. Zgodnie z dokumentacją jest to "lista etykiet odpowiadająca węzłom liści". Możesz dostarczyć własne etykiety jako dane wejściowe do funkcji dendrogramu, ale domyślnie są to tylko wskaźniki oryginalnej obserwacji. – Dhara

Odpowiedz

3

Jeden słownika struktur danych zwracanych przez scipy.cluster.hierarchy.dendrogram ma klucz ivl, że documentation opisuje jako:

listę etykiet odpowiadających liścia węzły:

Możesz dostarczyć własne etykiety (używając labels=<array of lables>) jako wejście do funkcji dendrogramu, ale domyślnie są to tylko wskaźniki oryginalnego obserwatora na. Porównując oryginalne etykiety/indeksy i Z1['ivl'], możesz określić, jakie były oryginalne wpisy.