Ich habe einen Speicherfehler bekommen, als ich den dbscan-Algorithmus von scikit ausgeführt habe. Meine Daten sind ungefähr 20000 * 10000, es ist eine binäre Matrix.
(Vielleicht ist es nicht geeignet, DBSCAN mit einer solchen Matrix zu verwenden. Ich bin ein Anfänger des maschinellen Lernens. Ich möchte nur eine Cluster-Methode finden, die keine anfängliche Cluster-Nummer benötigt)
Jedenfalls habe ich eine spärliche Matrix und Feature-Extraktion von Scikit gefunden.
Aber ich habe immer noch keine Idee, wie ich es benutzen soll. In der DBSCAN-Spezifikation gibt es keinen Hinweis auf die Verwendung von Sparse-Matrix. Ist es nicht erlaubt?
Wenn jemand weiß, wie man eine spärliche Matrix in DBSCAN benutzt, bitte sag es mir. Oder Sie können mir eine geeignetere Clustermethode nennen.
Die scikit
-Implementierung von DBSCAN ist leider sehr naiv . Es muss neu geschrieben werden, um die Indexierung (Ballbäume etc.) zu berücksichtigen.
Ab sofort wird es offensichtlich darauf ankommen, eine komplette Entfernungsmatrix zu berechnen, die ein Los Speicher verschwendet.
Darf ich vorschlagen, dass Sie DBSCAN einfach selbst neu implementieren? Es ist ziemlich einfach, es existiert ein guter Pseudocode, z.B. auf Wikipedia und in der Originalpublikation. Es sollte nur ein paar Zeilen sein, und Sie können dann leicht von Ihrer Datendarstellung profitieren. Z.B. Wenn Sie bereits ein Ähnlichkeitsdiagramm in einer dünn besetzten Darstellung haben, ist es normalerweise ziemlich einfach, eine "Bereichsabfrage" durchzuführen (d. h. Sie verwenden nur die Kanten, die Ihren Entfernungsschwellenwert erfüllen)
Hier ist ein Problem in scikit-learn github , wo sie über die Verbesserung der Implementierung sprechen. Ein Benutzer berichtet, seine Version mit dem Ball-Baum ist 50x schneller (was mich nicht überrascht, ich habe ähnliche Beschleunigungen mit Indizes zuvor gesehen - es wird wahrscheinlich stärker ausgeprägt, wenn die Dateigröße weiter zu erhöhen).
Update : Die DBSCAN-Version in scikit-learn hat seit der Erstellung dieser Antwort wesentliche Verbesserungen erfahren.
Sie können eine Entfernungsmatrix an DBSCAN
übergeben. Wenn Sie also annehmen, dass X
Ihre Beispielmatrix ist, sollte Folgendes funktionieren:
Allerdings ist die Matrix D
sogar größer als X
: n_samples
² Einträge. Bei dünn besetzten Matrizen ist k-means wahrscheinlich die beste Option.
(DBSCAN mag attraktiv erscheinen, da es keine vorherbestimmte Anzahl von Clustern benötigt, aber es handelt sich um zwei Parameter, die Sie tunen müssen. Es ist meistens in Einstellungen anwendbar, wo die Samples sind Punkte im Raum und Sie wissen, wie nah diese Punkte im selben Cluster sein sollen, oder wenn Sie eine Blackbox-Abstandsmetrik haben, die scikit-learn nicht unterstützt.
Sklearns DBSCAN-Algorithmus verwendet keine Arrays mit geringer Dichte. Allerdings KMeans und Spectral Clustering , können Sie diese ausprobieren. Mehr zu Sklearns-Clustering-Methoden: Ссылка
Tags und Links cluster-analysis dbscan machine-learning data-mining scikit-learn