cophenet#
- scipy.cluster.hierarchy.cophenet(Z, Y=None)[source]#
计算由链接
Z
定义的层次聚类中每个观测值之间的 cophenetic 距离。假设
p
和q
是不相交的聚类s
和t
中的原始观测值,并且s
和t
由直接父聚类u
连接。观测值i
和j
之间的 cophenetic 距离只是聚类s
和t
之间的距离。- 参数:
- Zndarray
层次聚类被编码为一个数组 (参见
linkage
函数)。- Yndarray (可选)
计算由链接矩阵 Z 定义的一组 \(n\) 个在 \(m\) 维空间中的观测值的 cophenetic 相关系数
c
。Y 是生成 Z 的压缩距离矩阵。
- 返回:
- cndarray
cophentic 相关距离 (如果传递了
Y
)。- dndarray
压缩形式的 cophenetic 距离矩阵。第 \(ij\) 个条目是原始观测值 \(i\) 和 \(j\) 之间的 cophenetic 距离。
参见
linkage
有关链接矩阵的描述。
scipy.spatial.distance.squareform
将压缩矩阵转换为方形矩阵。
注释
cophenet
除了 NumPy 之外,还实验性地支持与 Python Array API Standard 兼容的后端。 请考虑通过设置环境变量SCIPY_ARRAY_API=1
并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。 支持以下后端和设备(或其他功能)的组合。库
CPU
GPU
NumPy
✅
n/a
CuPy
n/a
⛔
PyTorch
✅
⛔
JAX
✅
⛔
Dask
⚠️ 合并块
n/a
有关更多信息,请参见 对数组 API 标准的支持。
示例
>>> from scipy.cluster.hierarchy import single, cophenet >>> from scipy.spatial.distance import pdist, squareform
给定一个数据集
X
和一个链接矩阵Z
,X
中的两个点之间的 cophenetic 距离是每个点对应的最大的两个不同的簇之间的距离>>> 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]]
X
对应于这个数据集x x x x x x x x x x x x
>>> Z = single(pdist(X)) >>> Z array([[ 0., 1., 1., 2.], [ 2., 12., 1., 3.], [ 3., 4., 1., 2.], [ 5., 14., 1., 3.], [ 6., 7., 1., 2.], [ 8., 16., 1., 3.], [ 9., 10., 1., 2.], [11., 18., 1., 3.], [13., 15., 2., 6.], [17., 20., 2., 9.], [19., 21., 2., 12.]]) >>> cophenet(Z) array([1., 1., 2., 2., 2., 2., 2., 2., 2., 2., 2., 1., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 1., 1., 2., 2., 2., 2., 2., 2., 1., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 1., 1., 2., 2., 2., 1., 2., 2., 2., 2., 2., 2., 1., 1., 1.])
scipy.cluster.hierarchy.cophenet
方法的输出以压缩形式表示。 我们可以使用scipy.spatial.distance.squareform
将输出看作一个常规矩阵 (其中每个元素ij
表示X
中每个i
,j
点对之间的 cophenetic 距离)>>> squareform(cophenet(Z)) array([[0., 1., 1., 2., 2., 2., 2., 2., 2., 2., 2., 2.], [1., 0., 1., 2., 2., 2., 2., 2., 2., 2., 2., 2.], [1., 1., 0., 2., 2., 2., 2., 2., 2., 2., 2., 2.], [2., 2., 2., 0., 1., 1., 2., 2., 2., 2., 2., 2.], [2., 2., 2., 1., 0., 1., 2., 2., 2., 2., 2., 2.], [2., 2., 2., 1., 1., 0., 2., 2., 2., 2., 2., 2.], [2., 2., 2., 2., 2., 2., 0., 1., 1., 2., 2., 2.], [2., 2., 2., 2., 2., 2., 1., 0., 1., 2., 2., 2.], [2., 2., 2., 2., 2., 2., 1., 1., 0., 2., 2., 2.], [2., 2., 2., 2., 2., 2., 2., 2., 2., 0., 1., 1.], [2., 2., 2., 2., 2., 2., 2., 2., 2., 1., 0., 1.], [2., 2., 2., 2., 2., 2., 2., 2., 2., 1., 1., 0.]])
在这个例子中,
X
上非常接近 (即, 在同一个角落) 的点之间的 cophenetic 距离是 1. 对于其他的点对, 距离是 2, 因为这些点将位于不同角落的簇中 - 因此, 这些簇之间的距离会更大。