2013-11-04 5 views
10

Der folgende Code erzeugt ein einfaches hierarchisches Cluster Dendrogramm mit 10 Blattknoten:Matching Dendrogramm mit Clusternummer in Python scipy.cluster.hierarchy

import scipy 
import scipy.cluster.hierarchy as sch 
import matplotlib.pylab as plt 

X = scipy.randn(10,2) 
d = sch.distance.pdist(X) 
Z= sch.linkage(d,method='complete') 
P =sch.dendrogram(Z) 
plt.show() 

I erzeugen drei flache Cluster so wie:

T = sch.fcluster(Z, 3, 'maxclust') 
# array([3, 1, 1, 2, 2, 2, 2, 2, 1, 2]) 

Allerdings würde ich gerne die Cluster-Labels 1,2,3 auf dem Dendrogramm sehen. Es ist einfach für mich, mit nur 10 Blattknoten und drei Clustern zu visualisieren, aber wenn ich 1000 Knoten und 10 Cluster habe, kann ich nicht sehen, was vor sich geht.

Wie zeige ich die Cluster-Nummern auf dem Dendrogramm? Ich bin offen für andere Pakete. Vielen Dank.

Antwort

3

Hier ist eine Lösung, die die Cluster passend färbt und die Blätter des Dendrogramms mit dem entsprechenden Clusternamen beschriftet (die Blätter sind beschriftet: "Punktnummer, Clusternummer"). Diese Techniken können unabhängig voneinander oder zusammen verwendet werden. Ich änderte Ihr ursprüngliches Beispiel, um beide zu enthalten:

import scipy 
import scipy.cluster.hierarchy as sch 
import matplotlib.pylab as plt 

n=10 
k=3 
X = scipy.randn(n,2) 
d = sch.distance.pdist(X) 
Z= sch.linkage(d,method='complete') 
T = sch.fcluster(Z, k, 'maxclust') 

# calculate labels 
labels=list('' for i in range(n)) 
for i in range(n): 
    labels[i]=str(i)+ ',' + str(T[i]) 

# calculate color threshold 
ct=Z[-(k-1),2] 

#plot 
P =sch.dendrogram(Z,labels=labels,color_threshold=ct) 
plt.show() 
+0

Danke, Sean. Aber wie passe ich die Farbe dem Cluster an? Das Beispiel, das ich gepostet habe, hat 10 Datenpunkte, aber im Allgemeinen habe ich 1000 Punkte. – user1910316