Не удается заставить работать иерархическую кластеризацию scipy

Я написал простой скрипт, предназначенный для иерархической кластеризации простого тестового набора данных.The test data that was used.

Я обнаружил, что функция fclusterdataявляется кандидатом на кластеризацию моих данных в два кластера. Он принимает два обязательных параметра вызова: набор данных и порог. Проблема в том, что я не смог найти порог, который дал бы ожидаемые два кластера.

Буду рад, если кто-нибудь скажет мне, что я делаю неправильно. Я также был бы рад, если бы кто-нибудь мог указать на другие подходы, которые лучше подходят для моей кластеризации (я явно не хочу заранее указывать количество кластеров).

Вот мой код:

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

Вот вывод:

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

7
задан moooeeeep 26 March 2012 в 14:17
поделиться