2012-03-26 1 views
7

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

Я нашел функцию 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 

ответ

6

Обратите внимание, что function reference имеет ошибку. Правильное определение параметра t: «Порог отсечки для функции кластера или максимальное количество кластеров (критерий =« maxclust »)».

Так попробуйте это:

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

прохождения 'критерий = "расстояние"' зафиксировал его. Не осознавали, что эти параметры были связаны. Благодаря! – moooeeeep