scipy.cluster.hierarchy.

cophenet#

scipy.cluster.hierarchy.cophenet(Z, Y=None)[源代码][源代码]#

计算由链接 Z 定义的层次聚类中每个观测值之间的共表距离。

假设 pq 分别是互不相交的簇 st 中的原始观测值,并且 st 通过一个直接父簇 u 连接。观测值 ij 之间的共表距离就是簇 st 之间的距离。

参数:
Zndarray

作为数组编码的分层聚类(参见 linkage 函数)。

Yndarray (可选)

计算由链接矩阵 Z 定义的分层聚类的共表相关系数 c,该聚类针对 \(m\) 维中的 \(n\) 个观测值。Y 是从中生成 Z 的压缩距离矩阵。

返回:
cndarray

共线相关距离(如果传递了 Y)。

dndarray

压缩形式的共表距离矩阵。\(ij\) 项是原始观测值 \(i\)\(j\) 之间的共表距离。

参见

linkage

关于什么是连接矩阵的描述。

scipy.spatial.distance.squareform

将压缩矩阵转换为方阵。

示例

>>> from scipy.cluster.hierarchy import single, cophenet
>>> from scipy.spatial.distance import pdist, squareform

给定一个数据集 X 和一个链接矩阵 ZX 中两点之间的共表距离是这两点分别所属的最大两个不同簇之间的距离。

>>> 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 之间的共协距离):

>>> 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 上非常接近的点(即在同一个角落)之间的共性距离是 1。对于其他点对,距离是 2,因为这些点将位于不同角落的簇中——因此,这些簇之间的距离会更大。