Estou usando vários algoritmos de cluster do sklearn para agrupar alguns dados e não consigo descobrir o que está acontecendo com o DBSCAN. Meus dados são uma matriz de termos de documento do TfidfVectorizer, com algumas centenas de documentos pré-processados.
Código:
tfv = TfidfVectorizer(stop_words=STOP_WORDS, tokenizer=StemTokenizer())
data = tfv.fit_transform(dataset)
db = DBSCAN(eps=eps, min_samples=min_samples)
result = db.fit_predict(data)
svd = TruncatedSVD(n_components=2).fit_transform(data)
// Set the colour of noise pts to black
for i in range(0,len(result)):
if result[i] == -1:
result[i] = 7
colors = [LABELS[l] for l in result]
pl.scatter(svd[:,0], svd[:,1], c=colors, s=50, linewidths=0.5, alpha=0.7)
Aqui está o que eu recebo para eps = 0,5, min_samples = 5:
Basicamente, não consigo obter nenhum cluster, a menos que defina min_samples como 3, o que fornece:
Eu tentei várias combinações de valores eps / min_samples e obtive resultados semelhantes. Parece sempre agrupar áreas de baixa densidade primeiro. Por que ele está se agrupando assim? Talvez eu esteja usando TruncatedSVD incorretamente?