scipy.cluster.hierarchy.

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]=2M[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)