scipy.cluster.hierarchy.

cophenet#

scipy.cluster.hierarchy.cophenet(Z, Y=None)[Quelle]#

Berechnet die kophentischen Abstände zwischen jeder Beobachtung in der hierarchischen Clusterbildung, die durch die Verknüpfung Z definiert ist.

Angenommen, p und q sind ursprüngliche Beobachtungen in disjunkten Clustern s und t, bzw. und s und t werden durch einen direkten Elterncluster u verbunden. Der kophentische Abstand zwischen den Beobachtungen i und j ist einfach der Abstand zwischen den Clustern s und t.

Parameter:
Zndarray

Die hierarchische Clusterbildung, kodiert als Array (siehe Funktion linkage).

Yndarray (optional)

Berechnet den kophentischen Korrelationskoeffizienten c einer hierarchischen Clusterbildung, die durch die Verknüpfungsmatrix Z eines Satzes von \(n\) Beobachtungen in \(m\) Dimensionen definiert ist. Y ist die kondensierte Distanzmatrix, aus der Z generiert wurde.

Rückgabe:
cndarray

Der kophentische Korrelationsabstand (wenn Y übergeben wird).

dndarray

Die kophentische Distanzmatrix in kondensierter Form. Der \(ij\)-te Eintrag ist der kophentische Abstand zwischen den ursprünglichen Beobachtungen \(i\) und \(j\).

Siehe auch

linkage

für eine Beschreibung, was eine Linkage-Matrix ist.

scipy.spatial.distance.squareform

Umwandlung von kondensierten Matrizen in quadratische.

Hinweise

cophenet verfügt über experimentelle Unterstützung für Backends, die dem Python Array API Standard entsprechen, zusätzlich zu NumPy. Bitte erwägen Sie, diese Funktionen zu testen, indem Sie die Umgebungsvariable SCIPY_ARRAY_API=1 setzen und CuPy-, PyTorch-, JAX- oder Dask-Arrays als Array-Argumente bereitstellen. Die folgenden Kombinationen aus Backend und Gerät (oder anderer Fähigkeit) werden unterstützt.

Bibliothek

CPU

GPU

NumPy

n/a

CuPy

n/a

PyTorch

JAX

Dask

⚠️ führt Chunks zusammen

n/a

Siehe Unterstützung für den Array API Standard für weitere Informationen.

Beispiele

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

Gegeben ein Datensatz X und eine Verknüpfungsmatrix Z, ist der kophentische Abstand zwischen zwei Punkten von X der Abstand zwischen den beiden größten unterschiedlichen Clustern, zu denen jeder der Punkte

>>> 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 entspricht diesem Datensatz

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.])

Die Ausgabe der Methode scipy.cluster.hierarchy.cophenet wird in kondensierter Form dargestellt. Wir können scipy.spatial.distance.squareform verwenden, um die Ausgabe als reguläre Matrix anzuzeigen (wobei jedes Element ij den kophentischen Abstand zwischen jedem i, j-Paar von Punkten in X bezeichnet)

>>> 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.]])

In diesem Beispiel beträgt der kophentische Abstand zwischen Punkten auf X, die sehr nahe beieinander liegen (d. h. in derselben Ecke), 1. Für andere Punktpaare beträgt er 2, da die Punkte in Clustern in verschiedenen Ecken liegen – daher ist der Abstand zwischen diesen Clustern größer.