leaders#
- scipy.cluster.hierarchy.leaders(Z, T)[source]#
返回层次聚类中的根节点。
返回层次聚类中的根节点,对应于由扁平聚类分配向量
T
定义的切割。有关T
格式的更多信息,请参见fcluster
函数。对于
T
中表示的 n 维扁平聚类分配向量中的每个扁平聚类 \(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
作为 k 元素 1-D 数组存储的领导者链接节点 ID,其中
k
是在T
中找到的扁平聚类的数量。L[j]=i
是链接聚类节点 ID,它是 ID 为 M[j] 的扁平聚类的领导者。 如果i < n
,则i
对应于原始观测值,否则对应于非单例聚类。- Mndarray
作为 k 元素 1-D 数组存储的领导者链接节点 ID,其中
k
是在T
中找到的扁平聚类的数量。 这允许将扁平聚类 ID 集设置为任意k
个整数的任意集合。例如:如果
L[3]=2
且M[3]=8
,则 ID 为 8 的扁平聚类的领导者是链接节点 2。
参见
fcluster
用于创建扁平聚类分配。
注释
Array API 支持(实验性): 此函数返回具有数据相关形状的数组。 在 JAX 中,在编写本文时,这使得无法在 @jax.jit 内部执行它。
leaders
除了 NumPy 之外,还对 Python Array API 标准兼容后端提供实验性支持。 请考虑通过设置环境变量SCIPY_ARRAY_API=1
并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。 支持以下后端和设备(或其他功能)的组合。库
CPU
GPU
NumPy
✅
n/a
CuPy
n/a
⛔
PyTorch
✅
⛔
JAX
⚠️ 无 JIT
⛔
Dask
⚠️ 合并块
n/a
有关更多信息,请参见支持数组 API 标准。
示例
>>> 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)