Dichtebasiertes räumliches Clustering von Anwendungen mit Rauschclustering (DBSCAN) in R.

9

Diese Frage begann als " Clustering von Geodaten in R " und wurde nun in die DBSCAN-Frage verschoben.

Als die Antworten auf die erste Frage nahelegten, suchte ich nach Informationen über DBSCAN und las einige Dokumente darüber. Neue Fragen sind aufgetaucht.

DBSCAN erfordert einige Parameter, einer davon ist "Entfernung". Welche "Entfernung" sollte ich verwenden, da meine Daten dreidimensional sind, Längengrad, Breite und Temperatur? Welche Dimension hängt mit dieser Entfernung zusammen? Ich nehme an, es sollte Temperatur sein. Wie finde ich einen solchen Mindestabstand mit R?

Ein weiterer Parameter ist die Mindestanzahl von Punkten, die zur Bildung eines Clusters erforderlich sind. Gibt es eine Methode, um diese Nummer zu finden? Leider habe ich nicht gefunden.

Durch Google suchen Ich konnte kein R-Beispiel für die Verwendung von dbscan in einem ähnlichen Datensatz wie meinem finden. Kennen Sie eine Website mit solchen Beispielen? So kann ich lesen und versuchen, mich an meinen Fall anzupassen.

Die letzte Frage ist, dass mein erster R-Versuch mit DBSCAN (ohne eine richtige Antwort auf die vorherigen Fragen) zu einem Speicherproblem führte. R sagt, dass es keinen Vektor zuordnen kann. Ich beginne mit einem 4 km beabstandeten Raster mit 779191 Punkten, das in ungefähr 300000 Zeilen x 3 Spalten (Breite, Länge und Temperatur) endet, wenn nicht gültige SST-Punkte entfernt werden. Hinweise zur Behebung dieses Speicherproblems. Kommt es auf meinen Computer oder in DBSCAN selbst an?

Vielen Dank für die Geduld, eine lange und wahrscheinlich langweilige Nachricht zu lesen, und für Ihre Hilfe.

Pacomet
quelle
Es gibt ein Forum für räumliche Analysen. Vielleicht erwähnen Sie diesen Beitrag dort (stellen Sie sicher, dass Sie Cross-Posting sind). gis.stackexchange.com
Roman Luštrik

Antworten:

2

Ich bin immer noch mit diesem Problem fest. Ich habe einige Vorschläge von der R-Mailingliste erhalten (danke an Christian Hennig), die ich hier anhänge:

Haben Sie die dbscan-Funktion in der Bibliothek fpc in Betracht gezogen oder war es eine andere? Die fpc::dbscan()Funktion verfügt nicht über einen "Abstand" -Parameter, sondern über mehrere Optionen, von denen eine Ihr Speicherproblem lösen kann (siehe Dokumentation des "Speicher" -Parameters).

Die Verwendung einer Entfernungsmatrix für Hunderttausende von Punkten ist ein Rezept für eine Katastrophe (in Bezug auf den Speicher). Ich bin nicht sicher, ob die von Ihnen verwendete Funktion dies getan hat, fpc::dbscan()kann es aber vermeiden.

Es ist wahr, fpc::dbscan()dass Optimierungskonstanten erforderlich sind, die der Benutzer bereitstellen muss. Es gibt leider keine allgemeine Regel, wie dies zu tun ist; Es wäre notwendig, die Methode und die Bedeutung der Konstanten zu verstehen und zu verstehen, wie sich dies in den Anforderungen Ihrer Anwendung niederschlägt.

Sie können verschiedene Optionen ausprobieren und eine Cluster-Validierung durchführen, um zu sehen, was funktioniert, aber ich kann dies nicht einfach per E-Mail allgemein erklären.

Ich habe einige Versuche mit meinen Daten gemacht, aber ohne Erfolg:

"Ja, ich habe dbscan von fpc ausprobiert, aber ich bin immer noch mit dem Speicherproblem beschäftigt. In Bezug auf Ihre Antwort bin ich mir nicht sicher, welchen Speicherparameter ich mir ansehen soll. Im Folgenden ist der Code aufgeführt, den ich mit dbscan-Parametern ausprobiert habe. Vielleicht können Sie das Überprüfen Sie, ob ein Fehler vorliegt.

> sstdat=read.csv("sst.dat",sep=";",header=F,col.names=c("lon","lat","sst"))
> library(fpc)
> sst1=subset(sstdat, sst<50)
> sst2=subset(sst1, lon>-6)
> sst2=subset(sst2, lon<40)
> sst2=subset(sst2, lat<46)
> dbscan(sst2$sst, 0.1, MinPts = 5, scale = FALSE, method = c("hybrid"), 
         seeds = FALSE, showplot = FALSE, countmode = NULL)
Error: no se puede ubicar un vector de tamaño  858.2 Mb
> head(sst2)
             lon   lat   sst
1257 35.18 24.98 26.78
1258 35.22 24.98 26.78
1259 35.27 24.98 26.78
1260 35.31 24.98 26.78
1261 35.35 24.98 26.78
1262 35.40 24.98 26.85

In diesem Beispiel dbscan()beziehe ich mich nur auf Temperaturwerte, nicht auf lon / lat, daher ist der epsParameter 0,1. Da es sich um einen gerasterten Datensatz handelt, ist jeder Punkt von acht Datenpunkten umgeben. Daher dachte ich, dass mindestens 5 der umgebenden Punkte innerhalb der Erreichbarkeitsentfernung liegen sollten. Aber ich bin mir nicht sicher, ob ich den richtigen Ansatz finde, wenn ich nur den Temperaturwert berücksichtige. Vielleicht fehlen mir dann räumliche Informationen. Wie soll ich mit Längen- und Breitengraddaten umgehen?

Abmessungen von sst2sind: 152243 Zeilen x 3 Spalten "

Ich teile diese E-Mail-Nachrichten hier, falls einer von Ihnen etwas Licht auf R und DBSCAN werfen kann. Danke noch einmal

Pacomet
quelle
Hey, wo kannst du das Problem lösen? Ich habe mich an ähnliche Themen gehalten. Kannst du bitte deine Gedanken teilen?
Kumar
Lieber @kumar, ich musste zu den CLARA-Cluster-Methoden zurückkehren. Ich konnte DBSCAN nicht verwenden, es tut mir leid, dass ich Ihnen nicht helfen kann
Pacomet
2

Das Problem hierbei ist , mit R . Damit DBSCAN effektiv ist, benötigen Sie eine geeignete Indexstruktur (die Ihrer Entfernung entsprechen muss). R indiziert jedoch nicht wirklich. Darüber hinaus ist das fpc-Paket eine minimalistische Implementierung von DBSCAN und bietet nur einen kleinen Teil seiner Funktionalität.

O(n2)10km1K.

In "Generalized DBSCAN" finden Sie die allgemeinen Prinzipien, die DBSCAN benötigt: einen Begriff von "Nachbarschaft" und einen Begriff von "Kernpunkten" (oder "Dichte").

Hat aufgehört - Anony-Mousse
quelle