scipy.cluster.hierarchy.

cophenet#

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

計算由鏈接 Z 定義的層次聚類中每個觀測值之間的同質遺傳距離。

假設 pq 是不相交群集 st 中的原始觀測值,並且 st 通過直接父群集 u 連接起來。觀測值 ij 之間的同質遺傳距離僅僅是群集 st 之間的距離。

參數:
Zndarray

編碼為陣列的層次聚類(請參閱 linkage 函數)。

Yndarray(可選)

计算给定由一组 \(n\) 维度中 \(m\) 个观察值的连锁矩阵 Z 定义的分层聚类的共现象相关系数 cYZ 所生成的凝聚距离矩阵。

返回:
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 表示 Xij 两点之间的共现象距离)

>>> 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,因为此类点将位于不同角的簇中 - 因此,此类簇之间的距离会更大。