Scikit-Learn: die Vorhersage, die neuen Punkte mit DBSCAN
Ich bin mit DBSCAN-cluster-einige Daten mithilfe von Scikit-Learn (Python 2.7):
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(random_state=0)
dbscan.fit(X)
Allerdings fand ich, dass es keine built-in Funktion (abgesehen von "fit_predict") könnten ordnen Sie die neuen Daten Punkte, Y, zu den Clustern identifiziert werden, die ursprünglichen Daten, X. Die K-means-Methode hat eine "Vorhersage" - Funktion, aber ich möchte in der Lage sein, das gleiche zu tun mit DBSCAN. So etwas wie dieses:
dbscan.predict(X, Y)
So, dass die Dichte abgeleitet werden kann, von X aber die return-Werte (cluster Zuweisungen/labels) sind nur für Y. Aus, was ich sagen kann, diese Funktion ist in R, also gehe ich davon aus, dass es auch irgendwie verfügbar in Python. Ich kann einfach nicht scheinen zu finden, keine Dokumentation für diese.
Auch, ich habe versucht, auf der Suche nach Gründen, warum DBSCAN kann nicht verwendet werden, die für die Kennzeichnung von neuen Daten, aber ich habe keine gefunden Rechtfertigungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist kein Clustering Klassifikation.
Clustering ist aufgehoben. Wenn Sie möchten, drücken Sie Sie in eine Vorhersage Denkweise (das ist nicht die beste Idee), dann ist es im wesentlichen vorhersagt, ohne zu lernen. Denn es ist nicht beschriftet Ausbildung verfügbaren Daten für das clustering. Es hat zu machen, neue Beschriftungen für die Daten, basierend auf dem, was es sieht. Aber Sie kann dies nicht auf eine einzelne Instanz, Sie können nur "bulk Vorhersagen".
Aber es ist etwas falsch mit scipys DBSCAN:
DBSCAN nicht "initialisieren der Zentren", weil es keine Zentren im DBSCAN.
Ziemlich nur clustering-Algorithmus, wo man zuweisen kann, die neuen Punkte zu den alten Clustern k-means (und Ihre vielen Variationen). Denn es führt eine "1NN Klassifizierung" mit dem vorherigen Iterationen cluster-Zentren, aktualisiert dann den Zentren. Aber die meisten algorithmen arbeiten nicht wie k-means, so können Sie nicht kopieren Sie diese.
Wenn Sie möchten, zu klassifizieren, die neuen Punkte, ist es am besten zu trainieren Klassifikator auf Ihre clustering-Ergebnis.
Was die R-version ist vielleicht zu tun, ist mit einem 1NN classificator für die Vorhersage, vielleicht mit der zusätzlichen Regel, dass die Punkte zugewiesen werden, die Lärm-label, wenn Ihre 1NN Abstand größer ist als epsilon, mabye auch mit dem core-Punkte nur. Vielleicht auch nicht.
Holen Sie sich die DBSCAN Papier, es behandelt nicht "Vorhersage", IIRC.
predict(X): Predict the closest cluster each sample in X belongs to.
, und das ist typischerweise das, was man beabsichtigt zu tun, mit "Vorhersage" in der clustering-Kontext.Während Anony-Mousse hat einige gute Punkte (Clustering ist in der Tat nicht die Klassifizierung) ich glaube, dass die Fähigkeit der Zuordnung von neuen Punkten hat es die Nützlichkeit. *
Basierend auf dem original-Papier auf DBSCAN und robertlaytons Ideen auf github.com/scikit-learn, schlage ich vor, laufen durch core-Punkte und die Zuordnung der cluster der erste zentrale Punkt, der innerhalb
eps
neuen Punkt.Dann ist gewährleistet, dass Ihre Stelle wird mindestens ein Grenzpunkt der zugeordneten cluster gemäß den Definitionen verwendet, die für das clustering.
(Beachten Sie, dass Ihr Punkt angesehen werden könnte Lärm und keine Zuordnung zu einem cluster)
Ich habe getan eine schnelle Umsetzung:
Des labels erhält durch clustering (
dbscan_model = DBSCAN(...).fit(X)
und die Etiketten, die aus der gleichen Modell auf die gleichen Daten (dbscan_predict(dbscan_model, X)
) unterscheiden sich manchmal. Ich bin mir nicht ganz sicher, ob das ein bug ist oder irgendwo ein Ergebnis des Zufalls.EDIT: ich Denke, das oben genannte problem der unterschiedlichen Vorhersage-Ergebnisse konnte, erwachsen aus der Möglichkeit, dass eine Grenze Punkt kann in der Nähe zu mehreren Clustern. Bitte aktualisieren Sie, wenn Sie dies testen und eine Antwort finden. Mehrdeutigkeit könnte gelöst werden, durch das mischen core-Punkte, jedes mal, oder mit der Auswahl der nächsten, anstatt das erste zentrale Punkt.
*) Fall zur hand haben: ich würde gerne bewerten, wenn die Cluster, die aus einer Teilmenge der meine Daten sinnvoll für eine andere Teilmenge oder ist einfach ein besonderer Fall.
Wenn Sie vergröbert es unterstützt die Wirksamkeit der Cluster und die früheren Schritte der Vorverarbeitung angewendet.
even though the core samples will always be assigned to the same clusters, the labels of those clusters will depend on the order in which those samples are encountered in the data. Second and more importantly, the clusters to which non-core samples are assigned can differ depending on the data order.
Hier eine etwas andere und effizientere Umsetzung. Auch, statt die erste beste Kern-Punkt, der in der eps-radius, der Kern Punkt, der am nächsten an der Probe entnommen.
Obwohl es nicht die exakt gleichen Algorithmus können Sie durchführen, Ungefähre Vorhersagen für neue Punkte mit sklearn HDBSCAN. Sehen hier.
Funktioniert es so: