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
Może nie rozumiem, ale czy nie mógłbyś zachować kopii przed przycinaniem? –
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
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