Escribí un script simple que está destinado a realizar clústeres jerárquicos en un conjunto de datos de prueba simple. 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
pasando 'criterio = "distancia"' arreglado. No me di cuenta de que estos parámetros estaban relacionados. ¡Gracias! – moooeeeep