scipy.cluster.hierarchy.

is_monotonic#

scipy.cluster.hierarchy.is_monotonic(Z)[Quelle]#

Gibt True zurück, wenn die übergebene Verknüpfung monoton ist.

Die Verknüpfung ist monoton, wenn für jeden verbundenen Cluster \(s\) und \(t\) der Abstand zwischen ihnen nicht geringer ist als der Abstand zwischen allen zuvor verbundenen Clustern.

Parameter:
Zndarray

Die Verknüpfungsmatrix, die auf Monotonie geprüft werden soll.

Rückgabe:
bbool

Ein boolescher Wert, der angibt, ob die Verknüpfung monoton ist.

Siehe auch

linkage

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

Hinweise

is_monotonic unterstützt neben NumPy experimentell auch Backends, die mit dem Python Array API Standard kompatibel sind. 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 übergeben. 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

n/a

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

Beispiele

>>> from scipy.cluster.hierarchy import median, ward, is_monotonic
>>> from scipy.spatial.distance import pdist

Per Definition erzeugen einige hierarchische Clustering-Algorithmen - wie scipy.cluster.hierarchy.ward - monotone Zuordnungen von Stichproben zu Clustern; dies gilt jedoch nicht immer für andere hierarchische Methoden - z. B. scipy.cluster.hierarchy.median.

Gegeben eine Verknüpfungsmatrix Z (als Ergebnis einer hierarchischen Clustering-Methode) können wir programmgesteuert prüfen, ob sie die Monotonie-Eigenschaft besitzt oder nicht, mit Hilfe von scipy.cluster.hierarchy.is_monotonic

>>> 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]]
>>> Z = ward(pdist(X))
>>> Z
array([[ 0.        ,  1.        ,  1.        ,  2.        ],
       [ 3.        ,  4.        ,  1.        ,  2.        ],
       [ 6.        ,  7.        ,  1.        ,  2.        ],
       [ 9.        , 10.        ,  1.        ,  2.        ],
       [ 2.        , 12.        ,  1.29099445,  3.        ],
       [ 5.        , 13.        ,  1.29099445,  3.        ],
       [ 8.        , 14.        ,  1.29099445,  3.        ],
       [11.        , 15.        ,  1.29099445,  3.        ],
       [16.        , 17.        ,  5.77350269,  6.        ],
       [18.        , 19.        ,  5.77350269,  6.        ],
       [20.        , 21.        ,  8.16496581, 12.        ]])
>>> is_monotonic(Z)
True
>>> Z = median(pdist(X))
>>> Z
array([[ 0.        ,  1.        ,  1.        ,  2.        ],
       [ 3.        ,  4.        ,  1.        ,  2.        ],
       [ 9.        , 10.        ,  1.        ,  2.        ],
       [ 6.        ,  7.        ,  1.        ,  2.        ],
       [ 2.        , 12.        ,  1.11803399,  3.        ],
       [ 5.        , 13.        ,  1.11803399,  3.        ],
       [ 8.        , 15.        ,  1.11803399,  3.        ],
       [11.        , 14.        ,  1.11803399,  3.        ],
       [18.        , 19.        ,  3.        ,  6.        ],
       [16.        , 17.        ,  3.5       ,  6.        ],
       [20.        , 21.        ,  3.25      , 12.        ]])
>>> is_monotonic(Z)
False

Beachten Sie, dass diese Methode äquivalent dazu ist, einfach zu überprüfen, ob die Abstände in der dritten Spalte der Verknüpfungsmatrix in monoton steigender Reihenfolge erscheinen.