leaders#
- scipy.cluster.hierarchy.leaders(Z, T)[source]#
返回分层聚类中的根节点。
返回分层聚类中的根节点,该根节点对应于平坦集群分配向量
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 是 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)