2013-04-11 2 views
16

wenn Sie diesen hierarchischen Clustering-Aufruf in scipy in Python:Wie berechnet man Cluster-Zuordnungen aus Linkage/Distanz-Matrizen in Scipy in Python?

from scipy.cluster.hierarchy import linkage 
# dist_matrix is long form distance matrix 
linkage_matrix = linkage(squareform(dist_matrix), linkage_method) 

dann, was eine effiziente Möglichkeit, von diesem zu Cluster-Zuweisungen für die einzelnen Punkte zu gehen? ein Vektor der Länge N wobei N die Anzahl der Punkte ist, wobei jeder Eintrag i die Clusternummer des Punktes i ist, wobei die Anzahl der durch einen gegebenen Schwellenwert thresh erzeugten Cluster für das resultierende Clustering gegeben ist?

Um zu verdeutlichen: Die Cluster-Nummer wäre der Cluster, in dem sie sich nach dem Anwenden eines Schwellenwerts auf den Baum befindet. In diesem Fall würden Sie einen eindeutigen Cluster für jeden Blattknoten für den Cluster erhalten, in dem er sich befindet. Eindeutig in dem Sinne, dass jeder Punkt zu einem "spezifischsten Cluster" gehört, der durch den Schwellenwert definiert wird, an dem Sie das Dendrogramm schneiden.

Ich weiß, dass scipy.cluster.hierarchy.fclusterdata gibt Ihnen diese Cluster-Zuweisung als Rückgabewert, aber ich bin von einer benutzerdefinierten Distanzmatrix und Abstand Metrik, so dass ich nicht fclusterdata verwenden kann. Die Frage läuft darauf hinaus: Wie kann ich berechnen, was fclusterdata Computing ist - die Cluster-Zuordnungen?

+1

Wenn Sie squareform (dist_matrix) zur Verknüpfung geben() wird die Matrix betrachtet als Beobachtungen und der Clustering Die Ergebnisse könnten falsch sein. Sie können den verdichteten Vektor der Abstandsmatrix direkt als Eingabe für linkage() angeben. – HongboZhu

+0

Weitere Details finden Sie unter: https://github.com/scipy/scipy/issues/2614 – HongboZhu

Antwort

14

Wenn ich Sie recht verstehe, ist das, was fcluster tut:

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

Forms flache Cluster aus der hierarchischen Clustering durch die Verknüpfung Matrix Z.

definiert ...

Rückgabe: Ein Array der Länge n. T [i] ist die flache Clusternummer, zu der die ursprüngliche Beobachtung gehört.

Also rufen Sie einfach fcluster(linkage_matrix, t), wo t ist Ihre Schwelle.

Verwandte Themen