2012-04-24 46 views
13

我有一個約5000個條目的距離矩陣,並使用scipy的層次聚類方法來聚類矩陣。我使用該代碼,這是下面的代碼片段:scipy修剪樹狀圖(層次聚類)

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

由於樹狀圖將變得相當密集與所有這些數據,我用的是truncate_mode修剪它一下。所有這些工作,但我想知道我怎麼能找出哪些最初的5000條目屬於樹狀圖中的特定分支。

我嘗試使用

leaves = sch.leaves_list(Y) 

得到葉子的列表,但這裏使用了聯動輸出爲INDATA,雖然我可以看到修剪樹形和樹葉列表之間的對應關係,就變成了有點繁瑣的手動映射原始條目樹狀圖。

總結:有沒有一種方法可以列出屬於修剪樹形圖分支的距離矩陣中的所有原始條目?或者還有其他方法可以做到這一點,但我不知道。

由於

+0

也許我不理解,但你不能保留修剪前的副本嗎? – 2012-04-25 02:17:18

+0

我明白你的意思了。這可以工作,但仍然需要手動映射條目,因爲修剪後的輸出是每個分支中成員數量的字典,而修剪前的輸出是每個條目的詞典,因爲它們出現在樹狀圖中。然後必須將這兩者映射在一起。 – user1354607 2012-04-25 15:35:50

+0

Z1 ['ivl']呢?根據文檔,這是「與葉節點相對應的標籤列表」。您可以將自定義標籤作爲輸入提供給樹狀圖功能,但默認情況下,它們只是原始觀察的索引 – Dhara 2012-05-27 17:03:15

回答

3

一個接scipy.cluster.hierarchy.dendrogram返回的字典數據結構的具有鍵ivl,該documentation描述爲:

對應於葉標籤列表節點

您可以提供自定義標籤(使用labels=<array of lables>)作爲樹形圖函數的輸入,但默認情況下它們只是原始觀察值的索引上。通過比較原始標籤/索引和Z1['ivl'],您可以確定原始條目的內容。