leaders#
- scipy.cluster.hierarchy.leaders(Z, T)[原始碼]#
傳回階層式分群中的根節點。
傳回階層式分群中的根節點,對應於由平坦集群分配向量
T
定義的切割。 有關T
格式的更多資訊,請參閱fcluster
函數。對於大小為 n 的平坦集群分配向量
T
中表示的 \(k\) 個平坦集群中的每個平坦集群 \(j\),此函數會找到連結樹 Z 中的最低集群節點 \(i\),使得葉子後代僅屬於平坦集群 j(即,對於 \(S(i)\) 中的所有 \(p\),
T[p]==j
,其中 \(S(i)\) 是具有集群節點 \(i\) 的後代葉節點的葉子 ID 集)不存在非後代的葉子,其與 \(i\) 也屬於集群 \(j\)(即,對於 \(S(i)\) 之外的所有 \(q\),
T[q]!=j
)。 如果違反此條件,則T
不是有效的集群分配向量,並且將拋出例外。
- 參數:
- Zndarray
編碼為矩陣的階層式分群。 有關更多資訊,請參閱
linkage
。- Tndarray
平坦集群分配向量。
- 返回:
- Lndarray
領導者連結節點 ID,儲存為 k 元素一維陣列,其中
k
是在T
中找到的平坦集群數量。L[j]=i
是平坦集群的領導者的連結集群節點 ID,其 ID 為 M[j]。 如果i < n
,則i
對應於原始觀測值,否則它對應於非單例集群。- Mndarray
領導者連結節點 ID,儲存為 k 元素一維陣列,其中
k
是在T
中找到的平坦集群數量。 這允許平坦集群 ID 的集合可以是k
個整數的任意集合。例如:如果
L[3]=2
且M[3]=8
,則 ID 為 8 的平坦集群的領導者是連結節點 2。
另請參閱
fcluster
用於建立平坦集群分配。
範例
>>> from scipy.cluster.hierarchy import ward, fcluster, leaders >>> from scipy.spatial.distance import pdist
給定連結矩陣
Z
- 在將分群方法應用於資料集X
之後獲得 - 和平坦集群分配陣列T
>>> X = [[0, 0], [0, 1], [1, 0], ... [0, 4], [0, 3], [1, 4], ... [4, 0], [3, 0], [4, 1], ... [4, 4], [3, 4], [4, 3]]
>>> Z = ward(pdist(X)) >>> Z array([[ 0. , 1. , 1. , 2. ], [ 3. , 4. , 1. , 2. ], [ 6. , 7. , 1. , 2. ], [ 9. , 10. , 1. , 2. ], [ 2. , 12. , 1.29099445, 3. ], [ 5. , 13. , 1.29099445, 3. ], [ 8. , 14. , 1.29099445, 3. ], [11. , 15. , 1.29099445, 3. ], [16. , 17. , 5.77350269, 6. ], [18. , 19. , 5.77350269, 6. ], [20. , 21. , 8.16496581, 12. ]])
>>> T = fcluster(Z, 3, criterion='distance') >>> T array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], dtype=int32)
scipy.cluster.hierarchy.leaders
傳回樹狀圖中作為每個平坦集群領導者的節點索引>>> L, M = leaders(Z, T) >>> L array([16, 17, 18, 19], dtype=int32)
(請記住,索引 0-11 指向
X
中的 12 個資料點,而索引 12-22 指向Z
的 11 列)scipy.cluster.hierarchy.leaders
也傳回T
中平坦集群的索引>>> M array([1, 2, 3, 4], dtype=int32)