Clustering spaziale basato su densità di applicazioni con clustering di rumore (DBSCAN) in R


9

questa domanda è iniziata come " Clustering dei dati spaziali in R " e ora è passata alla domanda DBSCAN.

Come suggerito dalle risposte alla prima domanda, ho cercato informazioni su DBSCAN e ho letto alcuni documenti su. Sono sorte nuove domande.

DBSCAN richiede alcuni parametri, uno dei quali è "distanza". Dato che i miei dati sono tridimensionali, longitudine, latitudine e temperatura, quale "distanza" dovrei usare? quale dimensione è correlata a quella distanza? Suppongo che dovrebbe essere la temperatura. Come trovo tale distanza minima con R?

Un altro parametro è il numero minimo di punti necessari per formare un cluster. Esiste un metodo per trovare quel numero? Purtroppo non ho trovato.

Cercando su Google non sono riuscito a trovare un esempio R per l'utilizzo di dbscan in un set di dati simile al mio, conosci qualche sito Web con questo tipo di esempi? Quindi posso leggere e provare ad adattarmi al mio caso.

L'ultima domanda è che il mio primo tentativo di R con DBSCAN (senza una risposta adeguata alle domande precedenti) ha provocato un problema di memoria. R dice che non può allocare il vettore. Comincio con una griglia distanziata di 4 km con 779191 punti che termina in circa 300000 file x 3 colonne (latitudine, longitudine e temperatura) quando si rimuovono punti SST non validi. Qualsiasi suggerimento per risolvere questo problema di memoria. Dipende dal mio computer o dallo stesso DBSCAN?

Grazie per la pazienza di leggere un messaggio lungo e probabilmente noioso e per il vostro aiuto.


C'è un forum dedicato all'analisi spaziale. Forse menziona questo post lì (assicurati di menzionare che stai inviando messaggi). gis.stackexchange.com
Roman Luštrik

Risposte:


2

Sono ancora bloccato con questo problema. Ho ricevuto alcuni suggerimenti dalla mailing list R (grazie a Christian Hennig) che allego qui:

Hai considerato la funzione dbscan nella libreria fpc o era un'altra? La fpc::dbscan()funzione non ha un parametro "distance" ma diverse opzioni, una delle quali può risolvere il problema di memoria (consultare la documentazione del parametro "memory").

L'uso di una matrice di distanza per centinaia di migliaia di punti è una ricetta per il disastro (per quanto riguarda la memoria). Non sono sicuro che la funzione che hai usato lo abbia fatto, ma fpc::dbscan()posso evitarlo.

È vero che fpc::dbscan()richiede l'ottimizzazione delle costanti che l'utente deve fornire. Sfortunatamente non esiste una regola generale su come farlo; sarebbe necessario comprendere il metodo e il significato delle costanti e come ciò si traduce nei requisiti dell'applicazione.

Puoi provare diverse scelte e fare alcune convalide del cluster per vedere cosa funziona, ma non posso spiegarlo facilmente in termini generali via e-mail.

Ho fatto alcuni tentativi con i miei dati ma senza successo:

"Sì, ho provato dbscan da fpc ma sono ancora bloccato sul problema di memoria. Per quanto riguarda la tua risposta, non sono sicuro di quale parametro di memoria dovrei guardare. Di seguito è riportato il codice che ho provato con i parametri dbscan, forse puoi vedere se c'è qualche errore.

> 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 questo esempio si applica solo dbscan()ai valori di temperatura, non lon / lat, quindi il epsparametro è 0.1. Dato che si tratta di un set di dati con griglia, ogni punto è circondato da otto punti dati, quindi ho pensato che almeno 5 dei punti circostanti dovessero essere entro la distanza di raggiungibilità. Ma non sono sicuro di ottenere l'approccio giusto considerando solo il valore della temperatura, forse allora mi mancano le informazioni spaziali. Come devo gestire i dati di longitudine e latitudine?

Le dimensioni di sst2sono: 152243 righe x 3 colonne "

Condivido questi messaggi di posta qui nel caso in cui qualcuno di voi possa condividere un po 'di luce su R e DBSCAN. Grazie ancora


ehi dove sei in grado di risolvere il problema? Mi sono bloccato con problemi simili. puoi per favore condividere i tuoi pensieri?
Kumar,

Caro @kumar, sono dovuto tornare ai metodi del cluster CLARA. Non potevo usare DBSCAN, mi dispiace non
poterti

2

Il problema qui è con la R . Perché DBSCAN sia efficace, è necessario disporre di una struttura dell'indice appropriata (che deve corrispondere alla propria distanza). R, tuttavia, non esegue realmente l'indicizzazione. Inoltre, il pacchetto fpc è un'implementazione minimalista di DBSCAN, che offre solo una piccola parte della sua funzionalità.

Per quanto riguarda la funzione di distanza, è qui che è necessaria la tua "conoscenza del dominio". Se hai un'implementazione DBSCAN abbastanza flessibile (è davvero facile da implementare, l'indice per renderlo più veloce di è molto più difficile!) Dovresti essere in grado di metterti a una distanza arbitraria. Puoi anche fare due funzioni di distanza e valori epsilon: i punti devono essere al massimo distanza e la differenza di temperatura deve essere inferiore a10 k m 1 K .O(n2)10km1K.

Guarda "DBSCAN generalizzato" per i principi generali di cui DBSCAN ha bisogno: una nozione di "vicinato" e una nozione di "punti centrali" (o "densità").

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.