2012-03-26 17 views
7

Ich schrieb ein einfaches Skript, das hierarchische Clustering auf einem einfachen Test-Dataset durchführen soll. The test data that was used.Kann scipy hierarchische Clustering nicht funktionieren

Ich habe die Funktion fclusterdata als einen Kandidaten gefunden, um meine Daten in zwei Cluster zu clustern. Es benötigt zwei obligatorische Aufrufparameter: den Datensatz und einen Schwellenwert. Das Problem ist, ich konnte keinen Schwellenwert finden, der die erwarteten zwei Cluster ergeben würde.

Ich würde mich freuen, wenn mir jemand sagen kann, was ich falsch mache. Ich würde auch glücklich sein, wenn jemand auf anderen Ansätzen zeigen könnte, die für meinen Clustering besser geeignet wäre (Ich mag ausdrücklich vorher die Anzahl der Cluster angeben, zu vermeiden.)

Hier ist mein Code:

import time 
import scipy.cluster.hierarchy as hcluster 
import numpy.random as random 
import numpy 

import pylab 
pylab.ion() 

data = random.randn(2,200) 

data[:100,:100] += 10 

for i in range(5,15): 
    thresh = i/10. 
    clusters = hcluster.fclusterdata(numpy.transpose(data), thresh) 
    pylab.scatter(*data[:,:], c=clusters) 
    pylab.axis("equal") 
    title = "threshold: %f, number of clusters: %d" % (thresh, len(set(clusters))) 
    print title 
    pylab.title(title) 
    pylab.draw() 
    time.sleep(0.5) 
    pylab.clf() 

Hier ist die Ausgabe:

threshold: 0.500000, number of clusters: 129 
threshold: 0.600000, number of clusters: 129 
threshold: 0.700000, number of clusters: 129 
threshold: 0.800000, number of clusters: 75 
threshold: 0.900000, number of clusters: 75 
threshold: 1.000000, number of clusters: 73 
threshold: 1.100000, number of clusters: 58 
threshold: 1.200000, number of clusters: 1 
threshold: 1.300000, number of clusters: 1 
threshold: 1.400000, number of clusters: 1 

Antwort

6

Beachten Sie, dass die function reference einen Fehler aufweist. Die korrekte Definition des Parameters t lautet: "Die Abschaltschwelle für die Clusterfunktion oder die maximale Anzahl von Clustern (Kriterium = 'maxclust')".

diese So versuchen:

clusters = hcluster.fclusterdata(numpy.transpose(data), 2, criterion='maxclust', metric='euclidean', depth=1, method='centroid') 
+1

'Kriterium = "Abstand" passing' es fest. Habe nicht bemerkt, dass diese Parameter verwandt waren. Vielen Dank! – moooeeeep