Ich verwende mehrere Clustering-Algorithmen von sklearn, um einige Daten zu clustern, und kann anscheinend nicht herausfinden, was mit DBSCAN passiert. Meine Daten sind eine Dokument-Term-Matrix von TfidfVectorizer mit einigen hundert vorverarbeiteten Dokumenten.
Code:
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)
Folgendes bekomme ich für eps = 0.5, min_samples = 5:
Grundsätzlich kann ich überhaupt keine Cluster erhalten, es sei denn, ich setze min_samples auf 3, was Folgendes ergibt:
Ich habe verschiedene Kombinationen von eps / min_samples-Werten ausprobiert und ähnliche Ergebnisse erzielt. Es scheint immer zuerst Bereiche mit geringer Dichte zu gruppieren. Warum gruppiert es sich so? Benutze ich TruncatedSVD möglicherweise falsch?