scikit-learn: Clustering von Textdokumenten mit DBSCAN

Ich versuche, mit scikit-learn Textdokumente zu gruppieren. Im Großen und Ganzen finde ich mich zurecht, aber ich habe meine Probleme mit bestimmten Problemen. Die meisten der gefundenen Beispiele veranschaulichen das Clustering mithilfe von Scikit-Learn mit k-means als Clustering-Algorithmus. Das Übernehmen dieses Beispiels mit k-means zu meiner Einstellung funktioniert im Prinzip. K-means ist jedoch nicht geeignet, da ich die Anzahl der Cluster nicht kenne. Nach dem, was ich bisher gelesen habe - bitte korrigieren Sie mich hier, falls erforderlich - scheinen DBSCAN oder MeanShift in meinem Fall angemessener zu sein. Die Scikit-Learn-Website bietet Beispiele für jeden Cluster-Algorithmus. Das Problem ist jetzt, dass ich sowohl mit DBSCAN als auch mit MeanShift Fehler bekomme, die ich nicht verstehen, geschweige denn lösen kann.

Mein minimaler Code ist wie folgt:

docs = []
for item in [database]:
    docs.append(item)

vectorizer = TfidfVectorizer(min_df=1)
X = vectorizer.fit_transform(docs)

X = X.todense() # <-- This line was needed to resolve the isse

db = DBSCAN(eps=0.3, min_samples=10).fit(X)
...

(Meine Dokumente wurden bereits verarbeitet, d. H. Stoppwörter wurden entfernt und ein Porter-Stemmer wurde angewendet.)

Wenn ich diesen Code ausführe, wird beim Installieren von DBSCAN und beim Aufrufen die folgende Fehlermeldung angezeigtfit():

...
File "/usr/local/lib/python2.7/dist-packages/sklearn/cluster/dbscan_.py", line 248, in fit
clust = dbscan(X, **self.get_params())
File "/usr/local/lib/python2.7/dist-packages/sklearn/cluster/dbscan_.py", line 86, in dbscan
n = X.shape[0]
IndexError: tuple index out of range

Klicken Sie auf die Zeile indbscan_.py das wirft den fehler auf, mir ist folgende zeile aufgefallen

...
X = np.asarray(X)
n = X.shape[0]
...

Wenn ich diese Zeilen zum Testen direkt in meinem Code verwende, wird derselbe Fehler angezeigt. Ich weiß nicht wirklich wasnp.asarray(X) tut hier aber nach dem befehlX.shape = (). DaherX.shape[0] Bomben - vor,X.shape[0] bezieht sich richtig auf die Anzahl der Dokumente. Aus Neugier entfernte ich michX = np.asarray(X) vondbscan_.py. Wenn ich das mache, rechnet sich etwas schwer. Aber nach einigen Sekunden erhalte ich einen weiteren Fehler:

...
File "/usr/lib/python2.7/dist-packages/scipy/sparse/csr.py", line 214, in extractor
(min_indx,max_indx) = check_bounds(indices,N)
File "/usr/lib/python2.7/dist-packages/scipy/sparse/csr.py", line 198, in check_bounds
max_indx = indices.max()
File "/usr/lib/python2.7/dist-packages/numpy/core/_methods.py", line 17, in _amax
out=out, keepdims=keepdims)
ValueError: zero-size array to reduction operation maximum which has no identity

Kurz gesagt, ich habe keine Ahnung, wie ich DBSCAN zum Laufen bringen kann oder was ich im Allgemeinen vermisst haben könnte.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage