ward_tree#

sklearn.cluster.ward_tree(X, *, connectivity=None, n_clusters=None, return_distance=False)[Quelle]#

Ward-Clustering basierend auf einer Merkmalsmatrix.

Führt rekursiv die beiden Cluster zusammen, die die Varianz innerhalb der Cluster minimal erhöhen.

Die Trägheitsmatrix verwendet eine Heapq-basierte Darstellung.

Dies ist die strukturierte Version, die eine gewisse topologische Struktur zwischen den Samples berücksichtigt.

Lesen Sie mehr im Benutzerhandbuch.

Parameter:
Xarray-like der Form (n_samples, n_features)

Merkmalsmatrix, die n_samples zu clustern übergebene Samples darstellt.

connectivity{array-like, sparse matrix}, default=None

Konnektivitätsmatrix. Definiert für jedes Sample die benachbarten Samples gemäß einer gegebenen Struktur der Daten. Die Matrix wird als symmetrisch angenommen und nur die obere Dreieckshälfte wird verwendet. Standard ist None, d.h. der Ward-Algorithmus ist unstrukturiert.

n_clustersint, default=None

n_clusters sollte kleiner als n_samples sein. Stoppt frühzeitig die Konstruktion des Baumes bei n_clusters. Dies ist nützlich, um die Rechenzeit zu verkürzen, wenn die Anzahl der Cluster nicht klein im Vergleich zur Anzahl der Samples ist. In diesem Fall wird der vollständige Baum nicht berechnet, daher ist die Ausgabe 'children' von begrenztem Nutzen und die Ausgabe 'parents' sollte stattdessen verwendet werden. Diese Option ist nur gültig, wenn eine Konnektivitätsmatrix angegeben wird.

return_distancebool, default=False

Wenn True, gibt die Entfernung zwischen den Clustern zurück.

Gibt zurück:
childrenndarray of shape (n_nodes-1, 2)

Die Kinder jedes Nicht-Blattknotens. Werte kleiner als n_samples entsprechen Blättern des Baumes, bei denen es sich um die ursprünglichen Samples handelt. Ein Knoten i größer oder gleich n_samples ist ein Nicht-Blattknoten und hat die Kinder children_[i - n_samples]. Alternativ werden in der i-ten Iteration children[i][0] und children[i][1] zusammengeführt, um den Knoten n_samples + i zu bilden.

n_connected_componentsint

Die Anzahl der verbundenen Komponenten im Graphen.

n_leavesint

Die Anzahl der Blätter im Baum.

parentsndarray of shape (n_nodes,) or None

Der Elternteil jedes Knotens. Wird nur zurückgegeben, wenn eine Konnektivitätsmatrix angegeben wird, andernfalls wird 'None' zurückgegeben.

distancesndarray of shape (n_nodes-1,)

Wird nur zurückgegeben, wenn return_distance auf True gesetzt ist (zur Kompatibilität). Die Entfernungen zwischen den Zentren der Knoten. distances[i] entspricht einer gewichteten Euklidischen Entfernung zwischen den Knoten children[i, 1] und children[i, 2]. Wenn die Knoten sich auf Blätter des Baumes beziehen, dann ist distances[i] ihre ungewichtete Euklidische Entfernung. Die Entfernungen werden auf folgende Weise aktualisiert (aus scipy.hierarchy.linkage)

Der neue Eintrag \(d(u,v)\) wird wie folgt berechnet:

\[d(u,v) = \sqrt{\frac{|v|+|s|} {T}d(v,s)^2 + \frac{|v|+|t|} {T}d(v,t)^2 - \frac{|v|} {T}d(s,t)^2}\]

wobei \(u\) der neu verbundene Cluster ist, der aus den Clustern \(s\) und \(t\) besteht, \(v\) ein ungenutzter Cluster im Forest ist, \(T=|v|+|s|+|t|\) und \(|*|\) die Kardinalität seines Arguments ist. Dies ist auch als inkrementeller Algorithmus bekannt.

Beispiele

>>> import numpy as np
>>> from sklearn.cluster import ward_tree
>>> X = np.array([[1, 2], [1, 4], [1, 0],
...               [4, 2], [4, 4], [4, 0]])
>>> children, n_connected_components, n_leaves, parents = ward_tree(X)
>>> children
array([[0, 1],
       [3, 5],
       [2, 6],
       [4, 7],
       [8, 9]])
>>> n_connected_components
1
>>> n_leaves
6