scipy.cluster.hierarchy.

fcluster#

scipy.cluster.hierarchy.fcluster(Z, t, criterion='inconsistent', depth=2, R=None, monocrit=None)[Quelle]#

Flache Cluster aus der hierarchischen Clusterbildung aus der gegebenen Linkagematrix bilden.

Parameter:
Zndarray

Die hierarchische Clusterbildung, die durch die von der Funktion linkage zurückgegebene Matrix kodiert ist.

tSkalar
Für die Kriterien 'inconsistent', 'distance' oder 'monocrit' ist dies der Schwellenwert, der bei der Bildung von flachen Clustern angewendet wird.

dies ist der zu verwendende Schwellenwert bei der Bildung von flachen Clustern.

Für die Kriterien 'maxclust' oder 'maxclust_monocrit' ist dies die maximale Anzahl der angeforderten Cluster.

dies wäre die maximal angeforderte Anzahl von Clustern.

criterionstr, optional

Das Kriterium, das bei der Bildung von flachen Clustern verwendet wird. Dies kann einer der folgenden Werte sein:

inconsistent :

Wenn ein Clusterknoten und alle seine Nachfolger einen Inkonsistenzwert kleiner oder gleich t haben, gehören alle seine Blatt-Nachfolger zum selben flachen Cluster. Wenn kein nicht-einzelner Cluster dieses Kriterium erfüllt, wird jeder Knoten seinem eigenen Cluster zugewiesen. (Standard)

distance :

Bildet flache Cluster, so dass die ursprünglichen Beobachtungen in jedem flachen Cluster keine größere kophenetische Distanz als t haben.

maxclust :

Findet einen minimalen Schwellenwert r, so dass die kophenetische Distanz zwischen zwei beliebigen ursprünglichen Beobachtungen im selben flachen Cluster nicht mehr als r beträgt und nicht mehr als t flache Cluster gebildet werden.

monocrit :

Bildet einen flachen Cluster aus einem Clusterknoten c mit Index i, wenn monocrit[j] <= t.

Um beispielsweise auf die maximale mittlere Entfernung, wie in der Inkonsistenzmatrix R berechnet, mit einem Schwellenwert von 0,8 zu schwellen, machen Sie

MR = maxRstat(Z, R, 3)
fcluster(Z, t=0.8, criterion='monocrit', monocrit=MR)
maxclust_monocrit :

Bildet einen flachen Cluster aus einem nicht-einzelnen Clusterknoten c, wenn monocrit[i] <= r für alle Clusterindizes i unter und einschließlich c gilt. r wird minimiert, so dass nicht mehr als t flache Cluster gebildet werden. monocrit muss monoton sein. Um beispielsweise den Schwellenwert t für maximale Inkonsistenzwerte zu minimieren, so dass nicht mehr als 3 flache Cluster gebildet werden, machen Sie

MI = maxinconsts(Z, R)
fcluster(Z, t=3, criterion='maxclust_monocrit', monocrit=MI)
depthint, optional

Die maximale Tiefe, bis zu der die Inkonsistenzberechnung durchgeführt werden soll. Sie hat keine Bedeutung für die anderen Kriterien. Standard ist 2.

Rndarray, optional

Die Inkonsistenzmatrix, die für das Kriterium 'inconsistent' verwendet werden soll. Diese Matrix wird berechnet, wenn sie nicht bereitgestellt wird.

monocritndarray, optional

Ein Array der Länge n-1. monocrit[i] ist die Statistik, auf deren Grundlage der nicht-einzelne Knoten i geschwellt wird. Der monocrit-Vektor muss monoton sein, d.h. gegeben einen Knoten c mit Index i, für alle Knotenindizes j, die Knoten unterhalb von c entsprechen, gilt monocrit[i] >= monocrit[j].

Rückgabe:
fclusterndarray

Ein Array der Länge n. T[i] ist die Nummer des flachen Clusters, zu dem die ursprüngliche Beobachtung i gehört.

Siehe auch

linkage

für Informationen über die Funktionsweise hierarchischer Clusterbildungsmethoden.

Hinweise

fcluster bietet experimentelle Unterstützung für Python Array API Standard-kompatible Backends zusätzlich zu NumPy. Bitte erwägen Sie, diese Funktionen zu testen, indem Sie eine Umgebungsvariable SCIPY_ARRAY_API=1 setzen und CuPy-, PyTorch-, JAX- oder Dask-Arrays als Array-Argumente übergeben. Die folgenden Kombinationen von Backend und Gerät (oder anderer Fähigkeit) werden unterstützt.

Bibliothek

CPU

GPU

NumPy

n/a

CuPy

n/a

PyTorch

JAX

⚠️ kein JIT

Dask

⚠️ berechnet Graph

n/a

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

Beispiele

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

Alle Cluster-Linkage-Methoden - z. B. scipy.cluster.hierarchy.ward generieren eine Linkagematrix Z als Ausgabe.

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

Diese Matrix stellt ein Dendrogramm dar, wobei das erste und zweite Element die beiden Cluster sind, die bei jedem Schritt zusammengeführt wurden, das dritte Element die Distanz zwischen diesen Clustern und das vierte Element die Größe des neuen Clusters ist - die Anzahl der enthaltenen ursprünglichen Datenpunkte.

scipy.cluster.hierarchy.fcluster kann verwendet werden, um das Dendrogramm zu glätten und als Ergebnis eine Zuweisung der ursprünglichen Datenpunkte zu einzelnen Clustern zu erhalten.

Diese Zuweisung hängt hauptsächlich von einem Distanzschwellenwert t ab - der maximal zulässigen Distanz zwischen Clustern.

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

Im ersten Fall ist der Schwellenwert t zu klein, um es zwei Stichproben in den Daten zu ermöglichen, einen Cluster zu bilden, daher werden 12 verschiedene Cluster zurückgegeben.

Im zweiten Fall ist der Schwellenwert groß genug, um die ersten 4 Punkte mit ihren nächsten Nachbarn zusammenzuführen. Hier werden also nur 8 Cluster zurückgegeben.

Der dritte Fall mit einem viel höheren Schwellenwert erlaubt es, bis zu 8 Datenpunkte zu verbinden - hier werden also 4 Cluster zurückgegeben.

Schließlich ist der Schwellenwert des vierten Falls groß genug, um alle Datenpunkte zusammenzuführen - hier wird also ein einziger Cluster zurückgegeben.