scipy.cluster.hierarchy.

average#

scipy.cluster.hierarchy.average(y)[Quelle]#

Führt eine durchschnittliche/UPGMA-Verknüpfung auf einer kondensierten Distanzmatrix durch.

Parameter:
yndarray

Die obere Dreiecksmatrix der Distanzmatrix. Das Ergebnis von pdist wird in diesem Format zurückgegeben.

Rückgabe:
Zndarray

Eine Verknüpfungsmatrix, die die hierarchische Clusterbildung enthält. Weitere Informationen zu ihrer Struktur finden Sie unter linkage.

Siehe auch

linkage

für die erweiterte Erstellung hierarchischer Clusterings.

scipy.spatial.distance.pdist

Paarweise Distanzmetriken

Hinweise

average hat neben NumPy experimentelle Unterstützung für Python Array API Standard-kompatible Backends. Bitte testen Sie diese Funktionen, 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 anderen Fähigkeiten) 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 average, fcluster
>>> from scipy.spatial.distance import pdist

Zuerst benötigen wir einen Spielzeugdatensatz zum Spielen

x x    x x
x        x

x        x
x x    x x
>>> 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]]

Dann erhalten wir eine kondensierte Distanzmatrix aus diesem Datensatz

>>> y = pdist(X)

Schließlich können wir die Clusterbildung durchführen

>>> Z = average(y)
>>> Z
array([[ 0.        ,  1.        ,  1.        ,  2.        ],
       [ 3.        ,  4.        ,  1.        ,  2.        ],
       [ 6.        ,  7.        ,  1.        ,  2.        ],
       [ 9.        , 10.        ,  1.        ,  2.        ],
       [ 2.        , 12.        ,  1.20710678,  3.        ],
       [ 5.        , 13.        ,  1.20710678,  3.        ],
       [ 8.        , 14.        ,  1.20710678,  3.        ],
       [11.        , 15.        ,  1.20710678,  3.        ],
       [16.        , 17.        ,  3.39675184,  6.        ],
       [18.        , 19.        ,  3.39675184,  6.        ],
       [20.        , 21.        ,  4.09206523, 12.        ]])

Die Linkage-Matrix Z repräsentiert ein Dendrogramm - siehe scipy.cluster.hierarchy.linkage für eine detaillierte Erklärung seines Inhalts.

Wir können scipy.cluster.hierarchy.fcluster verwenden, um zu sehen, zu welchem Cluster jeder anfängliche Punkt gehören würde, gegeben einen Distanzschwellenwert

>>> fcluster(Z, 0.9, criterion='distance')
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12], dtype=int32)
>>> fcluster(Z, 1.5, criterion='distance')
array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], dtype=int32)
>>> fcluster(Z, 4, criterion='distance')
array([1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], dtype=int32)
>>> fcluster(Z, 6, criterion='distance')
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int32)

Auch scipy.cluster.hierarchy.dendrogram kann verwendet werden, um eine Darstellung des Dendrogramms zu generieren.