2012-03-26 25 views
7

Escribí un script simple que está destinado a realizar clústeres jerárquicos en un conjunto de datos de prueba simple. The test data that was used.No se puede obtener un clúster jerárquico sospechoso para trabajar

Encontré la función fclusterdata para ser un candidato para agrupar mis datos en dos clústeres. Toma dos parámetros de llamada obligatorios: el conjunto de datos y un umbral. El problema es que no pude encontrar un umbral que arrojara los dos clústeres esperados.

Estaría feliz si alguien me puede decir lo que estoy haciendo mal. También sería feliz si alguien podría apuntar en otros enfoques que sería más adecuado para mi agrupación (I explícitamente quiero evitar que especificar el número de grupos de antemano.)

Aquí está mi código:

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() 

Aquí está la salida:

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 

Respuesta

6

tenga en cuenta que la function reference tiene un error. La definición correcta del parámetro t es: "El umbral de corte para la función del clúster o el número máximo de clústeres (criterio = 'maxclust')".

Así que trate esto:

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

pasando 'criterio = "distancia"' arreglado. No me di cuenta de que estos parámetros estaban relacionados. ¡Gracias! – moooeeeep

Cuestiones relacionadas